diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-05-06 16:49:46 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-05-06 16:50:15 +0100 |
| commit | afe8d8dfece87cb3b5f8429964e77d4ebf7b2959 (patch) | |
| tree | 40937705d651ad1fa90569258c89ce0ccccb6028 /src/Compositor.cpp | |
| parent | 7e5ba5e824f959d1f278b3b35033f382a6364bce (diff) | |
monitors: fix some bugs with re-plug
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 22 |
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}); |
