diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 35b4ff97..5310ecae 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -26,6 +26,8 @@ CWindow::~CWindow() { g_pCompositor->m_pLastWindow = nullptr; } + events.destroy.emit(); + if (!g_pHyprOpenGL) return; diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index 8a368ea6..5007cef4 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -12,6 +12,7 @@ #include "../macros.hpp" #include "../managers/XWaylandManager.hpp" #include "DesktopTypes.hpp" +#include "../helpers/signal/Signal.hpp" enum eIdleInhibitMode { IDLEINHIBIT_NONE = 0, @@ -216,6 +217,10 @@ class CWindow { CWLSurface m_pWLSurface; + struct { + CSignal destroy; + } events; + union { wlr_xdg_surface* xdg; wlr_xwayland_surface* xwayland; diff --git a/src/helpers/signal/Signal.hpp b/src/helpers/signal/Signal.hpp index 38f9ea0c..f12d0dc4 100644 --- a/src/helpers/signal/Signal.hpp +++ b/src/helpers/signal/Signal.hpp @@ -9,7 +9,7 @@ class CSignal { public: - void emit(std::any data); + void emit(std::any data = {}); // [[nodiscard("Listener is unregistered when the ptr is lost")]] CHyprSignalListener registerListener(std::function handler);