summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm10
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.h22
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm16
5 files changed, 34 insertions, 18 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h
index 64eeabcc2d..7951a2ff70 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.h
+++ b/src/plugins/platforms/cocoa/qcocoamenu.h
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
class QCocoaMenuBar;
-class QCocoaMenu : public QPlatformMenu
+class QCocoaMenu : public QPlatformMenu, public QCocoaMenuObject
{
public:
QCocoaMenu();
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 3fc98c071f..0690a8e0fa 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -271,8 +271,8 @@ QCocoaMenu::QCocoaMenu() :
QCocoaMenu::~QCocoaMenu()
{
foreach (QCocoaMenuItem *item, m_menuItems) {
- if (COCOA_MENU_ANCESTOR(item) == this)
- SET_COCOA_MENU_ANCESTOR(item, 0);
+ if (item->menuParent() == this)
+ item->setMenuParent(0);
}
QMacAutoReleasePool pool;
@@ -350,7 +350,7 @@ void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem)
} else {
[m_nativeMenu addItem: item->nsItem()];
}
- SET_COCOA_MENU_ANCESTOR(item, this);
+ item->setMenuParent(this);
}
void QCocoaMenu::removeMenuItem(QPlatformMenuItem *menuItem)
@@ -362,8 +362,8 @@ void QCocoaMenu::removeMenuItem(QPlatformMenuItem *menuItem)
return;
}
- if (COCOA_MENU_ANCESTOR(menuItem) == this)
- SET_COCOA_MENU_ANCESTOR(menuItem, 0);
+ if (cocoaItem->menuParent() == this)
+ cocoaItem->setMenuParent(0);
m_menuItems.removeOne(cocoaItem);
if (!cocoaItem->isMerged()) {
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm
index e8b3823012..a445b6e9bf 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm
@@ -320,7 +320,7 @@ void QCocoaMenuBar::updateMenuBarImmediately()
continue;
NSMenuItem *item = mb->nativeItemForMenu(menu);
menu->setAttachedItem(item);
- SET_COCOA_MENU_ANCESTOR(menu, mb);
+ menu->setMenuParent(mb);
// force a sync?
mb->syncMenu(menu);
menu->syncModalState(disableForModal);
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.h b/src/plugins/platforms/cocoa/qcocoamenuitem.h
index bba9ce3963..aafc66e06f 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.h
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.h
@@ -55,7 +55,24 @@ QT_BEGIN_NAMESPACE
class QCocoaMenu;
-class QCocoaMenuItem : public QPlatformMenuItem
+class QCocoaMenuObject
+{
+public:
+ void setMenuParent(QObject *o)
+ {
+ parent = o;
+ }
+
+ QObject *menuParent() const
+ {
+ return parent;
+ }
+
+private:
+ QPointer<QObject> parent;
+};
+
+class QCocoaMenuItem : public QPlatformMenuItem, public QCocoaMenuObject
{
public:
QCocoaMenuItem();
@@ -118,9 +135,6 @@ private:
int m_iconSize;
};
-#define COCOA_MENU_ANCESTOR(m) ((m)->property("_qCocoaMenuAncestor").value<QObject *>())
-#define SET_COCOA_MENU_ANCESTOR(m, ancestor) (m)->setProperty("_qCocoaMenuAncestor", QVariant::fromValue<QObject *>(ancestor))
-
QT_END_NAMESPACE
#endif
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
index de0271ce4d..fa54c1e90e 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
@@ -113,8 +113,8 @@ QCocoaMenuItem::~QCocoaMenuItem()
{
QMacAutoReleasePool pool;
- if (m_menu && COCOA_MENU_ANCESTOR(m_menu) == this)
- SET_COCOA_MENU_ANCESTOR(m_menu, 0);
+ if (m_menu && m_menu->menuParent() == this)
+ m_menu->setMenuParent(0);
if (m_merged) {
[m_native setHidden:YES];
} else {
@@ -140,14 +140,14 @@ void QCocoaMenuItem::setMenu(QPlatformMenu *menu)
return;
if (m_menu) {
- if (COCOA_MENU_ANCESTOR(m_menu) == this)
- SET_COCOA_MENU_ANCESTOR(m_menu, 0);
+ if (m_menu->menuParent() == this)
+ m_menu->setMenuParent(0);
}
QMacAutoReleasePool pool;
m_menu = static_cast<QCocoaMenu *>(menu);
if (m_menu) {
- SET_COCOA_MENU_ANCESTOR(m_menu, this);
+ m_menu->setMenuParent(this);
} else {
// we previously had a menu, but no longer
// clear out our item so the nexy sync() call builds a new one
@@ -237,12 +237,14 @@ NSMenuItem *QCocoaMenuItem::sync()
mergeItem = [loader preferencesMenuItem];
break;
case TextHeuristicRole: {
- QObject *p = COCOA_MENU_ANCESTOR(this);
+ QObject *p = menuParent();
int depth = 1;
QCocoaMenuBar *menubar = 0;
while (depth < 3 && p && !(menubar = qobject_cast<QCocoaMenuBar *>(p))) {
++depth;
- p = COCOA_MENU_ANCESTOR(p);
+ QCocoaMenuObject *menuObject = dynamic_cast<QCocoaMenuObject *>(p);
+ Q_ASSERT(menuObject);
+ p = menuObject->menuParent();
}
if (depth == 3 || !menubar)
break; // Menu item too deep in the hierarchy, or not connected to any menubar