diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuitem.mm | 12 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuloader.mm | 13 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoansmenu.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoansmenu.mm | 13 |
5 files changed, 30 insertions, 11 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index 75d5ea2dd8..ea28c305d6 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -205,7 +205,7 @@ void QCocoaMenu::removeMenuItem(QPlatformMenuItem *menuItem) QCocoaMenuItem *QCocoaMenu::itemOrNull(int index) const { if ((index < 0) || (index >= m_menuItems.size())) - return 0; + return nullptr; return m_menuItems.at(index); } diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm index bd8cab9b23..ee70e059a1 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm @@ -219,12 +219,11 @@ void QCocoaMenuItem::setNativeContents(WId item) NSMenuItem *QCocoaMenuItem::sync() { - if (m_isSeparator != [m_native isSeparatorItem]) { + if (m_isSeparator != m_native.separatorItem) { [m_native release]; - if (m_isSeparator) { - m_native = [[NSMenuItem separatorItem] retain]; - [m_native setTag:reinterpret_cast<NSInteger>(this)]; - } else + if (m_isSeparator) + m_native = [[QCocoaNSMenuItem separatorItemWithPlatformMenuItem:this] retain]; + else m_native = nil; } @@ -435,6 +434,9 @@ void QCocoaMenuItem::setIconSize(int size) void QCocoaMenuItem::resolveTargetAction() { + if (m_native.separatorItem) + return; + // Some items created by QCocoaMenuLoader are not // instances of QCocoaNSMenuItem and have their // target/action set as Interface Builder would. diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm index d4009cf63b..9bd6108d0d 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm @@ -272,18 +272,21 @@ - (NSMenuItem *)appSpecificMenuItem:(QCocoaMenuItem *)platformItem { + // No reason to create the item if it already exists. for (NSMenuItem *item in appMenu.itemArray) if ([item isMemberOfClass:[QCocoaNSMenuItem class]] - && static_cast<QCocoaNSMenuItem *>(item).platformMenuItem == platformItem) { - // No reason to create the item if it already exists. + && static_cast<QCocoaNSMenuItem *>(item).platformMenuItem == platformItem) return [[item retain] autorelease]; - } // Create an App-Specific menu item, insert it into the menu and return // it as an autorelease item. - QCocoaNSMenuItem *item = [[QCocoaNSMenuItem alloc] initWithPlatformMenuItem:platformItem]; + QCocoaNSMenuItem *item; + if (platformItem->isSeparator()) + item = [[QCocoaNSMenuItem separatorItemWithPlatformMenuItem:platformItem] retain]; + else + item = [[QCocoaNSMenuItem alloc] initWithPlatformMenuItem:platformItem]; - NSInteger location = [appMenu indexOfItem:lastAppSpecificItem]; + const auto location = [appMenu indexOfItem:lastAppSpecificItem]; if (!lastAppSpecificItem.separatorItem) [lastAppSpecificItem release]; diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.h b/src/plugins/platforms/cocoa/qcocoansmenu.h index 6988c2a084..a4af56fa02 100644 --- a/src/plugins/platforms/cocoa/qcocoansmenu.h +++ b/src/plugins/platforms/cocoa/qcocoansmenu.h @@ -80,6 +80,7 @@ QT_FORWARD_DECLARE_CLASS(QCocoaMenuItem); @property (nonatomic) QCocoaMenuItem *platformMenuItem; ++ (instancetype)separatorItemWithPlatformMenuItem:(QCocoaMenuItem *)menuItem; - (instancetype)initWithPlatformMenuItem:(QCocoaMenuItem *)menuItem; @end diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.mm b/src/plugins/platforms/cocoa/qcocoansmenu.mm index 99c56f9191..c082158313 100644 --- a/src/plugins/platforms/cocoa/qcocoansmenu.mm +++ b/src/plugins/platforms/cocoa/qcocoansmenu.mm @@ -97,6 +97,19 @@ static NSString *qt_mac_removePrivateUnicode(NSString* string) QPointer<QCocoaMenuItem> _platformMenuItem; } ++ (instancetype)separatorItemWithPlatformMenuItem:(QCocoaMenuItem *)menuItem +{ + // Safe because +[NSMenuItem separatorItem] invokes [[self alloc] init] + auto *item = static_cast<QCocoaNSMenuItem *>([self separatorItem]); + Q_ASSERT_X([item isMemberOfClass:[QCocoaNSMenuItem class]], + qPrintable(__FUNCTION__), + "Did +[NSMenuItem separatorItem] not invoke [[self alloc] init]?"); + if (item) + item.platformMenuItem = menuItem; + + return item; +} + - (instancetype)initWithPlatformMenuItem:(QCocoaMenuItem *)menuItem { if ((self = [super initWithTitle:@"" action:nil keyEquivalent:@""])) { |