diff --git a/src/gui/painting/qcoregraphics.mm b/src/gui/painting/qcoregraphics.mm index 40fe5bdd144..ff7f877799b 100644 --- a/src/gui/painting/qcoregraphics.mm +++ b/src/gui/painting/qcoregraphics.mm @@ -122,6 +122,14 @@ QT_END_NAMESPACE } + (instancetype)imageFromQIcon:(const QIcon &)icon withSize:(int)size +{ + return [NSImage imageFromQIcon:icon withSize:0 withMode:QIcon::Normal withState:QIcon::Off]; +} + + ++ (instancetype)imageFromQIcon:(const QIcon &)icon withSize:(int)size withMode:(QIcon::Mode)mode + withState:(QIcon::State)state + { if (icon.isNull()) return nil; @@ -133,7 +141,7 @@ QT_END_NAMESPACE auto nsImage = [[[NSImage alloc] initWithSize:NSZeroSize] autorelease]; for (QSize size : std::as_const(availableSizes)) { - QImage image = icon.pixmap(size).toImage(); + const QImage image = icon.pixmap(size, mode, state).toImage(); if (image.isNull()) continue; diff --git a/src/gui/painting/qcoregraphics_p.h b/src/gui/painting/qcoregraphics_p.h index a35f27a7304..b685b0c96f1 100644 --- a/src/gui/painting/qcoregraphics_p.h +++ b/src/gui/painting/qcoregraphics_p.h @@ -18,8 +18,9 @@ #include #include -#include +#include #include +#include #include @@ -52,6 +53,10 @@ QT_END_NAMESPACE + (instancetype)imageFromQImage:(const QT_PREPEND_NAMESPACE(QImage) &)image; + (instancetype)imageFromQIcon:(const QT_PREPEND_NAMESPACE(QIcon) &)icon; + (instancetype)imageFromQIcon:(const QT_PREPEND_NAMESPACE(QIcon) &)icon withSize:(int)size; ++ (instancetype)imageFromQIcon:(const QT_PREPEND_NAMESPACE(QIcon) &)icon + withSize:(int)size + withMode:(QT_PREPEND_NAMESPACE(QIcon)::Mode)mode + withState:(QT_PREPEND_NAMESPACE(QIcon)::State)state; @end QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index c944e233336..b6033e9cdfc 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -372,7 +372,11 @@ NSMenuItem *QCocoaMenuItem::sync() m_native.keyEquivalentModifierMask = NSEventModifierFlagCommand; } - m_native.image = [NSImage imageFromQIcon:m_icon withSize:m_iconSize]; + const QIcon::Mode mode = m_enabled ? QIcon::Normal : QIcon::Disabled; + const QIcon::State state = m_checked ? QIcon::On : QIcon::Off; + m_native.image = [NSImage imageFromQIcon:m_icon withSize:m_iconSize + withMode:mode + withState:state]; m_native.state = m_checked ? NSControlStateValueOn : NSControlStateValueOff; return m_native;