diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-01-29 12:48:36 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-02-01 23:56:59 +0000 |
commit | b1fbaec04c50e063ffacf665fceea388b4500158 (patch) | |
tree | 190528089c6dece94f5793d63ef6f7cb58da90fd | |
parent | eef3fe88d5507e4523c42c30359decee902c0461 (diff) |
Windows: Fix flicker when resizing translucent windows with QSizeGrip
Do not use the startSystemResize() functionality in that case.
Fixes: QTBUG-90628
Fixes: QTBUG-73011
Change-Id: I8d4843c1715c7f75f9b41c904e6f1aebbf0e02d7
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit 90dc13ae5facf97a2760edf054d2e002d0eae5d9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/widgets/widgets/qsizegrip.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp index 946839c373..be9ec0a580 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -268,6 +268,18 @@ static Qt::Edges edgesFromCorner(Qt::Corner corner) return Qt::Edges{}; } +static bool usePlatformSizeGrip(const QWidget *tlw) +{ + const QString &platformName = QGuiApplication::platformName(); + if (platformName.contains(u"xcb")) // ### FIXME QTBUG-69716 + return false; + if (tlw->testAttribute(Qt::WA_TranslucentBackground) + && platformName == u"windows") { + return false; // QTBUG-90628, flicker when using translucency + } + return true; +} + void QSizeGrip::mousePressEvent(QMouseEvent * e) { if (e->button() != Qt::LeftButton) { @@ -287,11 +299,11 @@ void QSizeGrip::mousePressEvent(QMouseEvent * e) && tlw->windowHandle() && !(tlw->windowFlags() & Qt::X11BypassWindowManagerHint) && !tlw->testAttribute(Qt::WA_DontShowOnScreen) - && !tlw->hasHeightForWidth()) { + && !tlw->hasHeightForWidth() + && usePlatformSizeGrip(tlw)) { QPlatformWindow *platformWindow = tlw->windowHandle()->handle(); const Qt::Edges edges = edgesFromCorner(d->m_corner); - if (!QGuiApplication::platformName().contains(QStringLiteral("xcb"))) // ### FIXME QTBUG-69716 - d->m_platformSizeGrip = platformWindow && platformWindow->startSystemResize(edges); + d->m_platformSizeGrip = platformWindow->startSystemResize(edges); } if (d->m_platformSizeGrip) |