Window change notification QQuickWidget
QQuickWidget and QOpenGLWidget needs to know when the window changes so it can use the correct GL context. Task-number: QTBUG-37045 Change-Id: Ib98b18e721908017398518f73226cb3731886927 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com> Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
This commit is contained in:
parent
9ba7cc07db
commit
cc278a4a78
@ -274,6 +274,7 @@ QT_BEGIN_NAMESPACE
|
||||
\omitvalue NetworkReplyUpdated
|
||||
\omitvalue FutureCallOut
|
||||
\omitvalue NativeGesture
|
||||
\omitvalue WindowChangeInternal
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
@ -278,6 +278,8 @@ public:
|
||||
StyleAnimationUpdate = 213, // style animation target should be updated
|
||||
ApplicationStateChange = 214,
|
||||
|
||||
WindowChangeInternal = 215, // internal for QQuickWidget
|
||||
|
||||
// 512 reserved for Qt Jambi's MetaCall event
|
||||
// 513 reserved for Qt Jambi's DeleteOnMainThread event
|
||||
|
||||
|
@ -9596,6 +9596,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
|
||||
|
||||
@ -9720,6 +9737,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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user