summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-05-06 16:49:46 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-05-06 16:50:15 +0100
commitafe8d8dfece87cb3b5f8429964e77d4ebf7b2959 (patch)
tree40937705d651ad1fa90569258c89ce0ccccb6028 /src/Compositor.cpp
parent7e5ba5e824f959d1f278b3b35033f382a6364bce (diff)
monitors: fix some bugs with re-plug
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 4c6af7ab..c95cd58e 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1859,7 +1859,7 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
const auto POLDMON = getMonitorFromID(pWorkspace->m_iMonitorID);
- const bool SWITCHINGISACTIVE = POLDMON->activeWorkspace == pWorkspace->m_iID;
+ const bool SWITCHINGISACTIVE = POLDMON ? POLDMON->activeWorkspace == pWorkspace->m_iID : false;
// fix old mon
int nextWorkspaceOnMonitorID = -1;
@@ -1906,12 +1906,16 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
// additionally, move floating and fs windows manually
if (w->m_bIsMapped && !w->isHidden()) {
- if (w->m_bIsFloating)
- w->m_vRealPosition = w->m_vRealPosition.vec() - POLDMON->vecPosition + pMonitor->vecPosition;
+ if (POLDMON) {
+ if (w->m_bIsFloating)
+ w->m_vRealPosition = w->m_vRealPosition.vec() - POLDMON->vecPosition + pMonitor->vecPosition;
- if (w->m_bIsFullscreen) {
- w->m_vRealPosition = pMonitor->vecPosition;
- w->m_vRealSize = pMonitor->vecSize;
+ if (w->m_bIsFullscreen) {
+ w->m_vRealPosition = pMonitor->vecPosition;
+ w->m_vRealSize = pMonitor->vecSize;
+ }
+ } else {
+ w->m_vRealPosition = Vector2D{(int)w->m_vRealPosition.goalv().x % (int)pMonitor->vecSize.x, (int)w->m_vRealPosition.goalv().y % (int)pMonitor->vecSize.y};
}
}
@@ -1936,10 +1940,12 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
}
// finalize
- g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID);
+ if (POLDMON) {
+ g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID);
+ updateFullscreenFadeOnWorkspace(getWorkspaceByID(POLDMON->activeWorkspace));
+ }
updateFullscreenFadeOnWorkspace(pWorkspace);
- updateFullscreenFadeOnWorkspace(getWorkspaceByID(POLDMON->activeWorkspace));
// event
g_pEventManager->postEvent(SHyprIPCEvent{"moveworkspace", pWorkspace->m_szName + "," + pMonitor->szName});