diff options
Diffstat (limited to 'src/widgets/dialogs/qdialog.cpp')
-rw-r--r-- | src/widgets/dialogs/qdialog.cpp | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp index d0e54e013c..27466d03d6 100644 --- a/src/widgets/dialogs/qdialog.cpp +++ b/src/widgets/dialogs/qdialog.cpp @@ -149,27 +149,6 @@ void QDialogPrivate::close(int resultCode) resetModalitySetByOpen(); } -/*! - \internal - - Emits finished() signal with \a resultCode. If the \a dialogCode - is equal to 0 emits rejected(), if the \a dialogCode is equal to - 1 emits accepted(). - */ -void QDialogPrivate::finalize(int resultCode, int dialogCode) -{ - Q_Q(QDialog); - QPointer<QDialog> guard(q); - - if (dialogCode == QDialog::Accepted) - emit q->accepted(); - else if (dialogCode == QDialog::Rejected) - emit q->rejected(); - - if (guard) - emit q->finished(resultCode); -} - QWindow *QDialogPrivate::transientParentWindow() const { Q_Q(const QDialog); @@ -345,6 +324,10 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const \snippet dialogs/dialogs.cpp extension + By setting the \l{QLayout::}{sizeConstraint} property of the dialog's + layout to \l{QLayout::}{SetFixedSize}, the dialog will not be resizable + by the user, and will automatically shrink when the extension gets hidden. + \sa QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, {Standard Dialogs Example} */ @@ -618,9 +601,22 @@ int QDialog::exec() void QDialog::done(int r) { + QPointer<QDialog> guard(this); + Q_D(QDialog); d->close(r); - d->finalize(r, r); + + if (!guard) + return; + + int dialogCode = d->dialogCode(); + if (dialogCode == QDialog::Accepted) + emit accepted(); + else if (dialogCode == QDialog::Rejected) + emit rejected(); + + if (guard) + emit finished(r); } /*! @@ -748,6 +744,10 @@ void QDialog::closeEvent(QCloseEvent *e) void QDialog::setVisible(bool visible) { Q_D(QDialog); + + if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden) != visible) + return; + d->setVisible(visible); } @@ -772,9 +772,6 @@ void QDialogPrivate::setVisible(bool visible) } if (visible) { - if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && !q->testAttribute(Qt::WA_WState_Hidden)) - return; - q->QWidget::setVisible(visible); // Window activation might be prevented. We can't test isActiveWindow here, @@ -825,8 +822,6 @@ void QDialogPrivate::setVisible(bool visible) #endif } else { - if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden)) - return; #if QT_CONFIG(accessibility) if (q->isVisible()) { |