diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-09-10 13:11:02 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-09-10 13:11:02 +0200 |
| commit | d94fe3d063a910cab64fbdc132f6aa168a52e14d (patch) | |
| tree | b0451f11357fbc74d1f456ee0737f4d24b110924 /src/managers/KeybindManager.cpp | |
| parent | f663fa209ce72571bd4c551a19757ccd58b3fb7f (diff) | |
added window pinning
Diffstat (limited to 'src/managers/KeybindManager.cpp')
| -rw-r--r-- | src/managers/KeybindManager.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index d5b6014a..821b0588 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -42,6 +42,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["resizewindowpixel"] = resizeWindow; m_mDispatchers["swapnext"] = swapnext; m_mDispatchers["swapactiveworkspaces"] = swapActiveWorkspaces; + m_mDispatchers["pin"] = pinActive; m_tScrollTimer.reset(); } @@ -613,6 +614,13 @@ void CKeybindManager::changeworkspace(std::string args) { if (!g_pCompositor->isWorkspaceVisible(workspaceToChangeTo)) { const auto OLDWORKSPACEID = PMONITOR->activeWorkspace; + // fix pinned windows + for (auto& w : g_pCompositor->m_vWindows) { + if (w->m_iWorkspaceID == PMONITOR->activeWorkspace && w->m_bPinned) { + w->m_iWorkspaceID = workspaceToChangeTo; + } + } + // change it if (workspaceToChangeTo != SPECIAL_WORKSPACE_ID) PMONITOR->activeWorkspace = workspaceToChangeTo; @@ -700,6 +708,13 @@ void CKeybindManager::changeworkspace(std::string args) { PMONITOR->specialWorkspaceOpen = false; + // fix pinned windows + for (auto& w : g_pCompositor->m_vWindows) { + if (w->m_iWorkspaceID == PMONITOR->activeWorkspace && w->m_bPinned) { + w->m_iWorkspaceID = workspaceToChangeTo; + } + } + if (workspaceToChangeTo != SPECIAL_WORKSPACE_ID) PMONITOR->activeWorkspace = workspaceToChangeTo; else @@ -1534,3 +1549,15 @@ void CKeybindManager::swapActiveWorkspaces(std::string args) { g_pCompositor->swapActiveWorkspaces(PMON1, PMON2); } + +void CKeybindManager::pinActive(std::string args) { + if (!g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow) || !g_pCompositor->m_pLastWindow->m_bIsFloating) + return; + + g_pCompositor->m_pLastWindow->m_bPinned = !g_pCompositor->m_pLastWindow->m_bPinned; + g_pCompositor->m_pLastWindow->m_iWorkspaceID = g_pCompositor->getMonitorFromID(g_pCompositor->m_pLastWindow->m_iMonitorID)->activeWorkspace; + + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastWindow->m_iWorkspaceID); + + PWORKSPACE->m_pLastFocusedWindow = g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()); +} |
