summaryrefslogtreecommitdiffstats
path: root/src/widgets/dialogs
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2023-06-28 15:03:11 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2023-06-29 18:49:46 +0200
commitcd9ae49962bbadf20c4b6599187b5a1bb0d8dc8a (patch)
tree223a14e6c09d4c100dbf3806485fc1ede8ce5777 /src/widgets/dialogs
parent49ce711796c2f10dfe658cc77b81db1f2d1b25f7 (diff)
QMessageBox: Set clicked button for native dialogs in clicked callback
For non-native dialogs we set the clicked button before calling finalize, which emits finished(). We did the same for custom buttons in native dialogs, but for standard buttons in native dialogs we deferred it until QMessageBoxPrivate::helperDone, which meant that during the finished() signal the button was not set. We now set the button as early as possible for all three cases. Pick-to: 6.6 6.5 Change-Id: Ifdbaa9a25105fef0bb56dd28caee9af55cd74e67 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/widgets/dialogs')
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp13
1 files changed, 2 insertions, 11 deletions
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index 9b51392901..551663a711 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -239,7 +239,6 @@ public:
private:
void initHelper(QPlatformDialogHelper *) override;
void helperPrepareShow(QPlatformDialogHelper *) override;
- void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) override;
};
void QMessageBoxPrivate::init(const QString &title, const QString &text)
@@ -510,6 +509,8 @@ void QMessageBoxPrivate::_q_clicked(QPlatformDialogHelper::StandardButton button
clickedButton->click();
q->done(role);
} else {
+ clickedButton = q->button(QMessageBox::StandardButton(button));
+ Q_ASSERT(clickedButton);
q->done(button);
}
}
@@ -2837,16 +2838,6 @@ void QMessageBoxPrivate::helperPrepareShow(QPlatformDialogHelper *)
options->setCheckBox(checkbox->text(), checkbox->checkState());
}
-void QMessageBoxPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHelper *)
-{
- Q_Q(QMessageBox);
- QAbstractButton *button = q->button(QMessageBox::StandardButton(code));
- // If it was a custom button, a custom ID was used, so we won't get a valid pointer here.
- // In that case, clickedButton has already been set in _q_buttonClicked.
- if (button)
- clickedButton = button;
-}
-
void qRequireVersion(int argc, char *argv[], QAnyStringView req)
{
const auto required = QVersionNumber::fromString(req).normalized();