summaryrefslogtreecommitdiff
path: root/src/managers/KeybindManager.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-09-10 13:11:02 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-09-10 13:11:02 +0200
commitd94fe3d063a910cab64fbdc132f6aa168a52e14d (patch)
treeb0451f11357fbc74d1f456ee0737f4d24b110924 /src/managers/KeybindManager.cpp
parentf663fa209ce72571bd4c551a19757ccd58b3fb7f (diff)
added window pinning
Diffstat (limited to 'src/managers/KeybindManager.cpp')
-rw-r--r--src/managers/KeybindManager.cpp27
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());
+}