summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-07-05 17:31:47 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-07-05 17:31:47 +0200
commit6f5b8425cb7b7304dcce9a48e613d87538bd33d2 (patch)
treef5cd52eae23f9ab8c0d822d2d12ea203718ecf04 /src
parentdd422abb3359530bf999137ed1fe8bf97eefc2ed (diff)
fix invalidating the deque in CHyprGroupBarDeco
Diffstat (limited to 'src')
-rw-r--r--src/Window.cpp12
-rw-r--r--src/Window.hpp1
-rw-r--r--src/render/decorations/CHyprGroupBarDecoration.cpp16
3 files changed, 17 insertions, 12 deletions
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<std::unique_ptr<IHyprWindowDecoration>> m_dWindowDecorations;
+ std::vector<IHyprWindowDecoration*> 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;
}
}