summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-03-15 15:55:24 +0000
committerVaxry <vaxry@vaxry.net>2024-03-15 15:55:30 +0000
commitbb933dcf04ff1daafbc9681c87b87d7e907ae7bd (patch)
tree2ad248120a02955d085e47c9df417985affadd30 /src
parentbc15a8f60028539690cccdb78eed7fc9175fe792 (diff)
popup: avoid damage loops with commits
fixes #5118
Diffstat (limited to 'src')
-rw-r--r--src/desktop/Popup.cpp7
-rw-r--r--src/desktop/Popup.hpp2
2 files changed, 5 insertions, 4 deletions
diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp
index d5599c65..98d5881a 100644
--- a/src/desktop/Popup.cpp
+++ b/src/desktop/Popup.cpp
@@ -133,7 +133,7 @@ void CPopup::onUnmap() {
g_pInputManager->simulateMouseMovement();
}
-void CPopup::onCommit() {
+void CPopup::onCommit(bool ignoreSiblings) {
if (m_pWLR->base->initial_commit) {
wlr_xdg_surface_schedule_configure(m_pWLR->base);
return;
@@ -152,7 +152,8 @@ void CPopup::onCommit() {
m_vLastPos = COORDSLOCAL;
}
- m_pSubsurfaceHead->recheckDamageForSubsurfaces();
+ if (!ignoreSiblings)
+ m_pSubsurfaceHead->recheckDamageForSubsurfaces();
g_pHyprRenderer->damageSurface(m_sWLSurface.wlr(), COORDS.x, COORDS.y);
@@ -227,7 +228,7 @@ void CPopup::recheckTree() {
void CPopup::recheckChildrenRecursive() {
for (auto& c : m_vChildren) {
- c->onCommit();
+ c->onCommit(true);
c->recheckChildrenRecursive();
}
}
diff --git a/src/desktop/Popup.hpp b/src/desktop/Popup.hpp
index 0ac460d1..5f7af085 100644
--- a/src/desktop/Popup.hpp
+++ b/src/desktop/Popup.hpp
@@ -26,7 +26,7 @@ class CPopup {
void onDestroy();
void onMap();
void onUnmap();
- void onCommit();
+ void onCommit(bool ignoreSiblings = false);
void onReposition();
void recheckTree();