From 5cd7390ba91702efb2a978a438896d713f5a3abc Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 28 Feb 2014 12:50:48 +0100 Subject: [PATCH] QQuickWidget show/hide/raise fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure the alphamask in the backingstore is updated whenever the state of a QQuickWidget/QOpenGLWidget child changes. Task-number: QTBUG-37062 Change-Id: Iffa80fc8993499a15bc9e773a162a3f98b81ae03 Reviewed-by: Jørgen Lind --- src/widgets/kernel/qwidget_qpa.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index c2260b6e7d..acd80afddb 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -524,7 +524,10 @@ void QWidgetPrivate::show_sys() return; } - QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); + if (renderToTexture && !q->isWindow()) + QApplication::postEvent(q->parentWidget(), new QUpdateLaterEvent(q->geometry())); + else + QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); if (!q->isWindow() && !q->testAttribute(Qt::WA_NativeWindow)) return; @@ -588,7 +591,10 @@ void QWidgetPrivate::hide_sys() if (!q->isWindow()) { QWidget *p = q->parentWidget(); if (p &&p->isVisible()) { - invalidateBuffer(q->rect()); + if (renderToTexture) + p->d_func()->invalidateBuffer(q->geometry()); + else + invalidateBuffer(q->rect()); } } else { invalidateBuffer(q->rect()); @@ -663,6 +669,11 @@ void QWidgetPrivate::raise_sys() Q_Q(QWidget); if (q->isWindow() || q->testAttribute(Qt::WA_NativeWindow)) { q->windowHandle()->raise(); + } else if (renderToTexture) { + if (QWidget *p = q->parentWidget()) { + setDirtyOpaqueRegion(); + p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); + } } }