From d78fda606fda9179c4d07781765f0f27ab7bf2b0 Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 16 Jul 2025 22:00:42 +0200 Subject: [PATCH] feat: unregister windows upon closing --- src/main.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index e69ada5..9838f0a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,7 @@ #include "globals.hpp" #include +#include #include #include // version.hpp will be generated by meson @@ -285,12 +286,16 @@ class CRenderWobblyWindowPassElement final: public IPassElement { PHLWINDOWREF m_pWindow; }; -// TODO: unregister on close void registerWindow(PHLWINDOW pWindow) { g_windowPositions[pWindow] = pWindow->m_realPosition->value(); } +void unregisterWindow(PHLWINDOW pWindow) { + g_windowPositions.erase(PHLWINDOWREF {pWindow}); +} + static SP g_openWindow = nullptr; +static SP g_closeWindow = nullptr; inline CFunctionHook* g_pRenderWindowHook = nullptr; typedef void (*origRenderWindow)( @@ -518,6 +523,14 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { } ); + g_closeWindow = HyprlandAPI::registerCallbackDynamic( + PHANDLE, + "closeWindow", + [](void* self, SCallbackInfo& info, std::any data) { + unregisterWindow(std::any_cast(data)); + } + ); + static const auto METHODS = HyprlandAPI::findFunctionsByName(PHANDLE, "renderWindow"); g_pRenderWindowHook = HyprlandAPI::createFunctionHook(handle, METHODS[0].address, (void*)&hkRenderWindow);