diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index fd6ba580..431ebef1 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -44,9 +44,7 @@ void Events::listener_newLayerSurface(wl_listener* listener, void* data) { layerSurface->hyprListener_destroyLayerSurface.initCallback(&WLRLAYERSURFACE->surface->events.destroy, &Events::listener_destroyLayerSurface, layerSurface, "layerSurface"); layerSurface->hyprListener_mapLayerSurface.initCallback(&WLRLAYERSURFACE->events.map, &Events::listener_mapLayerSurface, layerSurface, "layerSurface"); layerSurface->hyprListener_unmapLayerSurface.initCallback(&WLRLAYERSURFACE->events.unmap, &Events::listener_unmapLayerSurface, layerSurface, "layerSurface"); - - // TODO: fix this, this has memory issues. Somehow. https://github.com/hyprwm/Hyprland/issues/375 - //layerSurface->hyprListener_newPopup.initCallback(&WLRLAYERSURFACE->events.new_popup, &Events::listener_newPopup, layerSurface, "layerSurface"); + layerSurface->hyprListener_newPopup.initCallback(&WLRLAYERSURFACE->events.new_popup, &Events::listener_newPopup, layerSurface, "layerSurface"); layerSurface->layerSurface = WLRLAYERSURFACE; layerSurface->layer = WLRLAYERSURFACE->current.layer; @@ -80,7 +78,7 @@ void Events::listener_destroyLayerSurface(void* owner, void* data) { layersurface->hyprListener_destroyLayerSurface.removeCallback(); layersurface->hyprListener_mapLayerSurface.removeCallback(); layersurface->hyprListener_unmapLayerSurface.removeCallback(); - //layersurface->hyprListener_newPopup.removeCallback(); + layersurface->hyprListener_newPopup.removeCallback(); // rearrange to fix the reserved areas if (PMONITOR) { diff --git a/src/helpers/WLListener.cpp b/src/helpers/WLListener.cpp index 117e16eb..d48cce7d 100644 --- a/src/helpers/WLListener.cpp +++ b/src/helpers/WLListener.cpp @@ -25,6 +25,7 @@ void CHyprWLListener::removeCallback() { if (m_bIsConnected) { Debug::log(LOG, "Callback %x -> %x, %s removed.", &m_pCallback, &m_pOwner, m_szAuthor.c_str()); wl_list_remove(&m_sListener.link); + wl_list_init(&m_sListener.link); } m_bIsConnected = false; @@ -46,6 +47,7 @@ void CHyprWLListener::initCallback(wl_signal* pSignal, std::function