summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-12-17 17:16:12 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-17 18:21:00 +0100
commitae380584de53cf927fe4a7bd62ffb41f73b1faa1 (patch)
tree1152f59c2af60aa35bfb550915286a0b146d98b2
parent67b523661037cf807974f256f1146d441d8e7d40 (diff)
downloadqtquickcontrols-ae380584de53cf927fe4a7bd62ffb41f73b1faa1.tar.gz
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.cpp2
-rw-r--r--src/controls/qquickmenu_p.h1
-rw-r--r--src/controls/qquickmenuitem.cpp25
-rw-r--r--src/controls/qquickmenuitem_p.h11
-rw-r--r--src/controls/qquickmenuitemcontainer_p.h2
5 files changed, 21 insertions, 20 deletions
diff --git a/src/controls/qquickmenu.cpp b/src/controls/qquickmenu.cpp
index 361c4683..7aa52d56 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 c1fab0b5..c6bf24e2 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 60d882c4..105b66ac 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 a0c70832..3ba719f6 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 9602c3a7..a845994e 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()