summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-03-05 00:21:37 +0000
committerVaxry <vaxry@vaxry.net>2024-03-05 00:21:37 +0000
commit12985fa0d8e43b1e33326dfb49be681970dfaea5 (patch)
treebde74b3361c1e42d4aff63db2e0974fedb9ca79f /src
parent9c48c322d49ba083ae474bc9131470d89cdce6fd (diff)
surface: fix damage tearing feedback
fixes #4935
Diffstat (limited to 'src')
-rw-r--r--src/desktop/Subsurface.cpp18
-rw-r--r--src/events/Windows.cpp16
2 files changed, 16 insertions, 18 deletions
diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp
index d9aa3d6d..bdf5aa35 100644
--- a/src/desktop/Subsurface.cpp
+++ b/src/desktop/Subsurface.cpp
@@ -145,24 +145,6 @@ void CSubsurface::onCommit() {
box = {COORDS, m_vLastSize};
g_pHyprRenderer->damageBox(&box);
}
-
- if (m_pWindowParent) {
- // tearing: if solitary, redraw it. This still might be a single surface window
- const auto PMONITOR = g_pCompositor->getMonitorFromID(m_pWindowParent->m_iMonitorID);
- if (PMONITOR && PMONITOR->solitaryClient == m_pWindowParent && m_pWindowParent->canBeTorn() && PMONITOR->tearingState.canTear &&
- m_sWLSurface.wlr()->current.committed & WLR_SURFACE_STATE_BUFFER) {
- CRegion damageBox{&m_sWLSurface.wlr()->buffer_damage};
-
- if (!damageBox.empty()) {
- if (PMONITOR->tearingState.busy) {
- PMONITOR->tearingState.frameScheduledWhileBusy = true;
- } else {
- PMONITOR->tearingState.nextRenderTorn = true;
- g_pHyprRenderer->renderMonitor(PMONITOR);
- }
- }
- }
- }
}
void CSubsurface::onDestroy() {
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 3517badc..0bf84f10 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -841,6 +841,22 @@ void Events::listener_commitWindow(void* owner, void* data) {
PWINDOW->m_pPopupHead->recheckTree();
}
+ // tearing: if solitary, redraw it. This still might be a single surface window
+ const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
+ if (PMONITOR && PMONITOR->solitaryClient == PWINDOW && PWINDOW->canBeTorn() && PMONITOR->tearingState.canTear &&
+ PWINDOW->m_pWLSurface.wlr()->current.committed & WLR_SURFACE_STATE_BUFFER) {
+ CRegion damageBox{&PWINDOW->m_pWLSurface.wlr()->buffer_damage};
+
+ if (!damageBox.empty()) {
+ if (PMONITOR->tearingState.busy) {
+ PMONITOR->tearingState.frameScheduledWhileBusy = true;
+ } else {
+ PMONITOR->tearingState.nextRenderTorn = true;
+ g_pHyprRenderer->renderMonitor(PMONITOR);
+ }
+ }
+ }
+
if (PWINDOW->m_bIsX11 || !PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen)
return;