aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-04-02 12:10:03 +0100
committerVaxry <[email protected]>2024-04-02 12:10:03 +0100
commit2e5b146e57364795aabeb2dea6fd2257db8b2c3a (patch)
tree0b72dc9174b2f7c9c923780bd7f48e5c10baa570 /src
parentaf3a61a4e437fe728ef69c2739cae79e5a6254c0 (diff)
downloadHyprland-2e5b146e57364795aabeb2dea6fd2257db8b2c3a.tar.gz
Hyprland-2e5b146e57364795aabeb2dea6fd2257db8b2c3a.zip
workspace: remove lastFocusedWindow on unmap
Diffstat (limited to 'src')
-rw-r--r--src/desktop/Workspace.cpp9
-rw-r--r--src/desktop/Workspace.hpp3
2 files changed, 12 insertions, 0 deletions
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp
index a0c14bba..9200b4d7 100644
--- a/src/desktop/Workspace.cpp
+++ b/src/desktop/Workspace.cpp
@@ -30,6 +30,13 @@ CWorkspace::CWorkspace(int id, int monitorID, std::string name, bool special) {
m_szName = rule.defaultName.value();
}
+ m_pFocusedWindowHook = g_pHookSystem->hookDynamic("closeWindow", [this](void* self, SCallbackInfo& info, std::any param) {
+ const auto PWINDOW = std::any_cast<CWindow*>(param);
+
+ if (PWINDOW == m_pLastFocusedWindow)
+ m_pLastFocusedWindow = nullptr;
+ });
+
g_pEventManager->postEvent({"createworkspace", m_szName});
g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_iID, m_szName)});
EMIT_HOOK_EVENT("createWorkspace", this);
@@ -40,6 +47,8 @@ CWorkspace::~CWorkspace() {
Debug::log(LOG, "Destroying workspace ID {}", m_iID);
+ g_pHookSystem->unhook(m_pFocusedWindowHook);
+
g_pEventManager->postEvent({"destroyworkspace", m_szName});
g_pEventManager->postEvent({"destroyworkspacev2", std::format("{},{}", m_iID, m_szName)});
EMIT_HOOK_EVENT("destroyWorkspace", this);
diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp
index f1bdb333..0cae1859 100644
--- a/src/desktop/Workspace.hpp
+++ b/src/desktop/Workspace.hpp
@@ -66,4 +66,7 @@ class CWorkspace {
std::string getConfigName();
bool matchesStaticSelector(const std::string& selector);
+
+ private:
+ HOOK_CALLBACK_FN* m_pFocusedWindowHook = nullptr;
};