From c0c7c12bb907ea8cdc6e17653cddb3691102beac Mon Sep 17 00:00:00 2001 From: Raffaele Mancuso <54762742+raffaem@users.noreply.github.com> Date: Sun, 8 Jan 2023 18:37:24 +0100 Subject: [PATCH] Pin dispatcher for a specific window (#1340) Closes #1339 --- src/managers/KeybindManager.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index cb2faf110..a2f38f11d 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1784,16 +1784,30 @@ void CKeybindManager::swapActiveWorkspaces(std::string args) { } void CKeybindManager::pinActive(std::string args) { - if (!g_pCompositor->m_pLastWindow || !g_pCompositor->m_pLastWindow->m_bIsFloating || g_pCompositor->m_pLastWindow->m_bIsFullscreen) + + CWindow* PWINDOW = nullptr; + + if (args != "" && args != "active" && args.length() > 1) { + PWINDOW = g_pCompositor->getWindowByRegex(args); + } else { + PWINDOW = g_pCompositor->m_pLastWindow; + } + + if (!PWINDOW) { + Debug::log(ERR, "pin: window not found"); + return; + } + + if (!PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen) 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; + PWINDOW->m_bPinned = !PWINDOW->m_bPinned; + PWINDOW->m_iWorkspaceID = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID)->activeWorkspace; - g_pCompositor->m_pLastWindow->updateDynamicRules(); - g_pCompositor->updateWindowAnimatedDecorationValues(g_pCompositor->m_pLastWindow); + PWINDOW->updateDynamicRules(); + g_pCompositor->updateWindowAnimatedDecorationValues(PWINDOW); - const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastWindow->m_iWorkspaceID); + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID); PWORKSPACE->m_pLastFocusedWindow = g_pCompositor->vectorToWindowTiled(g_pInputManager->getMouseCoordsInternal()); }