summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimur Pocheptsov <Timur.Pocheptsov@digia.com>2015-03-02 14:52:19 (GMT)
committerTimur Pocheptsov <Timur.Pocheptsov@digia.com>2015-03-02 16:46:22 (GMT)
commit0806c624bb3e29c0ca852def079f21bc56174be6 (patch)
tree3581476d7d3b48c3a0fddb74d6931dca3d5afa13
parentffb5ece8da10fa6d3ebf73a020ddd2a1dcf48a54 (diff)
downloadQt-0806c624bb3e29c0ca852def079f21bc56174be6.zip
Qt-0806c624bb3e29c0ca852def079f21bc56174be6.tar.gz
Qt-0806c624bb3e29c0ca852def079f21bc56174be6.tar.bz2
QGLWidget and re-parenting
On OS X we have QWidgetPrivate::glWidgets list to track all child gl-widgets and this propagates though all the widget's tree, starting from QGLWidget and up to the top-level window ('isWindow'). It can happen, that some of widgets in a chain is becoming a window (but still has a parent) - this results in QGLWidget's destructor failing to remove 'this' from one of ancestors (since it stops on the first 'isWindow' ancestor). Modify QWidgetPrivate::setParent_sys that it does NOT add glWidgets into the parent's glWidgets, if this widget isWindow itself. Change-Id: I4bf4a927a4e43537355fdcdef465638c91e9f956 Task-number: QTBUG-20652 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
-rw-r--r--src/gui/kernel/qwidget_mac.mm2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 7e9ebb9..16ec3d8 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -3092,7 +3092,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
// Maintain the glWidgets list on parent change: add "our" gl widgets
// to the list on the new parent and grandparents.
- if (glWidgets.isEmpty() == false) {
+ if (glWidgets.isEmpty() == false && !q->isWindow()) {
QWidget *current = q->parentWidget();
while (current) {
current->d_func()->glWidgets += glWidgets;