diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-07 14:32:24 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-07 14:32:24 +0000 |
| commit | d8dcf670da246dd49a8d36d2c61445f729a0c752 (patch) | |
| tree | 75100e99e628381fbd7cf706a9b23c32e1d2bcdb /src/Compositor.cpp | |
| parent | 87b931303464151a88e981deed894cd787cc94ac (diff) | |
fix lost windows clogging up memory
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 59843b90..f6f73b42 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -438,7 +438,7 @@ CMonitor* CCompositor::getMonitorFromVector(const Vector2D& point) { void CCompositor::removeWindowFromVectorSafe(CWindow* pWindow) { if (windowExists(pWindow) && !pWindow->m_bFadingOut){ if (pWindow->m_bIsX11 && pWindow->m_iX11Type == 2) { - m_dUnmanagedX11Windows.erase(std::remove_if(m_dUnmanagedX11Windows.begin(), m_dUnmanagedX11Windows.end(), [&](std::unique_ptr<CWindow>& el) { return el.get() == pWindow; })); + std::erase_if(m_dUnmanagedX11Windows, [&](std::unique_ptr<CWindow>& el) { return el.get() == pWindow; }); } // if X11, also check its children @@ -449,16 +449,16 @@ void CCompositor::removeWindowFromVectorSafe(CWindow* pWindow) { continue; if (w->m_pX11Parent == pWindow) - m_vWindows.erase(std::remove_if(m_vWindows.begin(), m_vWindows.end(), [&](std::unique_ptr<CWindow>& el) { return el.get() == w.get(); })); + std::erase_if(m_vWindows, [&](std::unique_ptr<CWindow>& el) { return el.get() == w.get(); }); } for (auto& w : m_dUnmanagedX11Windows) { if (w->m_pX11Parent == pWindow) - m_dUnmanagedX11Windows.erase(std::remove_if(m_dUnmanagedX11Windows.begin(), m_dUnmanagedX11Windows.end(), [&](std::unique_ptr<CWindow>& el) { return el.get() == w.get(); })); + std::erase_if(m_dUnmanagedX11Windows, [&](std::unique_ptr<CWindow>& el) { return el.get() == w.get(); }); } } - m_vWindows.erase(std::remove_if(m_vWindows.begin(), m_vWindows.end(), [&](std::unique_ptr<CWindow>& el) { return el.get() == pWindow; })); + std::erase_if(m_vWindows, [&](std::unique_ptr<CWindow>& el) { return el.get() == pWindow; }); } } @@ -1068,8 +1068,9 @@ void CCompositor::cleanupFadingOut(const int& monid) { g_pHyprOpenGL->m_mWindowFramebuffers[w].release(); g_pHyprOpenGL->m_mWindowFramebuffers.erase(w); + w->m_bFadingOut = false; removeWindowFromVectorSafe(w); - m_vWindowsFadingOut.erase(std::remove(m_vWindowsFadingOut.begin(), m_vWindowsFadingOut.end(), w)); + std::erase(m_vWindowsFadingOut, w); Debug::log(LOG, "Cleanup: destroyed a window"); |
