diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.cpp | 4 | ||||
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.h | 2 | ||||
-rw-r--r-- | src/widgets/dialogs/qmessagebox.cpp | 19 |
3 files changed, 20 insertions, 5 deletions
diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp index 278f55a9e0a..48db7f07162 100644 --- a/src/gui/kernel/qplatformdialoghelper.cpp +++ b/src/gui/kernel/qplatformdialoghelper.cpp @@ -882,9 +882,9 @@ QPlatformDialogHelper::StandardButtons QMessageDialogOptions::standardButtons() } int QMessageDialogOptions::addButton(const QString &label, QPlatformDialogHelper::ButtonRole role, - void *buttonImpl) + void *buttonImpl, int buttonId) { - const CustomButton b(d->nextCustomButtonId++, label, role, buttonImpl); + const CustomButton b(buttonId ? buttonId : d->nextCustomButtonId++, label, role, buttonImpl); d->customButtons.append(b); return b.id; } diff --git a/src/gui/kernel/qplatformdialoghelper.h b/src/gui/kernel/qplatformdialoghelper.h index 315f1bb511a..c2aeaeaaa67 100644 --- a/src/gui/kernel/qplatformdialoghelper.h +++ b/src/gui/kernel/qplatformdialoghelper.h @@ -446,7 +446,7 @@ public: }; int addButton(const QString &label, QPlatformDialogHelper::ButtonRole role, - void *buttonImpl = nullptr); + void *buttonImpl = nullptr, int buttonId = 0); void removeButton(int id); const QList<CustomButton> &customButtons(); const CustomButton *customButton(int id); diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 09740197248..982481ac347 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -2750,22 +2750,37 @@ void QMessageBoxPrivate::helperPrepareShow(QPlatformDialogHelper *) options->setIcon(helperIcon(q->icon())); options->setIconPixmap(q->iconPixmap()); + // Clear up front, since we might have prepared earlier + options->clearCustomButtons(); + // Add standard buttons and resolve default/escape button - options->setStandardButtons(helperStandardButtons(q)); + auto standardButtons = helperStandardButtons(q); for (int button = QDialogButtonBox::StandardButton::FirstButton; button <= QDialogButtonBox::StandardButton::LastButton; button <<= 1) { auto *standardButton = buttonBox->button(QDialogButtonBox::StandardButton(button)); if (!standardButton) continue; + if (auto *platformTheme = QGuiApplicationPrivate::platformTheme()) { + if (standardButton->text() != platformTheme->standardButtonText(button)) { + // The standard button has been customized, so add it as + // a custom button instead. + const auto buttonRole = buttonBox->buttonRole(standardButton); + options->addButton(standardButton->text(), + static_cast<QPlatformDialogHelper::ButtonRole>(buttonRole), + standardButton, button); + standardButtons &= ~QPlatformDialogHelper::StandardButton(button); + } + } + if (standardButton == defaultButton) options->setDefaultButton(button); else if (standardButton == detectedEscapeButton) options->setEscapeButton(button); } + options->setStandardButtons(standardButtons); // Add custom buttons and resolve default/escape button - options->clearCustomButtons(); for (auto *customButton : customButtonList) { // Unless it's the details button, since we don't do any // plumbing for the button's action in that case. |