windowrules: fix group rule recalcs (#12403)
This commit is contained in:
parent
00cce1c8ff
commit
c249a9f4b8
5 changed files with 83 additions and 3 deletions
|
|
@ -131,6 +131,68 @@ static void testSwapWindow() {
|
||||||
EXPECT(Tests::windowCount(), 0);
|
EXPECT(Tests::windowCount(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void testGroupRules() {
|
||||||
|
NLog::log("{}Testing group window rules", Colors::YELLOW);
|
||||||
|
|
||||||
|
OK(getFromSocket("/keyword general:border_size 8"));
|
||||||
|
OK(getFromSocket("/keyword workspace w[tv1], bordersize:0"));
|
||||||
|
OK(getFromSocket("/keyword workspace f[1], bordersize:0"));
|
||||||
|
OK(getFromSocket("/keyword windowrule match:workspace w[tv1], border_size 0"));
|
||||||
|
OK(getFromSocket("/keyword windowrule match:workspace f[1], border_size 0"));
|
||||||
|
|
||||||
|
if (!Tests::spawnKitty("kitty_A")) {
|
||||||
|
ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto str = getFromSocket("/getprop active border_size");
|
||||||
|
EXPECT_CONTAINS(str, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Tests::spawnKitty("kitty_B")) {
|
||||||
|
ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto str = getFromSocket("/getprop active border_size");
|
||||||
|
EXPECT_CONTAINS(str, "8");
|
||||||
|
}
|
||||||
|
|
||||||
|
OK(getFromSocket("/dispatch focuswindow class:kitty_A"));
|
||||||
|
OK(getFromSocket("/dispatch togglegroup"));
|
||||||
|
OK(getFromSocket("/dispatch focuswindow class:kitty_B"));
|
||||||
|
OK(getFromSocket("/dispatch moveintogroup l"));
|
||||||
|
|
||||||
|
{
|
||||||
|
auto str = getFromSocket("/getprop active border_size");
|
||||||
|
EXPECT_CONTAINS(str, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
OK(getFromSocket("/dispatch changegroupactive f"));
|
||||||
|
|
||||||
|
{
|
||||||
|
auto str = getFromSocket("/getprop active border_size");
|
||||||
|
EXPECT_CONTAINS(str, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Tests::spawnKitty("kitty_C")) {
|
||||||
|
ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
OK(getFromSocket("/dispatch moveoutofgroup r"));
|
||||||
|
|
||||||
|
{
|
||||||
|
auto str = getFromSocket("/getprop active border_size");
|
||||||
|
EXPECT_CONTAINS(str, "8");
|
||||||
|
}
|
||||||
|
|
||||||
|
OK(getFromSocket("/reload"));
|
||||||
|
Tests::killAllWindows();
|
||||||
|
}
|
||||||
|
|
||||||
static bool test() {
|
static bool test() {
|
||||||
NLog::log("{}Testing windows", Colors::GREEN);
|
NLog::log("{}Testing windows", Colors::GREEN);
|
||||||
|
|
||||||
|
|
@ -403,6 +465,11 @@ static bool test() {
|
||||||
|
|
||||||
OK(getFromSocket("/dispatch plugin:test:check_rule"));
|
OK(getFromSocket("/dispatch plugin:test:check_rule"));
|
||||||
|
|
||||||
|
OK(getFromSocket("/reload"));
|
||||||
|
Tests::killAllWindows();
|
||||||
|
|
||||||
|
testGroupRules();
|
||||||
|
|
||||||
NLog::log("{}Reloading config", Colors::YELLOW);
|
NLog::log("{}Reloading config", Colors::YELLOW);
|
||||||
OK(getFromSocket("/reload"));
|
OK(getFromSocket("/reload"));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) {
|
||||||
|
|
||||||
g_pHyprRenderer->damageWindow(pWindow);
|
g_pHyprRenderer->damageWindow(pWindow);
|
||||||
|
|
||||||
|
pWindow->m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
|
m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
pWindow->updateWindowDecos();
|
pWindow->updateWindowDecos();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -922,6 +924,10 @@ void CWindow::insertWindowToGroup(PHLWINDOW pWindow) {
|
||||||
SHEAD->m_groupData.head = false;
|
SHEAD->m_groupData.head = false;
|
||||||
BEGINAT->m_groupData.pNextWindow = SHEAD;
|
BEGINAT->m_groupData.pNextWindow = SHEAD;
|
||||||
STAIL->m_groupData.pNextWindow = ENDAT;
|
STAIL->m_groupData.pNextWindow = ENDAT;
|
||||||
|
|
||||||
|
pWindow->m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
|
m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
|
pWindow->updateWindowDecos();
|
||||||
}
|
}
|
||||||
|
|
||||||
PHLWINDOW CWindow::getGroupPrevious() {
|
PHLWINDOW CWindow::getGroupPrevious() {
|
||||||
|
|
@ -954,6 +960,10 @@ void CWindow::switchWithWindowInGroup(PHLWINDOW pWindow) {
|
||||||
|
|
||||||
std::swap(m_groupData.head, pWindow->m_groupData.head);
|
std::swap(m_groupData.head, pWindow->m_groupData.head);
|
||||||
std::swap(m_groupData.locked, pWindow->m_groupData.locked);
|
std::swap(m_groupData.locked, pWindow->m_groupData.locked);
|
||||||
|
|
||||||
|
pWindow->m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
|
m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_GROUP | Desktop::Rule::RULE_PROP_ON_WORKSPACE);
|
||||||
|
pWindow->updateWindowDecos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindow::updateGroupOutputs() {
|
void CWindow::updateGroupOutputs() {
|
||||||
|
|
|
||||||
|
|
@ -480,6 +480,7 @@ void CHyprDwindleLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dir
|
||||||
NEWPARENT->recalcSizePosRecursive(false, horizontalOverride, verticalOverride);
|
NEWPARENT->recalcSizePosRecursive(false, horizontalOverride, verticalOverride);
|
||||||
|
|
||||||
recalculateMonitor(pWindow->monitorID());
|
recalculateMonitor(pWindow->monitorID());
|
||||||
|
pWindow->m_workspace->updateWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
||||||
|
|
@ -528,6 +529,7 @@ void CHyprDwindleLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
||||||
|
|
||||||
m_dwindleNodesData.remove(*PPARENT);
|
m_dwindleNodesData.remove(*PPARENT);
|
||||||
m_dwindleNodesData.remove(*PNODE);
|
m_dwindleNodesData.remove(*PNODE);
|
||||||
|
pWindow->m_workspace->updateWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprDwindleLayout::recalculateMonitor(const MONITORID& monid) {
|
void CHyprDwindleLayout::recalculateMonitor(const MONITORID& monid) {
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,7 @@ void CHyprMasterLayout::onWindowCreatedTiling(PHLWINDOW pWindow, eDirection dire
|
||||||
|
|
||||||
// recalc
|
// recalc
|
||||||
recalculateMonitor(pWindow->monitorID());
|
recalculateMonitor(pWindow->monitorID());
|
||||||
|
pWindow->m_workspace->updateWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
||||||
|
|
@ -280,6 +281,7 @@ void CHyprMasterLayout::onWindowRemovedTiling(PHLWINDOW pWindow) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
recalculateMonitor(pWindow->monitorID());
|
recalculateMonitor(pWindow->monitorID());
|
||||||
|
pWindow->m_workspace->updateWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprMasterLayout::recalculateMonitor(const MONITORID& monid) {
|
void CHyprMasterLayout::recalculateMonitor(const MONITORID& monid) {
|
||||||
|
|
|
||||||
|
|
@ -1769,11 +1769,10 @@ SDispatchResult CKeybindManager::changeGroupActive(std::string args) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args != "b" && args != "prev") {
|
if (args != "b" && args != "prev")
|
||||||
PWINDOW->setGroupCurrent(PWINDOW->m_groupData.pNextWindow.lock());
|
PWINDOW->setGroupCurrent(PWINDOW->m_groupData.pNextWindow.lock());
|
||||||
} else {
|
else
|
||||||
PWINDOW->setGroupCurrent(PWINDOW->getGroupPrevious());
|
PWINDOW->setGroupCurrent(PWINDOW->getGroupPrevious());
|
||||||
}
|
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue