diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-04-14 15:03:53 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-04-14 15:03:53 +0100 |
| commit | 287e6c4ede30c8e5e85863cd85f157e17e24879c (patch) | |
| tree | 68d6ece9e46bb81bfbc15610b2043494c66f4624 /src/Compositor.cpp | |
| parent | 011600ac6e7f6d52f69d0890bffba519a9d81e3f (diff) | |
internal: workspace manip handling rework
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 55f9e0b4..f2081f7a 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -836,7 +836,8 @@ void CCompositor::focusWindow(CWindow* pWindow, wlr_surface* pSurface) { // This is to fix incorrect feedback on the focus history. const auto PWORKSPACE = getWorkspaceByID(pWindow->m_iWorkspaceID); PWORKSPACE->m_pLastFocusedWindow = pWindow; - g_pKeybindManager->changeworkspace("[internal]" + std::to_string(pWindow->m_iWorkspaceID)); + const auto PMONITOR = getMonitorFromID(PWORKSPACE->m_iMonitorID); + PMONITOR->changeWorkspace(PWORKSPACE); // changeworkspace already calls focusWindow return; } @@ -1884,12 +1885,13 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni nextWorkspaceOnMonitorID++; Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with new %d", nextWorkspaceOnMonitorID); + + g_pCompositor->createNewWorkspace(nextWorkspaceOnMonitorID, POLDMON->ID); } Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing %d", nextWorkspaceOnMonitorID); - g_pKeybindManager->focusMonitor(std::to_string(POLDMON->ID)); - g_pKeybindManager->changeworkspace("[internal]" + std::to_string(nextWorkspaceOnMonitorID)); + POLDMON->changeWorkspace(nextWorkspaceOnMonitorID); // move the workspace @@ -2318,3 +2320,36 @@ void CCompositor::performUserChecks() { } } } + +void CCompositor::moveWindowToWorkspaceSafe(CWindow* pWindow, CWorkspace* pWorkspace) { + if (!pWindow || !pWorkspace) + return; + + const bool FULLSCREEN = pWindow->m_bIsFullscreen; + + if (FULLSCREEN) + setWindowFullscreen(pWindow, false, FULLSCREEN_FULL); + + if (!pWindow->m_bIsFloating) { + g_pLayoutManager->getCurrentLayout()->onWindowRemovedTiling(pWindow); + pWindow->m_iWorkspaceID = pWorkspace->m_iID; + pWindow->m_iMonitorID = pWorkspace->m_iMonitorID; + g_pLayoutManager->getCurrentLayout()->onWindowCreatedTiling(pWindow); + } else { + const auto PWINDOWMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID); + const auto POSTOMON = pWindow->m_vRealPosition.goalv() - PWINDOWMONITOR->vecPosition; + + const auto PWORKSPACEMONITOR = g_pCompositor->getMonitorFromID(pWorkspace->m_iMonitorID); + + pWindow->m_iWorkspaceID = pWorkspace->m_iID; + pWindow->m_iMonitorID = pWorkspace->m_iMonitorID; + + pWindow->m_vRealPosition = POSTOMON + PWORKSPACEMONITOR->vecPosition; + } + + pWindow->moveToWorkspace(pWorkspace->m_iID); + pWindow->updateToplevel(); + + if (FULLSCREEN) + setWindowFullscreen(pWindow, true, FULLSCREEN_FULL); +} |
