diff --git a/src/Window.cpp b/src/Window.cpp index fc09b330..6b264b6f 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -77,6 +77,18 @@ wlr_box CWindow::getWindowIdealBoundingBoxIgnoreReserved() { void CWindow::updateWindowDecos() { for (auto& wd : m_dWindowDecorations) wd->updateWindow(this); + + for (auto& wd : m_vDecosToRemove) { + for (auto it = m_dWindowDecorations.begin(); it != m_dWindowDecorations.end(); it++) { + if (it->get() == wd) { + it = m_dWindowDecorations.erase(it); + if (it == m_dWindowDecorations.end()) + break; + } + } + } + + m_vDecosToRemove.clear(); } pid_t CWindow::getPID() { diff --git a/src/Window.hpp b/src/Window.hpp index ca6bcbf6..afe52f89 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -99,6 +99,7 @@ public: // Window decorations std::deque> m_dWindowDecorations; + std::vector m_vDecosToRemove; // Special render data, rules, etc SWindowSpecialRenderData m_sSpecialRenderData; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index abb5d90c..2d46d7a0 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -40,12 +40,8 @@ void CHyprGroupBarDecoration::updateWindow(CWindow* pWindow) { if (g_pLayoutManager->getCurrentLayout()->getLayoutName() != "dwindle") { // ???? - for (auto it = pWindow->m_dWindowDecorations.begin(); it != pWindow->m_dWindowDecorations.end(); it++) { - if (it->get() == this) { - pWindow->m_dWindowDecorations.erase(it); - return; - } - } + m_pWindow->m_vDecosToRemove.push_back(this); + return; } // get the group info @@ -58,12 +54,8 @@ void CHyprGroupBarDecoration::updateWindow(CWindow* pWindow) { if (m_dwGroupMembers.size() == 0) { // remove - for (auto it = pWindow->m_dWindowDecorations.begin(); it != pWindow->m_dWindowDecorations.end(); it++) { - if (it->get() == this) { - pWindow->m_dWindowDecorations.erase(it); - return; - } - } + m_pWindow->m_vDecosToRemove.push_back(this); + return; } }