diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-03-18 16:30:29 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-03-18 16:30:29 +0000 |
| commit | 2ba5238b8e985bb5944b16ac657bf3653a812c00 (patch) | |
| tree | a8c8f1f094aab506d505a8ecb8cecad455492c76 /src/Window.cpp | |
| parent | 00c2ca46973f4bbeca3cf51cc7fc363cb10710d7 (diff) | |
groups: fix moving between displays
Diffstat (limited to 'src/Window.cpp')
| -rw-r--r-- | src/Window.cpp | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/Window.cpp b/src/Window.cpp index c1f7a56f..afa9ba7d 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -271,17 +271,21 @@ void CWindow::updateSurfaceOutputs() { } void CWindow::moveToWorkspace(int workspaceID) { - if (m_iWorkspaceID != workspaceID) { - m_iWorkspaceID = workspaceID; + if (m_iWorkspaceID == workspaceID) + return; - if (const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); PWORKSPACE) { - g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", getFormat("%x,%s", this, PWORKSPACE->m_szName.c_str())}); - EMIT_HOOK_EVENT("moveWindow", (std::vector<void*>{this, PWORKSPACE})); - } + m_iWorkspaceID = workspaceID; - if (const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID); PMONITOR) - g_pProtocolManager->m_pFractionalScaleProtocolManager->setPreferredScaleForSurface(g_pXWaylandManager->getWindowSurface(this), PMONITOR->scale); + const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID); + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); + + if (PWORKSPACE) { + g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", getFormat("%x,%s", this, PWORKSPACE->m_szName.c_str())}); + EMIT_HOOK_EVENT("moveWindow", (std::vector<void*>{this, PWORKSPACE})); } + + if (PMONITOR) + g_pProtocolManager->m_pFractionalScaleProtocolManager->setPreferredScaleForSurface(g_pXWaylandManager->getWindowSurface(this), PMONITOR->scale); } CWindow* CWindow::X11TransientFor() { @@ -615,4 +619,21 @@ void CWindow::insertWindowToGroup(CWindow* pWindow) { pWindow->m_sGroupData.pNextWindow = PHEAD; setGroupCurrent(pWindow); +} + +void CWindow::updateGroupOutputs() { + if (!m_sGroupData.pNextWindow) + return; + + CWindow* curr = m_sGroupData.pNextWindow; + + while (curr != this) { + curr->m_iMonitorID = m_iMonitorID; + curr->moveToWorkspace(m_iWorkspaceID); + + curr->m_vRealPosition = m_vRealPosition.goalv(); + curr->m_vRealSize = m_vRealSize.goalv(); + + curr = curr->m_sGroupData.pNextWindow; + } }
\ No newline at end of file |
