summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-03-10 22:27:17 +0000
committerVaxry <vaxry@vaxry.net>2024-03-10 22:27:23 +0000
commit0a1632a79f08ea5a2581832263354e06e9fab1f0 (patch)
treedecf238ca526e095190031f67936a0eda7c2573f /src
parent981296f101cf79176a8da7a1aa64fa297b2976dc (diff)
dwindle: preserve fs state on switchWindows
fixes #2842
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.hpp2
-rw-r--r--src/layout/DwindleLayout.cpp19
2 files changed, 16 insertions, 5 deletions
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index b1033e89..84667656 100644
--- a/src/Compositor.hpp
+++ b/src/Compositor.hpp
@@ -175,7 +175,7 @@ class CCompositor {
void swapActiveWorkspaces(CMonitor*, CMonitor*);
CMonitor* getMonitorFromString(const std::string&);
bool workspaceIDOutOfBounds(const int64_t&);
- void setWindowFullscreen(CWindow*, bool, eFullscreenMode);
+ void setWindowFullscreen(CWindow*, bool, eFullscreenMode mode = FULLSCREEN_INVALID);
void updateFullscreenFadeOnWorkspace(CWorkspace*);
CWindow* getX11Parent(CWindow*);
void scheduleFrameForMonitor(CMonitor*);
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp
index 2f66482a..cc4bc0b3 100644
--- a/src/layout/DwindleLayout.cpp
+++ b/src/layout/DwindleLayout.cpp
@@ -963,9 +963,16 @@ void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
auto PNODE = getNodeFromWindow(pWindow);
auto PNODE2 = getNodeFromWindow(pWindow2);
- if (!PNODE2 || !PNODE) {
+ if (!PNODE2 || !PNODE)
return;
- }
+
+ const bool FS1 = pWindow->m_bIsFullscreen;
+ const bool FS2 = pWindow2->m_bIsFullscreen;
+
+ if (FS1)
+ g_pCompositor->setWindowFullscreen(pWindow, false);
+ if (FS2)
+ g_pCompositor->setWindowFullscreen(pWindow2, false);
SDwindleNodeData* ACTIVE1 = nullptr;
SDwindleNodeData* ACTIVE2 = nullptr;
@@ -982,9 +989,8 @@ void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
// recalc the workspace
getMasterNodeOnWorkspace(PNODE->workspaceID)->recalcSizePosRecursive();
- if (PNODE2->workspaceID != PNODE->workspaceID) {
+ if (PNODE2->workspaceID != PNODE->workspaceID)
getMasterNodeOnWorkspace(PNODE2->workspaceID)->recalcSizePosRecursive();
- }
if (ACTIVE1) {
ACTIVE1->box = PNODE->box;
@@ -1000,6 +1006,11 @@ void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {
g_pHyprRenderer->damageWindow(pWindow);
g_pHyprRenderer->damageWindow(pWindow2);
+
+ if (FS1)
+ g_pCompositor->setWindowFullscreen(pWindow2, true);
+ if (FS2)
+ g_pCompositor->setWindowFullscreen(pWindow, true);
}
void CHyprDwindleLayout::alterSplitRatio(CWindow* pWindow, float ratio, bool exact) {