diff options
author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-12-17 17:16:12 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-17 18:21:00 +0100 |
commit | ae380584de53cf927fe4a7bd62ffb41f73b1faa1 (patch) | |
tree | 1152f59c2af60aa35bfb550915286a0b146d98b2 | |
parent | 67b523661037cf807974f256f1146d441d8e7d40 (diff) |
Menu: Don't create platform item for QQuickMenuItemContainers
They don't have any QPA counterpart as they're just plain containers.
This also removes that "Menu does not contain the item to be removed"
warning on Mac.
Task-Number: QTBUG-32197
Change-Id: I06e08817194c2e3ad3efd7ded193bfac9d3a1948
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
-rw-r--r-- | src/controls/qquickmenu.cpp | 2 | ||||
-rw-r--r-- | src/controls/qquickmenu_p.h | 1 | ||||
-rw-r--r-- | src/controls/qquickmenuitem.cpp | 25 | ||||
-rw-r--r-- | src/controls/qquickmenuitem_p.h | 11 | ||||
-rw-r--r-- | src/controls/qquickmenuitemcontainer_p.h | 2 |
5 files changed, 21 insertions, 20 deletions
diff --git a/src/controls/qquickmenu.cpp b/src/controls/qquickmenu.cpp index 361c4683f..7aa52d56a 100644 --- a/src/controls/qquickmenu.cpp +++ b/src/controls/qquickmenu.cpp @@ -236,7 +236,7 @@ QT_BEGIN_NAMESPACE */ QQuickMenu::QQuickMenu(QObject *parent) - : QQuickMenuText(parent), + : QQuickMenuText(parent, QQuickMenuItemType::Menu), m_itemsCount(0), m_selectedIndex(-1), m_parentWindow(0), diff --git a/src/controls/qquickmenu_p.h b/src/controls/qquickmenu_p.h index c1fab0b5a..c6bf24e29 100644 --- a/src/controls/qquickmenu_p.h +++ b/src/controls/qquickmenu_p.h @@ -132,7 +132,6 @@ public: QQuickItem *menuContentItem() const { return m_menuContentItem; } bool popupVisible() const { return m_popupVisible; } - QQuickMenuItemType::MenuItemType type() { return QQuickMenuItemType::Menu; } bool isNative() { return m_platformMenu != 0; } protected Q_SLOTS: diff --git a/src/controls/qquickmenuitem.cpp b/src/controls/qquickmenuitem.cpp index 60d882c41..105b66ac4 100644 --- a/src/controls/qquickmenuitem.cpp +++ b/src/controls/qquickmenuitem.cpp @@ -51,12 +51,15 @@ QT_BEGIN_NAMESPACE -QQuickMenuBase::QQuickMenuBase(QObject *parent) - : QObject(parent), m_visible(true), m_parentMenu(0), m_container(0), m_visualItem(0) -{ - m_platformItem = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem(); - if (m_platformItem) - m_platformItem->setRole(QPlatformMenuItem::TextHeuristicRole); +QQuickMenuBase::QQuickMenuBase(QObject *parent, int type) + : QObject(parent), m_visible(true), m_type(static_cast<QQuickMenuItemType::MenuItemType>(type)) + , m_parentMenu(0), m_container(0), m_platformItem(0), m_visualItem(0) +{ + if (type >= 0) { + m_platformItem = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem(); + if (m_platformItem) + m_platformItem->setRole(QPlatformMenuItem::TextHeuristicRole); + } } QQuickMenuBase::~QQuickMenuBase() @@ -98,7 +101,7 @@ QQuickMenu *QQuickMenuBase::parentMenu() const void QQuickMenuBase::setParentMenu(QQuickMenu *parentMenu) { - if (m_parentMenu && m_parentMenu->platformMenu()) + if (m_platformItem && m_parentMenu && m_parentMenu->platformMenu()) m_parentMenu->platformMenu()->removeMenuItem(m_platformItem); m_parentMenu = parentMenu; @@ -155,14 +158,14 @@ void QQuickMenuBase::setVisualItem(QQuickItem *item) */ QQuickMenuSeparator::QQuickMenuSeparator(QObject *parent) - : QQuickMenuBase(parent) + : QQuickMenuBase(parent, QQuickMenuItemType::Separator) { if (platformItem()) platformItem()->setIsSeparator(true); } -QQuickMenuText::QQuickMenuText(QObject *parent) - : QQuickMenuBase(parent), m_action(new QQuickAction(this)) +QQuickMenuText::QQuickMenuText(QObject *parent, QQuickMenuItemType::MenuItemType type) + : QQuickMenuBase(parent, type), m_action(new QQuickAction(this)) { connect(m_action, SIGNAL(enabledChanged()), this, SLOT(updateEnabled())); connect(m_action, SIGNAL(textChanged()), this, SLOT(updateText())); @@ -417,7 +420,7 @@ void QQuickMenuText::updateIcon() */ QQuickMenuItem::QQuickMenuItem(QObject *parent) - : QQuickMenuText(parent), m_boundAction(0) + : QQuickMenuText(parent, QQuickMenuItemType::Item), m_boundAction(0) { connect(this, SIGNAL(__textChanged()), this, SIGNAL(textChanged())); diff --git a/src/controls/qquickmenuitem_p.h b/src/controls/qquickmenuitem_p.h index a0c708329..3ba719f64 100644 --- a/src/controls/qquickmenuitem_p.h +++ b/src/controls/qquickmenuitem_p.h @@ -66,7 +66,7 @@ class QQuickMenuItemType public: enum MenuItemType { - Separator, + Separator = 0, Item, Menu }; @@ -86,7 +86,7 @@ Q_SIGNALS: void visibleChanged(); public: - QQuickMenuBase(QObject *parent = 0); + QQuickMenuBase(QObject *parent, int type); ~QQuickMenuBase(); bool visible() const { return m_visible; } @@ -105,11 +105,12 @@ public: QQuickItem *visualItem() const; void setVisualItem(QQuickItem *item); - virtual QQuickMenuItemType::MenuItemType type() { return QQuickMenuItemType::Item; } + QQuickMenuItemType::MenuItemType type() { return m_type; } virtual bool isNative() { return m_platformItem != 0; } private: bool m_visible; + QQuickMenuItemType::MenuItemType m_type; QQuickMenu *m_parentMenu; QQuickMenuItemContainer *m_container; QPlatformMenuItem *m_platformItem; @@ -121,8 +122,6 @@ class QQuickMenuSeparator : public QQuickMenuBase Q_OBJECT public: QQuickMenuSeparator(QObject *parent = 0); - - QQuickMenuItemType::MenuItemType type() { return QQuickMenuItemType::Separator; } }; class QQuickMenuText : public QQuickMenuBase @@ -143,7 +142,7 @@ Q_SIGNALS: void __iconChanged(); public: - QQuickMenuText(QObject *parent = 0); + QQuickMenuText(QObject *parent, QQuickMenuItemType::MenuItemType type); ~QQuickMenuText(); bool enabled() const; diff --git a/src/controls/qquickmenuitemcontainer_p.h b/src/controls/qquickmenuitemcontainer_p.h index 9602c3a7a..a845994e4 100644 --- a/src/controls/qquickmenuitemcontainer_p.h +++ b/src/controls/qquickmenuitemcontainer_p.h @@ -52,7 +52,7 @@ class QQuickMenuItemContainer : public QQuickMenuBase Q_OBJECT public: explicit QQuickMenuItemContainer(QObject *parent = 0) - : QQuickMenuBase(parent) + : QQuickMenuBase(parent, -1) { } ~QQuickMenuItemContainer() |