[plasma/kwin] src/effect: offscreenquickview/quickeffect: Suspend frame updates when view isn't visible
Devin Lin <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 0df0fa8021cca81b2fa3067b47deb22ad5ef5910 by Devin Lin.
Committed on 31/07/2026 at 02:32.
Pushed by devinlin into branch 'master'.
offscreenquickview/quickeffect: Suspend frame updates when view isn't visible
With effect caching: https://invent.kde.org/plasma/kwin/-/merge_requests/8998, we can have effects that are not visible but still have a QML context active. Suspend frame updates during this state. Also introduce a signal for visibility state changes that can be listened to.
M +13 -8 src/effect/offscreenquickview.cpp
M +1 -0 src/effect/offscreenquickview.h
M +3 -1 src/effect/quickeffect.cpp
https://invent.kde.org/plasma/kwin/-/commit/0df0fa8021cca81b2fa3067b47deb22ad5ef5910
diff --git a/src/effect/offscreenquickview.cpp b/src/effect/offscreenquickview.cpp
index 194a099998a..30b322a859b 100644
--- a/src/effect/offscreenquickview.cpp
+++ b/src/effect/offscreenquickview.cpp
@@ -263,20 +263,24 @@ void OffscreenQuickView::setDevicePixelRatio(qreal dpr)
void OffscreenQuickView::handleSceneChanged()
{
- if (d->m_automaticRepaint) {
- d->m_repaintTimer->start();
- } else {
- d->m_item->scheduleFrame();
+ if (d->m_visible) {
+ if (d->m_automaticRepaint) {
+ d->m_repaintTimer->start();
+ } else {
+ d->m_item->scheduleFrame();
+ }
}
Q_EMIT sceneChanged();
}
void OffscreenQuickView::handleRenderRequested()
{
- if (d->m_automaticRepaint) {
- d->m_repaintTimer->start();
- } else {
- d->m_item->scheduleFrame();
+ if (d->m_visible) {
+ if (d->m_automaticRepaint) {
+ d->m_repaintTimer->start();
+ } else {
+ d->m_item->scheduleFrame();
+ }
}
Q_EMIT renderRequested();
}
@@ -574,6 +578,7 @@ void OffscreenQuickView::setVisible(bool visible)
}
d->m_visible = visible;
d->m_item->setVisible(visible);
+ Q_EMIT visibleChanged(visible);
if (visible) {
Q_EMIT d->m_renderControl->renderRequested();
diff --git a/src/effect/offscreenquickview.h b/src/effect/offscreenquickview.h
index 11c0610c5a1..497f512b528 100644
--- a/src/effect/offscreenquickview.h
+++ b/src/effect/offscreenquickview.h
@@ -141,6 +141,7 @@ public:
Q_SIGNALS:
void geometryChanged(const KWin::Rect &oldGeometry, const KWin::Rect &newGeometry);
+ void visibleChanged(bool visible);
void renderRequested();
void sceneChanged();
diff --git a/src/effect/quickeffect.cpp b/src/effect/quickeffect.cpp
index 8ce8a772392..b3f8fb3b0d1 100644
--- a/src/effect/quickeffect.cpp
+++ b/src/effect/quickeffect.cpp
@@ -165,7 +165,9 @@ void QuickSceneView::resetDirty()
void QuickSceneView::scheduleRepaint()
{
markDirty();
- scheduleFrame();
+ if (isVisible()) {
+ scheduleFrame();
+ }
}
VirtualDesktop *QuickSceneView::currentDesktop() const