summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorAqa-Ib <victorcana@gmx.com>2024-10-27 00:44:55 +0000
committerGitHub <noreply@github.com>2024-10-27 01:44:55 +0100
commita3d3b4fd64a51a8c1663b450bd2a408f1f0fa9b3 (patch)
tree366ac8c01ab2e9a463f089e2b30129b413a38269 /src/events/Windows.cpp
parentf3f7d3629a632682b1b3acf800f0b5fb10cd48f4 (diff)
groups: fix swallowing (#8223)
* fix swallowing for groups * remove unnecessary check * clang-format * clarify comment * make variables consistent * make aditional variables consistent
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 57a28948..e8abe30d 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -44,8 +44,6 @@ void Events::listener_mapWindow(void* owner, void* data) {
static auto PINACTIVEALPHA = CConfigValue<Hyprlang::FLOAT>("decoration:inactive_opacity");
static auto PACTIVEALPHA = CConfigValue<Hyprlang::FLOAT>("decoration:active_opacity");
static auto PDIMSTRENGTH = CConfigValue<Hyprlang::FLOAT>("decoration:dim_strength");
- static auto PSWALLOW = CConfigValue<Hyprlang::INT>("misc:enable_swallow");
- static auto PSWALLOWREGEX = CConfigValue<std::string>("misc:swallow_regex");
static auto PNEWTAKESOVERFS = CConfigValue<Hyprlang::INT>("misc:new_window_takes_over_fullscreen");
static auto PINITIALWSTRACKING = CConfigValue<Hyprlang::INT>("misc:initial_workspace_tracking");
@@ -322,6 +320,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->updateWindowData();
+ // Verify window swallowing. Get the swallower before calling onWindowCreated(PWINDOW) because getSwallower() wouldn't get it after if PWINDOW gets auto grouped.
+ const auto SWALLOWER = PWINDOW->getSwallower();
+ PWINDOW->m_pSwallowed = SWALLOWER;
+
if (PWINDOW->m_bIsFloating) {
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW);
PWINDOW->m_bCreatedOverFullscreen = true;
@@ -567,20 +569,12 @@ void Events::listener_mapWindow(void* owner, void* data) {
g_pCompositor->focusWindow(nullptr);
}
- // verify swallowing
- if (*PSWALLOW && std::string{*PSWALLOWREGEX} != STRVAL_EMPTY) {
- const auto SWALLOWER = PWINDOW->getSwallower();
-
- if (SWALLOWER) {
- // swallow
- PWINDOW->m_pSwallowed = SWALLOWER;
-
- g_pLayoutManager->getCurrentLayout()->onWindowRemoved(SWALLOWER);
-
- SWALLOWER->setHidden(true);
-
- g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->m_iMonitorID);
- }
+ // swallow
+ if (SWALLOWER) {
+ g_pLayoutManager->getCurrentLayout()->onWindowRemoved(SWALLOWER);
+ g_pHyprRenderer->damageWindow(SWALLOWER);
+ SWALLOWER->setHidden(true);
+ g_pLayoutManager->getCurrentLayout()->recalculateMonitor(PWINDOW->m_iMonitorID);
}
PWINDOW->m_bFirstMap = false;
@@ -662,7 +656,13 @@ void Events::listener_unmapWindow(void* owner, void* data) {
// swallowing
if (valid(PWINDOW->m_pSwallowed)) {
PWINDOW->m_pSwallowed->setHidden(false);
+
+ if (PWINDOW->m_sGroupData.pNextWindow.lock())
+ PWINDOW->m_pSwallowed->m_bGroupSwallowed = true; // flag for the swallowed window to be created into the group where it belongs when auto_group = false.
+
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW->m_pSwallowed.lock());
+
+ PWINDOW->m_pSwallowed->m_bGroupSwallowed = false;
PWINDOW->m_pSwallowed.reset();
}