fix: don't do anything if rule is applied

This commit is contained in:
Alessio Molinari 2024-02-19 22:52:48 +01:00
parent ba8e2a5e17
commit 6a38d78a30
No known key found for this signature in database
3 changed files with 13 additions and 0 deletions

View File

@ -39,6 +39,7 @@ class VirtualDesk {
void deleteInvalidMonitorsOnActiveLayout();
void deleteInvalidMonitorOnAllLayouts(const CMonitor*);
static std::shared_ptr<CMonitor> firstAvailableMonitor(const std::vector<std::shared_ptr<CMonitor>>&);
bool isWorkspaceOnActiveLayout(int workspaceId);
private:
int m_activeLayout_idx;

View File

@ -130,6 +130,14 @@ std::shared_ptr<CMonitor> VirtualDesk::firstAvailableMonitor(const std::vector<s
return newMonitor;
}
bool VirtualDesk::isWorkspaceOnActiveLayout(int workspaceId) {
for (auto [_, wid] : layouts[m_activeLayout_idx]) {
if (workspaceId == wid)
return true;
}
return false;
}
void VirtualDesk::checkAndAdaptLayout(Layout* layout, const CMonitor* exclude) {
auto enabledMons = currentlyEnabledMonitors(exclude);
if (enabledMons.size() == 0)

View File

@ -36,6 +36,8 @@ void StickyApps::matchRules(const std::vector<SStickyRule>& rules, std::unique_p
if (ruleMatch(r.value, windowProp)) {
printLog(std::format("rule matched {}: {}", r.value, windowProp));
auto windowPidFmt = std::format("pid:{}", w->getPID());
if (vdeskManager->activeVdesk()->isWorkspaceOnActiveLayout(w->m_iWorkspaceID))
continue;
vdeskManager->moveToDesk(windowPidFmt, r.vdesk);
}
}
@ -50,6 +52,8 @@ int StickyApps::matchRuleOnWindow(const std::vector<SStickyRule>& rules, std::un
if (ruleMatch(r.value, windowProp)) {
printLog(std::format("rule matched {}: {}", r.value, windowProp));
auto windowPidFmt = std::format("pid:{}", window->getPID());
if (vdeskManager->activeVdesk()->isWorkspaceOnActiveLayout(window->m_iWorkspaceID))
return -1;
vdeskManager->moveToDesk(windowPidFmt, r.vdesk);
return r.vdesk;
}