summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-04-14 15:03:53 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-04-14 15:03:53 +0100
commit287e6c4ede30c8e5e85863cd85f157e17e24879c (patch)
tree68d6ece9e46bb81bfbc15610b2043494c66f4624 /src/Compositor.cpp
parent011600ac6e7f6d52f69d0890bffba519a9d81e3f (diff)
internal: workspace manip handling rework
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp41
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);
+}