From bb90ff04610023457633cf76454a39727395b3a9 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Thu, 1 Sep 2022 11:46:36 +0200 Subject: [PATCH] sanity check on last window --- src/helpers/Workspace.cpp | 9 ++++++++- src/helpers/Workspace.hpp | 2 ++ src/managers/KeybindManager.cpp | 6 +++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/helpers/Workspace.cpp b/src/helpers/Workspace.cpp index 0ac976ba..0b964fdf 100644 --- a/src/helpers/Workspace.cpp +++ b/src/helpers/Workspace.cpp @@ -119,4 +119,11 @@ void CWorkspace::moveToMonitor(const int& id) { wlr_ext_workspace_handle_v1_set_urgent(m_pWlrHandle, false); wlr_ext_workspace_handle_v1_set_name(m_pWlrHandle, m_szName.c_str()); -} \ No newline at end of file +} + +CWindow* CWorkspace::getLastFocusedWindow() { + if (!g_pCompositor->windowValidMapped(m_pLastFocusedWindow) || m_pLastFocusedWindow->m_iWorkspaceID != m_iID) + return nullptr; + + return m_pLastFocusedWindow; +} diff --git a/src/helpers/Workspace.hpp b/src/helpers/Workspace.hpp index 88e72a25..5819cece 100644 --- a/src/helpers/Workspace.hpp +++ b/src/helpers/Workspace.hpp @@ -49,4 +49,6 @@ public: void setActive(bool on); void moveToMonitor(const int&); + + CWindow* getLastFocusedWindow(); }; \ No newline at end of file diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index fb70eb11..4429d28b 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -652,7 +652,7 @@ void CKeybindManager::changeworkspace(std::string args) { Debug::log(LOG, "Changed to workspace %i", workspaceToChangeTo); // focus - if (const auto PWINDOW = PWORKSPACETOCHANGETO->m_pLastFocusedWindow; g_pCompositor->windowValidMapped(PWINDOW)) { + if (const auto PWINDOW = PWORKSPACETOCHANGETO->getLastFocusedWindow(); PWINDOW) { // warp and focus if (anotherMonitor) g_pCompositor->warpCursorTo(PWINDOW->m_vRealPosition.vec() + PWINDOW->m_vRealSize.vec() / 2.f); @@ -1242,7 +1242,7 @@ void CKeybindManager::toggleSpecialWorkspace(std::string args) { } } - if (const auto PWINDOW = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace)->m_pLastFocusedWindow; g_pCompositor->windowValidMapped(PWINDOW) && PWINDOW->m_iMonitorID == monID) + if (const auto PWINDOW = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace)->getLastFocusedWindow(); g_pCompositor->windowValidMapped(PWINDOW)) g_pCompositor->focusWindow(PWINDOW); else g_pInputManager->refocus(); @@ -1260,7 +1260,7 @@ void CKeybindManager::toggleSpecialWorkspace(std::string args) { PSPECIALWORKSPACE->startAnim(true, true); PSPECIALWORKSPACE->m_iMonitorID = g_pCompositor->m_pLastMonitor->ID; - if (const auto PWINDOW = PSPECIALWORKSPACE->m_pLastFocusedWindow; g_pCompositor->windowValidMapped(PWINDOW)) + if (const auto PWINDOW = PSPECIALWORKSPACE->getLastFocusedWindow(); g_pCompositor->windowValidMapped(PWINDOW)) g_pCompositor->focusWindow(PWINDOW); else g_pInputManager->refocus();