diff options
Diffstat (limited to 'src/widgets/kernel/qwidget.cpp')
| -rw-r--r-- | src/widgets/kernel/qwidget.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 540a8930493..514a2f21d5a 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -153,6 +153,7 @@ QWidgetPrivate::QWidgetPrivate(int version) , usesRhiFlush(0) , childrenHiddenByWState(0) , childrenShownByExpose(0) + , dontSetExplicitShowHide(0) #if defined(Q_OS_WIN) , noPaintOnScreen(0) #endif @@ -8291,8 +8292,12 @@ void QWidget::setVisible(bool visible) if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden) == !visible) return; - // Remember that setVisible was called explicitly - setAttribute(Qt::WA_WState_ExplicitShowHide); + if (d->dontSetExplicitShowHide) { + d->dontSetExplicitShowHide = false; + } else { + // Remember that setVisible was called explicitly + setAttribute(Qt::WA_WState_ExplicitShowHide); + } d->setVisible(visible); } @@ -8446,10 +8451,17 @@ void QWidgetPrivate::showChildren(bool spontaneous) QShowEvent e; QApplication::sendSpontaneousEvent(widget, &e); } else { - if (widget->testAttribute(Qt::WA_WState_ExplicitShowHide)) + if (widget->testAttribute(Qt::WA_WState_ExplicitShowHide)) { widget->d_func()->show_recursive(); - else - widget->d_func()->setVisible(true); + } else { + // Call QWidget::setVisible() here, so that subclasses + // that (wrongly) override setVisible to do initialization + // will still be notified that they are made visible, but + // do so without triggering ExplicitShowHide. + widget->d_func()->dontSetExplicitShowHide = true; + widget->setVisible(true); + widget->d_func()->dontSetExplicitShowHide = false; + } } } } |
