From 729c4872ff40bf811fc024af0e2bf443363762eb Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Sat, 19 Jul 2025 19:22:16 +0100 Subject: [PATCH 1/4] animate window size/pos on setGroupCurrent modified: src/desktop/Window.cpp --- src/desktop/Window.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 8cdb5cebefa..5d92f12a971 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1041,8 +1041,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_lastWindow.lock(); - const auto PWINDOWSIZE = PCURRENT->m_realSize->goal(); - const auto PWINDOWPOS = PCURRENT->m_realPosition->goal(); + const auto PWINDOWSIZE = PCURRENT->m_realSize->value(); + const auto PWINDOWPOS = PCURRENT->m_realPosition->value(); const auto PWINDOWLASTFLOATINGSIZE = PCURRENT->m_lastFloatingSize; const auto PWINDOWLASTFLOATINGPOSITION = PCURRENT->m_lastFloatingPosition; @@ -1054,8 +1054,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { g_pLayoutManager->getCurrentLayout()->replaceWindowDataWith(PCURRENT, pWindow); - pWindow->m_realPosition->setValueAndWarp(PWINDOWPOS); - pWindow->m_realSize->setValueAndWarp(PWINDOWSIZE); + pWindow->m_realPosition->setValue(PWINDOWPOS); + pWindow->m_realSize->setValue(PWINDOWSIZE); if (FULLSCREEN) g_pCompositor->setWindowFullscreenInternal(pWindow, MODE); From 6350d8cd1277a50c6d6019719a0b409c4cc1f87d Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Sat, 19 Jul 2025 20:38:52 +0100 Subject: [PATCH 2/4] fix decoration getting autodeleted on creation modified: src/desktop/Window.cpp --- src/desktop/Window.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 5d92f12a971..d8070d08570 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1077,13 +1077,14 @@ void CWindow::insertWindowToGroup(PHLWINDOW pWindow) { const auto BEGINAT = m_self.lock(); const auto ENDAT = m_groupData.pNextWindow.lock(); - if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) - pWindow->addWindowDeco(makeUnique(pWindow)); - if (!pWindow->m_groupData.pNextWindow.lock()) { BEGINAT->m_groupData.pNextWindow = pWindow; pWindow->m_groupData.pNextWindow = ENDAT; pWindow->m_groupData.head = false; + + if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) + pWindow->addWindowDeco(makeUnique(pWindow)); + return; } From 9fa70ca93cea09d05baf1652d393944d546f0c36 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Sat, 19 Jul 2025 21:23:16 +0100 Subject: [PATCH 3/4] cleanup groupbar creation modified: src/desktop/Window.cpp modified: src/layout/IHyprLayout.cpp modified: src/managers/KeybindManager.cpp --- src/desktop/Window.cpp | 5 +---- src/layout/IHyprLayout.cpp | 11 +++-------- src/managers/KeybindManager.cpp | 3 --- 3 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index d8070d08570..6550452ec00 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1081,10 +1081,7 @@ void CWindow::insertWindowToGroup(PHLWINDOW pWindow) { BEGINAT->m_groupData.pNextWindow = pWindow; pWindow->m_groupData.pNextWindow = ENDAT; pWindow->m_groupData.head = false; - - if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) - pWindow->addWindowDeco(makeUnique(pWindow)); - + pWindow->addWindowDeco(makeUnique(pWindow)); return; } diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 629fb3fb893..730dea783d1 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -49,9 +49,10 @@ void IHyprLayout::onWindowRemoved(PHLWINDOW pWindow) { g_pCompositor->setWindowFullscreenInternal(pWindow, FSMODE_NONE); if (!pWindow->m_groupData.pNextWindow.expired()) { - if (pWindow->m_groupData.pNextWindow.lock() == pWindow) + if (pWindow->m_groupData.pNextWindow.lock() == pWindow) { pWindow->m_groupData.pNextWindow.reset(); - else { + pWindow->updateWindowDecos(); + } else { // find last window and update PHLWINDOW PWINDOWPREV = pWindow->getGroupPrevious(); const auto WINDOWISVISIBLE = pWindow->getGroupCurrent() == pWindow; @@ -226,9 +227,6 @@ bool IHyprLayout::onWindowCreatedAutoGroup(PHLWINDOW pWindow) { pWindow->updateWindowDecos(); recalculateWindow(pWindow); - if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) - pWindow->addWindowDeco(makeUnique(pWindow)); - return true; } @@ -355,9 +353,6 @@ void IHyprLayout::onEndDragWindow() { pWindow->setGroupCurrent(DRAGGINGWINDOW); DRAGGINGWINDOW->applyGroupRules(); DRAGGINGWINDOW->updateWindowDecos(); - - if (!DRAGGINGWINDOW->getDecorationByType(DECORATION_GROUPBAR)) - DRAGGINGWINDOW->addWindowDeco(makeUnique(DRAGGINGWINDOW)); } } } diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 43558d9d66f..ac2dc63f780 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -2942,9 +2942,6 @@ void CKeybindManager::moveWindowIntoGroup(PHLWINDOW pWindow, PHLWINDOW pWindowIn g_pCompositor->focusWindow(pWindow); pWindow->warpCursor(); - if (!pWindow->getDecorationByType(DECORATION_GROUPBAR)) - pWindow->addWindowDeco(makeUnique(pWindow)); - g_pEventManager->postEvent(SHyprIPCEvent{"moveintogroup", std::format("{:x}", (uintptr_t)pWindow.get())}); } From 9704b9aeaa3e31caf706dc3a9022c64bb80d6c29 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Sat, 19 Jul 2025 22:29:04 +0100 Subject: [PATCH 4/4] ensure m_realSize/Pos goal matches for float group modified: src/desktop/Window.cpp --- src/desktop/Window.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 6550452ec00..117f83b4df3 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1043,6 +1043,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { const auto PWINDOWSIZE = PCURRENT->m_realSize->value(); const auto PWINDOWPOS = PCURRENT->m_realPosition->value(); + const auto PWINDOWSIZEGOAL = PCURRENT->m_realSize->goal(); + const auto PWINDOWPOSGOAL = PCURRENT->m_realPosition->goal(); const auto PWINDOWLASTFLOATINGSIZE = PCURRENT->m_lastFloatingSize; const auto PWINDOWLASTFLOATINGPOSITION = PCURRENT->m_lastFloatingPosition; @@ -1054,6 +1056,12 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) { g_pLayoutManager->getCurrentLayout()->replaceWindowDataWith(PCURRENT, pWindow); + if (PCURRENT->m_isFloating) { + pWindow->m_realPosition->setValueAndWarp(PWINDOWPOSGOAL); + pWindow->m_realSize->setValueAndWarp(PWINDOWSIZEGOAL); + pWindow->sendWindowSize(); + } + pWindow->m_realPosition->setValue(PWINDOWPOS); pWindow->m_realSize->setValue(PWINDOWSIZE);