diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2021-11-09 13:23:41 +0100 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2021-12-21 12:04:15 +0100 |
commit | af7b60ade5c4be81cbc58eb18307c017d5594071 (patch) | |
tree | d3088fe0700dfca0aed81618de4584426570d876 /src/client/qwaylandwindow.cpp | |
parent | dff579147b07cd15888a47c303e36684e9930f9f (diff) | |
download | qtwayland-af7b60ade5c4be81cbc58eb18307c017d5594071.tar.gz |
Fix missing update when toggling client-side decorations
When CSD is toggled while a window is showing, it would change the
size and recreate the buffers, but since the widget area remained
the same size, we would not trigger a redraw. The result was that
when you got any update to the window, it would redraw the widgets
that had changed, and the rest would be transparent.
Since this is a fairly specialized case, we fix it the simple way,
by just issuing an extra update when it happens.
This also required an update to the surface test, since there is
an additional buffer commit in the beginning of the sequence now.
Pick-to: 5.15 6.2 6.3
Fixes: QTBUG-95032
Change-Id: Ic4bdb9c66a2ea76546926dd622f2d2dac5dce10c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/client/qwaylandwindow.cpp')
-rw-r--r-- | src/client/qwaylandwindow.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 0b4347a8..812373a2 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -953,6 +953,13 @@ bool QWaylandWindow::createDecoration() subsurf->set_position(pos.x() + m.left(), pos.y() + m.top()); } sendExposeEvent(QRect(QPoint(), geometry().size())); + + // This is a special case where the buffer is recreated, but since + // the content rect remains the same, the widgets remain the same + // size and are not redrawn, leaving the new buffer empty. As a simple + // work-around, we trigger a full extra update whenever the client-side + // window decorations are toggled while the window is showing. + window()->requestUpdate(); } return mWindowDecoration; |