summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qwidget_qpa.cpp
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@digia.com>2014-02-28 12:50:48 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-01 09:04:10 +0100
commit5cd7390ba91702efb2a978a438896d713f5a3abc (patch)
tree591d5a1285647ee2b1af9d0db96420c3359f2c76 /src/widgets/kernel/qwidget_qpa.cpp
parentd30778538159498caad491ba1d74ed2f5bb10b0c (diff)
QQuickWidget show/hide/raise fix
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 <jorgen.lind@digia.com>
Diffstat (limited to 'src/widgets/kernel/qwidget_qpa.cpp')
-rw-r--r--src/widgets/kernel/qwidget_qpa.cpp15
1 files 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()));
+ }
}
}