diff options
author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-04-17 17:39:15 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-18 15:31:18 +0200 |
commit | 2bd846f8da8c6e8c61539f2cc986df4602e5d80e (patch) | |
tree | 9a8ec4de1e766d8c0187d7c12651a100f5011bd5 | |
parent | 8cbc7ef05cbf8da8a3f3d39c22900c18ac32465e (diff) |
Cocoa Menu: Remove unnecessary retain, release/retain in the right order
Also, make sure platform menu item is deleted on ActionRemoved event.
Change-Id: Ic07a81cb77833bdffd1464abf1c81ebdee4d16e9
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 7 | ||||
-rw-r--r-- | src/widgets/widgets/qmenu.cpp | 1 |
2 files changed, 3 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index dd99a6f3bc..350ef8a16a 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -218,8 +218,6 @@ NSMenuItem *QCocoaMenuItem::sync() mergeItem = [loader aboutMenuItem]; else mergeItem = [loader aboutQtMenuItem]; - - m_merged = true; } else if (m_text.startsWith(tr("Config"), Qt::CaseInsensitive) || m_text.startsWith(tr("Preference"), Qt::CaseInsensitive) || m_text.startsWith(tr("Options"), Qt::CaseInsensitive) @@ -240,9 +238,9 @@ NSMenuItem *QCocoaMenuItem::sync() if (mergeItem) { m_merged = true; + [mergeItem retain]; [m_native release]; m_native = mergeItem; - [m_native retain]; // balance out release! [m_native setTag:reinterpret_cast<NSInteger>(this)]; } else if (m_merged) { // was previously merged, but no longer @@ -256,13 +254,12 @@ NSMenuItem *QCocoaMenuItem::sync() m_native = [[NSMenuItem alloc] initWithTitle:QCFString::toNSString(m_text) action:nil keyEquivalent:@""]; - [m_native retain]; [m_native setTag:reinterpret_cast<NSInteger>(this)]; } // [m_native setHidden:YES]; // [m_native setHidden:NO]; - [m_native setHidden: !m_isVisible]; + [m_native setHidden: !m_isVisible]; [m_native setEnabled: m_enabled]; QString text = m_text; QKeySequence accel = m_shortcut; diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 6b02e7371f..aaedd7ffee 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -3004,6 +3004,7 @@ void QMenu::actionEvent(QActionEvent *e) } else if (e->type() == QEvent::ActionRemoved) { QPlatformMenuItem *menuItem = d->platformMenu->menuItemForTag(reinterpret_cast<quintptr>(e->action())); d->platformMenu->removeMenuItem(menuItem); + delete menuItem; } else if (e->type() == QEvent::ActionChanged) { QPlatformMenuItem *menuItem = d->platformMenu->menuItemForTag(reinterpret_cast<quintptr>(e->action())); copyActionToPlatformItem(e->action(), menuItem); |