diff options
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.cpp | 12 | ||||
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamessagedialog.mm | 17 | ||||
-rw-r--r-- | src/widgets/dialogs/qmessagebox.cpp | 1 |
4 files changed, 29 insertions, 4 deletions
diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp index 0224fb2c61..fbc635cc93 100644 --- a/src/gui/kernel/qplatformdialoghelper.cpp +++ b/src/gui/kernel/qplatformdialoghelper.cpp @@ -15,6 +15,7 @@ #include <QtCore/QUrl> #include <QtCore/QVariant> #include <QtGui/QColor> +#include <QtGui/QPixmap> #include <algorithm> @@ -774,6 +775,7 @@ public: QPlatformDialogHelper::StandardButtons buttons; QList<QMessageDialogOptions::CustomButton> customButtons; int nextCustomButtonId; + QPixmap iconPixmap; }; QMessageDialogOptions::QMessageDialogOptions(QMessageDialogOptionsPrivate *dd) @@ -825,6 +827,16 @@ void QMessageDialogOptions::setIcon(Icon icon) d->icon = icon; } +void QMessageDialogOptions::setIconPixmap(const QPixmap &pixmap) +{ + d->iconPixmap = pixmap; +} + +QPixmap QMessageDialogOptions::iconPixmap() const +{ + return d->iconPixmap; +} + QString QMessageDialogOptions::text() const { return d->text; diff --git a/src/gui/kernel/qplatformdialoghelper.h b/src/gui/kernel/qplatformdialoghelper.h index 83857ba82e..2d3138270f 100644 --- a/src/gui/kernel/qplatformdialoghelper.h +++ b/src/gui/kernel/qplatformdialoghelper.h @@ -416,6 +416,9 @@ public: void setIcon(Icon icon); Icon icon() const; + void setIconPixmap(const QPixmap &pixmap); + QPixmap iconPixmap() const; + void setText(const QString &text); QString text() const; diff --git a/src/plugins/platforms/cocoa/qcocoamessagedialog.mm b/src/plugins/platforms/cocoa/qcocoamessagedialog.mm index c21fbc2ce4..3d3970953d 100644 --- a/src/plugins/platforms/cocoa/qcocoamessagedialog.mm +++ b/src/plugins/platforms/cocoa/qcocoamessagedialog.mm @@ -12,6 +12,7 @@ #include <QtGui/qtextdocument.h> #include <QtGui/private/qguiapplication_p.h> +#include <QtGui/private/qcoregraphics_p.h> #include <QtGui/qpa/qplatformtheme.h> #include <AppKit/NSAlert.h> @@ -90,8 +91,18 @@ bool QCocoaMessageDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality w m_alert.messageText = text.toNSString(); m_alert.informativeText = toPlainText(options()->informativeText()).toNSString(); - switch (options()->icon()) { - case QMessageDialogOptions::NoIcon: + switch (auto standardIcon = options()->icon()) { + case QMessageDialogOptions::NoIcon: { + // We only reflect the pixmap icon if the standard icon is unset, + // as setting a standard icon will also set a corresponding pixmap + // icon, which we don't want since it conflicts with the platform. + // If the user has set an explicit pixmap icon however, the standard + // icon will be NoIcon, so we're good. + QPixmap iconPixmap = options()->iconPixmap(); + if (!iconPixmap.isNull()) + m_alert.icon = [NSImage imageFromQImage:iconPixmap.toImage()]; + break; + } case QMessageDialogOptions::Information: case QMessageDialogOptions::Question: [m_alert setAlertStyle:NSAlertStyleInformational]; @@ -104,8 +115,6 @@ bool QCocoaMessageDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality w break; } - // FIXME: Propagate iconPixmap through dialog options - bool defaultButtonAdded = false; bool cancelButtonAdded = false; diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 95aaf45e7c..52a6d9282e 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -2719,6 +2719,7 @@ void QMessageBoxPrivate::helperPrepareShow(QPlatformDialogHelper *) options->setDetailedText(q->detailedText()); #endif options->setIcon(helperIcon(q->icon())); + options->setIconPixmap(q->iconPixmap()); options->setStandardButtons(helperStandardButtons(q)); } |