diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 254abd92..73708b1b 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -147,7 +147,7 @@ void CCompositor::initServer() { m_sWLEventLoop = wl_display_get_event_loop(m_sWLDisplay); // register crit signal handler - wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr); + m_critSigSource = wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr); if (!envEnabled("HYPRLAND_NO_CRASHREPORTER")) { signal(SIGSEGV, handleUnrecoverableSignal); @@ -373,6 +373,9 @@ void CCompositor::cleanup() { if (m_sWLRBackend) wlr_backend_destroy(m_sWLRBackend); + if (m_critSigSource) + wl_event_source_remove(m_critSigSource); + wl_display_terminate(m_sWLDisplay); m_sWLDisplay = nullptr; diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 94d9e4d0..a297518d 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -178,14 +178,15 @@ class CCompositor { std::string explicitConfigPath; private: - void initAllSignals(); - void removeAllSignals(); - void cleanEnvironment(); - void setRandomSplash(); - void initManagers(eManagersInitStage stage); - void prepareFallbackOutput(); + void initAllSignals(); + void removeAllSignals(); + void cleanEnvironment(); + void setRandomSplash(); + void initManagers(eManagersInitStage stage); + void prepareFallbackOutput(); - uint64_t m_iHyprlandPID = 0; + uint64_t m_iHyprlandPID = 0; + wl_event_source* m_critSigSource = nullptr; }; inline std::unique_ptr g_pCompositor; diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index d42a0ef0..6bc76fc7 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -136,7 +136,7 @@ void CPopup::onCommit(bool ignoreSiblings) { onDestroy(); return; } - + if (m_pResource->surface->initialCommit) { m_pResource->surface->scheduleConfigure(); return; diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index cb43f0b9..e3ebce80 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -58,6 +58,9 @@ CCursorManager::CCursorManager() { CCursorManager::~CCursorManager() { if (m_pWLRXCursorMgr) wlr_xcursor_manager_destroy(m_pWLRXCursorMgr); + + if (m_pAnimationTimer) + wl_event_source_remove(m_pAnimationTimer); } void CCursorManager::dropBufferRef(CCursorManager::CCursorBuffer* ref) { diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index b6cb0c7a..db9f27e7 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -146,6 +146,11 @@ class CPointerManager { struct SMonitorPointerState { SMonitorPointerState(SP m) : monitor(m) {} + ~SMonitorPointerState() { + if (cursorFrontBuffer) + wlr_buffer_unlock(cursorFrontBuffer); + } + WP monitor; int softwareLocks = 0;