summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoamenu.mm
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2014-09-25 19:53:49 +0200
committerGabriel de Dietrich <gabriel.dedietrich@digia.com>2014-09-29 13:38:57 +0200
commit996054f5e65bc676aaea0743c2eacec51918e4aa (patch)
tree413274a193878db1f0fc6171232bb93b4d8858f1 /src/plugins/platforms/cocoa/qcocoamenu.mm
parent9dcc3a57282f60e2394a2a54fc0a735a4240c5c8 (diff)
QCocoaMenu: Keep a reference to the containing menu item
This allows the menu to tell its containing item the menu got deleted. This removes the need to reset the COCOA_MENU_ANCESTOR property value, which would crash since QCocoaMenuItem::m_menu would be a dangling pointer. Task-number: QTBUG-41587 Change-Id: Ia3408ef85cf823bfddbc2c41d6534e43bf14ed29 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoamenu.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 3d0201e1a0..fcf670d0ef 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -222,7 +222,8 @@ QCocoaMenu::QCocoaMenu() :
m_enabled(true),
m_visible(true),
m_tag(0),
- m_menuBar(0)
+ m_menuBar(0),
+ m_containingMenuItem(0)
{
m_delegate = [[QCocoaMenuDelegate alloc] initWithMenu:this];
m_nativeItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
@@ -238,6 +239,10 @@ QCocoaMenu::~QCocoaMenu()
if (COCOA_MENU_ANCESTOR(item) == this)
SET_COCOA_MENU_ANCESTOR(item, 0);
}
+
+ if (m_containingMenuItem)
+ m_containingMenuItem->clearMenu(this);
+
QCocoaAutoReleasePool pool;
[m_nativeItem setSubmenu:nil];
[m_nativeMenu release];
@@ -567,4 +572,14 @@ QCocoaMenuBar *QCocoaMenu::menuBar() const
return m_menuBar;
}
+void QCocoaMenu::setContainingMenuItem(QCocoaMenuItem *menuItem)
+{
+ m_containingMenuItem = menuItem;
+}
+
+QCocoaMenuItem *QCocoaMenu::containingMenuItem() const
+{
+ return m_containingMenuItem;
+}
+
QT_END_NAMESPACE