diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2018-06-27 17:26:49 +0200 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2018-06-29 07:29:09 +0000 |
commit | 4e7ad188206baff14d7fe00cc7305fff856869d0 (patch) | |
tree | 7ed385f6d451ae1fc9f6a9905ca87772882b76c2 /src/client | |
parent | 56e01f9e3372446d20f0bb70bed0b88348f2a74b (diff) |
Send damage for window decorations
Compositors that only update damaged regions would show the old content of the
decorations.
[ChangeLog][QPA plugin] Fixed the window decorations sometimes not updating on
some compositors.
Change-Id: I75ab40e159bf165152a58e438dd7f70e7f9e9b22
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/qwaylandabstractdecoration.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/client/qwaylandabstractdecoration.cpp b/src/client/qwaylandabstractdecoration.cpp index c82ff5394..479a85750 100644 --- a/src/client/qwaylandabstractdecoration.cpp +++ b/src/client/qwaylandabstractdecoration.cpp @@ -100,6 +100,16 @@ void QWaylandAbstractDecoration::setWaylandWindow(QWaylandWindow *window) d->m_wayland_window = window; } +static QRegion marginsRegion(const QSize &size, const QMargins &margins) +{ + QRegion r; + r += QRect(0, 0, size.width(), margins.top()); // top + r += QRect(0, size.height()+margins.top(), size.width(), margins.bottom()); //bottom + r += QRect(0, 0, margins.left(), size.height()); //left + r += QRect(size.width()+margins.left(), 0, margins.right(), size.height()); // right + return r; +} + const QImage &QWaylandAbstractDecoration::contentImage() { Q_D(QWaylandAbstractDecoration); @@ -113,6 +123,10 @@ const QImage &QWaylandAbstractDecoration::contentImage() d->m_decorationContentImage.fill(Qt::transparent); this->paint(&d->m_decorationContentImage); + QRegion damage = marginsRegion(window()->frameGeometry().size(), window()->frameMargins()); + for (QRect r : damage) + waylandWindow()->damage(r); + d->m_isDirty = false; } |