diff options
Diffstat (limited to 'src/widgets/widgets/qmdisubwindow.cpp')
-rw-r--r-- | src/widgets/widgets/qmdisubwindow.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index 14aeb73baf..83a997dae0 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -1000,7 +1000,9 @@ void QMdiSubWindowPrivate::removeBaseWidget() q->setWindowModified(false); } lastChildWindowTitle.clear(); - baseWidget->setParent(0); + // QTBUG-47993: parent widget can be reset before this call + if (baseWidget->parentWidget() == q) + baseWidget->setParent(0); baseWidget = 0; isWidgetHiddenByUs = false; } @@ -2204,8 +2206,8 @@ void QMdiSubWindowPrivate::setSizeGrip(QSizeGrip *newSizeGrip) void QMdiSubWindowPrivate::setSizeGripVisible(bool visible) const { // See if we can find any size grips - QList<QSizeGrip *> sizeGrips = q_func()->findChildren<QSizeGrip *>(); - foreach (QSizeGrip *grip, sizeGrips) + const QList<QSizeGrip *> sizeGrips = q_func()->findChildren<QSizeGrip *>(); + for (QSizeGrip *grip : sizeGrips) grip->setVisible(visible); } @@ -2307,7 +2309,7 @@ void QMdiSubWindow::setWidget(QWidget *widget) return; } - if (widget == d->baseWidget) { + if (Q_UNLIKELY(widget == d->baseWidget)) { qWarning("QMdiSubWindow::setWidget: widget is already set"); return; } @@ -2505,7 +2507,7 @@ void QMdiSubWindow::setKeyboardPageStep(int step) void QMdiSubWindow::setSystemMenu(QMenu *systemMenu) { Q_D(QMdiSubWindow); - if (systemMenu && systemMenu == d->systemMenu) { + if (Q_UNLIKELY(systemMenu && systemMenu == d->systemMenu)) { qWarning("QMdiSubWindow::setSystemMenu: system menu is already set"); return; } @@ -2653,7 +2655,7 @@ void QMdiSubWindow::showShaded() resize(d->internalMinimumSize); // Hide the internal widget if not already hidden by the user. - if (d->baseWidget && !d->baseWidget->isHidden()) { + if (d->baseWidget && !d->baseWidget->isHidden() && !(windowFlags() & Qt::FramelessWindowHint)) { d->baseWidget->hide(); d->isWidgetHiddenByUs = true; } |