diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 3f53f6c3..ea88bec1 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -421,8 +421,22 @@ void CCompositor::cleanup() { g_pWatchdog.reset(); g_pXWaylandManager.reset(); - wl_display_terminate(m_sWLDisplay); + if (m_sWLRCursor) + wlr_cursor_destroy(m_sWLRCursor); + if (m_sSeat.seat) + wlr_seat_destroy(m_sSeat.seat); + + if (m_sWLRRenderer) + wlr_renderer_destroy(m_sWLRRenderer); + + if (m_sWLRAllocator) + wlr_allocator_destroy(m_sWLRAllocator); + + if (m_sWLRBackend) + wlr_backend_destroy(m_sWLRBackend); + + wl_display_terminate(m_sWLDisplay); m_sWLDisplay = nullptr; } diff --git a/src/debug/HyprNotificationOverlay.cpp b/src/debug/HyprNotificationOverlay.cpp index 2f00d978..80c80601 100644 --- a/src/debug/HyprNotificationOverlay.cpp +++ b/src/debug/HyprNotificationOverlay.cpp @@ -36,6 +36,13 @@ CHyprNotificationOverlay::CHyprNotificationOverlay() { m_szIconFontName = fonts.substr(COLON + 2, LASTCHAR - (COLON + 2)); } +CHyprNotificationOverlay::~CHyprNotificationOverlay() { + if (m_pCairo) + cairo_destroy(m_pCairo); + if (m_pCairoSurface) + cairo_surface_destroy(m_pCairoSurface); +} + void CHyprNotificationOverlay::addNotification(const std::string& text, const CColor& color, const float timeMs, const eIcons icon, const float fontSize) { const auto PNOTIF = m_dNotifications.emplace_back(std::make_unique()).get(); diff --git a/src/debug/HyprNotificationOverlay.hpp b/src/debug/HyprNotificationOverlay.hpp index 25934734..d086ada9 100644 --- a/src/debug/HyprNotificationOverlay.hpp +++ b/src/debug/HyprNotificationOverlay.hpp @@ -39,6 +39,7 @@ struct SNotification { class CHyprNotificationOverlay { public: CHyprNotificationOverlay(); + ~CHyprNotificationOverlay(); void draw(CMonitor* pMonitor); void addNotification(const std::string& text, const CColor& color, const float timeMs, const eIcons icon = ICON_NONE, const float fontSize = 13.f); diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index 7eaebead..c625aae0 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -102,6 +102,11 @@ struct SKeyboard { bool operator==(const SKeyboard& rhs) const { return keyboard == rhs.keyboard; } + + ~SKeyboard() { + if (xkbTranslationState) + xkb_state_unref(xkbTranslationState); + } }; struct SMouse { diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index fa5ee8cd..3fcecfe4 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -53,6 +53,11 @@ CCursorManager::CCursorManager() { static auto P = g_pHookSystem->hookDynamic("monitorLayoutChanged", [this](void* self, SCallbackInfo& info, std::any param) { this->updateTheme(); }); } +CCursorManager::~CCursorManager() { + if (m_pWLRXCursorMgr) + wlr_xcursor_manager_destroy(m_pWLRXCursorMgr); +} + void CCursorManager::dropBufferRef(CCursorManager::CCursorBuffer* ref) { std::erase_if(m_vCursorBuffers, [ref](const auto& buf) { return buf.get() == ref; }); } diff --git a/src/managers/CursorManager.hpp b/src/managers/CursorManager.hpp index ff633592..629f29e1 100644 --- a/src/managers/CursorManager.hpp +++ b/src/managers/CursorManager.hpp @@ -13,6 +13,7 @@ struct wlr_xwayland; class CCursorManager { public: CCursorManager(); + ~CCursorManager(); wlr_buffer* getCursorBuffer(); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 1150ac2e..cfad932a 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -116,6 +116,11 @@ CKeybindManager::CKeybindManager() { }); } +CKeybindManager::~CKeybindManager() { + if (m_pXKBTranslationState) + xkb_state_unref(m_pXKBTranslationState); +} + void CKeybindManager::addKeybind(SKeybind kb) { m_lKeybinds.push_back(kb); @@ -219,6 +224,7 @@ void CKeybindManager::updateXKBTranslationState() { xkb_context_unref(PCONTEXT); m_pXKBTranslationState = xkb_state_new(PKEYMAP); + xkb_keymap_unref(PKEYMAP); } bool CKeybindManager::ensureMouseBindState() { diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index deb25ae9..24e71c6a 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -58,6 +58,7 @@ struct SParsedKey { class CKeybindManager { public: CKeybindManager(); + ~CKeybindManager(); bool onKeyEvent(wlr_keyboard_key_event*, SKeyboard*); bool onAxisEvent(wlr_pointer_axis_event*);