diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2016-03-23 08:29:43 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2016-03-23 08:29:43 +0100 |
commit | 8e2d3e3b90d7d35d2c91fc09ab5a9cccac0823e8 (patch) | |
tree | fe20315ed91d4babd73df69ece0af1d1550cb40c /src/plugins/platforms/cocoa | |
parent | bf17e30c8e98b311cdee397f1272e70863247ebc (diff) | |
parent | f319b9b43c313dfa306a62c391e767bc6f14bdee (diff) | |
download | qtbase-8e2d3e3b90d7d35d2c91fc09ab5a9cccac0823e8.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I9a10e1f3c9506ec8554d8f59b6300825ac730939
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 10 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenubar.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.h | 22 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 16 |
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 |