diff options
author | Sergio Ahumada <sahumada@blackberry.com> | 2014-03-13 15:57:03 +0100 |
---|---|---|
committer | Sergio Ahumada <sahumada@blackberry.com> | 2014-03-13 15:57:11 +0100 |
commit | 27016b89ae49da091527548af0ca9022ec4d7902 (patch) | |
tree | de408d49d52dd6a73e75a612ef51342d6ee44638 /src/widgets/kernel/qwidget.cpp | |
parent | 3683bc97d2ebc0de3272fc09656b90a88f5eb326 (diff) | |
parent | fbaa6d3ca6fc2693c5c8a1cd8e565803adc97730 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Idec54e19963e8d88c711cb179cffc81596323899
Diffstat (limited to 'src/widgets/kernel/qwidget.cpp')
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index c52e0d47ce..ab045dd604 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -9600,6 +9600,23 @@ void QWidget::setParent(QWidget *parent) setParent((QWidget*)parent, windowFlags() & ~Qt::WindowType_Mask); } +#ifndef QT_NO_OPENGL +static void sendWindowChangeToTextureChildrenRecursively(QWidget *widget) +{ + QWidgetPrivate *d = QWidgetPrivate::get(widget); + if (d->renderToTexture) { + QEvent e(QEvent::WindowChangeInternal); + QApplication::sendEvent(widget, &e); + } + + for (int i = 0; i < d->children.size(); ++i) { + QWidget *w = qobject_cast<QWidget *>(d->children.at(i)); + if (w && !w->isWindow() && !w->isHidden() && QWidgetPrivate::get(w)->textureChildSeen) + sendWindowChangeToTextureChildrenRecursively(w); + } +} +#endif + /*! \overload @@ -9724,6 +9741,12 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) QEvent e(QEvent::ParentChange); QApplication::sendEvent(this, &e); } +#ifndef QT_NO_OPENGL + //renderToTexture widgets also need to know when their top-level window changes + if (d->textureChildSeen && oldtlw != window()) { + sendWindowChangeToTextureChildrenRecursively(this); + } +#endif if (!wasCreated) { if (isWindow() || parentWidget()->isVisible()) @@ -9892,7 +9915,7 @@ void QWidget::repaint(const QRect &rect) QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; - tlwExtra->backingStoreTracker->markDirty(rect, this, true); + tlwExtra->backingStoreTracker->markDirty(rect, this, QWidgetBackingStore::UpdateNow); tlwExtra->inRepaint = false; } } else { @@ -9921,7 +9944,7 @@ void QWidget::repaint(const QRegion &rgn) QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; - tlwExtra->backingStoreTracker->markDirty(rgn, this, true); + tlwExtra->backingStoreTracker->markDirty(rgn, this, QWidgetBackingStore::UpdateNow); tlwExtra->inRepaint = false; } } else { |