summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qplatformdialoghelper.cpp12
-rw-r--r--src/gui/kernel/qplatformdialoghelper.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoamessagedialog.mm17
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp1
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));
}