From e8f322bd1e229698643e678ba6af8c2c80b00ca0 Mon Sep 17 00:00:00 2001
From: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Date: Wed, 13 Feb 2013 14:43:27 +0100
Subject: [PATCH] Action: Move icon creation logic from QtMenuItem to QtAction

Change-Id: Id39619c1a13e5453bebfc8469c287d94693ad428
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
---
 src/qtdesktop/qtaction.cpp         | 14 ++++++++++++--
 src/qtdesktop/qtaction_p.h         |  7 +++++--
 src/qtdesktop/qtexclusivegroup_p.h |  4 ++--
 src/qtdesktop/qtmenuitem.cpp       | 10 ++--------
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/qtdesktop/qtaction.cpp b/src/qtdesktop/qtaction.cpp
index a1a93d9cb..744e1cd2e 100644
--- a/src/qtdesktop/qtaction.cpp
+++ b/src/qtdesktop/qtaction.cpp
@@ -180,15 +180,25 @@ void QtAction::setIconSource(const QUrl &iconSource)
         return;
 
     m_iconSource = iconSource;
+    QString iconName = m_icon.name();
+    m_icon = QIcon(m_iconSource.toLocalFile());
+    if (!iconName.isEmpty())
+        m_icon = QIcon::fromTheme(iconName, m_icon);
+
     emit iconSourceChanged();
 }
 
+QString QtAction::iconName() const
+{
+    return m_icon.name();
+}
+
 void QtAction::setIconName(const QString &iconName)
 {
-    if (iconName == m_iconName)
+    if (iconName == m_icon.name())
         return;
 
-    m_iconName = iconName;
+    m_icon = QIcon::fromTheme(iconName, QIcon(m_iconSource.toLocalFile()));
     emit iconNameChanged();
 }
 
diff --git a/src/qtdesktop/qtaction_p.h b/src/qtdesktop/qtaction_p.h
index d4578367c..d4db7b2e6 100644
--- a/src/qtdesktop/qtaction_p.h
+++ b/src/qtdesktop/qtaction_p.h
@@ -81,7 +81,7 @@ public:
     QString mnemonic() const;
     void setMnemonic(const QString &mnemonic);
 
-    QString iconName() const { return m_iconName; }
+    QString iconName() const;
     void setIconName(const QString &iconName);
 
     QUrl iconSource() const { return m_iconSource; }
@@ -102,6 +102,9 @@ public:
     QtExclusiveGroup *exclusiveGroup() const { return m_exclusiveGroup; }
     void setExclusiveGroup(QtExclusiveGroup * arg);
 
+    QIcon icon() const { return m_icon; }
+    void setIcon(QIcon icon) { m_icon = icon; }
+
     bool event(QEvent *e);
 
 public Q_SLOTS:
@@ -126,7 +129,7 @@ Q_SIGNALS:
 private:
     QString m_text;
     QUrl m_iconSource;
-    QString m_iconName;
+    QIcon m_icon;
     bool m_enabled;
     bool m_checkable;
     bool m_checked;
diff --git a/src/qtdesktop/qtexclusivegroup_p.h b/src/qtdesktop/qtexclusivegroup_p.h
index 94db2c0a2..7d980bd0d 100644
--- a/src/qtdesktop/qtexclusivegroup_p.h
+++ b/src/qtdesktop/qtexclusivegroup_p.h
@@ -41,8 +41,8 @@
 #ifndef QTEXCLUSIVEGROUP_H
 #define QTEXCLUSIVEGROUP_H
 
-#include <QObject>
-#include <QtQml/QtQml>
+#include <QtCore/QObject>
+#include <QtCore/QMetaMethod>
 
 QT_BEGIN_NAMESPACE
 
diff --git a/src/qtdesktop/qtmenuitem.cpp b/src/qtdesktop/qtmenuitem.cpp
index dc19f72d8..592c6bf6b 100644
--- a/src/qtdesktop/qtmenuitem.cpp
+++ b/src/qtdesktop/qtmenuitem.cpp
@@ -390,12 +390,8 @@ void QtMenuItem::setIconSource(const QUrl &iconSource)
 
 void QtMenuItem::updateIconSource()
 {
-    QIcon icon = QIcon(iconSource().toLocalFile());
-    if (!iconName().isEmpty())
-        icon = QIcon::fromTheme(iconName(), icon);
-
     if (platformItem()) {
-        platformItem()->setIcon(icon);
+        platformItem()->setIcon(m_action->icon());
         syncWithPlatformMenu();
     }
     emit iconSourceChanged();
@@ -413,10 +409,8 @@ void QtMenuItem::setIconName(const QString &iconName)
 
 void QtMenuItem::updateIconName()
 {
-    QIcon icon = QIcon::fromTheme(iconName(), QIcon(iconSource().toLocalFile()));
-
     if (platformItem()) {
-        platformItem()->setIcon(icon);
+        platformItem()->setIcon(m_action->icon());
         syncWithPlatformMenu();
     }
     emit iconNameChanged();
-- 
GitLab