summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Turner <james.turner@kdab.com>2012-06-26 14:43:20 +0100
committerQt by Nokia <qt-info@nokia.com>2012-06-27 00:46:35 +0200
commit9315497d2af6d6944792bbbffd61582c7061ef4c (patch)
treedb149894c41bf3f0e3c692348fdba7577ccc48ff
parentc0a0b3710302dc7711c4296c35df8ccf6b91f572 (diff)
Convert QPA menus to use QIcon, and enable icons.
Icon support was disabled in QPA menus, now QIcon is in QtGui, convert the QPA interface, enable setting the icon in QMenu, and make the Cocoa implementation use it. (And fix a ref-counting leak if an icon is actually set) Change-Id: Ica203bf6826b79d8beee58f39febc851b9633a66 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
-rw-r--r--src/gui/kernel/qplatformmenu.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm5
-rw-r--r--src/widgets/widgets/qmenu.cpp3
4 files changed, 9 insertions, 6 deletions
diff --git a/src/gui/kernel/qplatformmenu.h b/src/gui/kernel/qplatformmenu.h
index 298dd5dd68..b4f4fc8a5d 100644
--- a/src/gui/kernel/qplatformmenu.h
+++ b/src/gui/kernel/qplatformmenu.h
@@ -55,6 +55,7 @@
#include <QtCore/qpointer.h>
#include <QtGui/QFont>
#include <QtGui/QKeySequence>
+#include <QtGui/QIcon>
QT_BEGIN_HEADER
@@ -73,7 +74,7 @@ public:
virtual quintptr tag()const = 0;
virtual void setText(const QString &text) = 0;
- virtual void setIcon(const QImage &icon) = 0;
+ virtual void setIcon(const QIcon &icon) = 0;
virtual void setMenu(QPlatformMenu *menu) = 0;
virtual void setVisible(bool isVisible) = 0;
virtual void setIsSeparator(bool isSeparator) = 0;
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.h b/src/plugins/platforms/cocoa/qcocoamenuitem.h
index 4a063d5965..f96f6fd91f 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.h
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.h
@@ -69,7 +69,7 @@ public:
{ return m_tag; }
void setText(const QString &text);
- void setIcon(const QImage &icon);
+ void setIcon(const QIcon &icon);
void setMenu(QPlatformMenu *menu);
void setVisible(bool isVisible);
void setIsSeparator(bool isSeparator);
@@ -97,7 +97,7 @@ private:
NSMenuItem *m_native;
QString m_text;
- QImage m_icon;
+ QIcon m_icon;
QCocoaMenu *m_menu;
bool m_isVisible;
bool m_enabled;
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
index abaffd211a..b70506697e 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
@@ -114,7 +114,7 @@ void QCocoaMenuItem::setText(const QString &text)
m_text = qt_mac_removeAmpersandEscapes(text);
}
-void QCocoaMenuItem::setIcon(const QImage &icon)
+void QCocoaMenuItem::setIcon(const QIcon &icon)
{
m_icon = icon;
}
@@ -306,8 +306,9 @@ NSMenuItem *QCocoaMenuItem::sync()
}
if (!m_icon.isNull()) {
- NSImage *img = qt_mac_cgimage_to_nsimage(qt_mac_image_to_cgimage(m_icon));
+ NSImage *img = static_cast<NSImage *>(qt_mac_create_nsimage(m_icon.pixmap(16, QIcon::Normal)));
[m_native setImage: img];
+ [img release];
}
[m_native setState:m_checked ? NSOnState : NSOffState];
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 4747d1c661..b201179661 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -2830,7 +2830,8 @@ void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem* item)
{
item->setText(action->text());
item->setIsSeparator(action->isSeparator());
-// item->setIcon(action->icon());
+ if (action->isIconVisibleInMenu())
+ item->setIcon(action->icon());
item->setVisible(action->isVisible());
item->setShortcut(action->shortcut());
item->setChecked(action->isChecked());