summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm12
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuloader.mm13
-rw-r--r--src/plugins/platforms/cocoa/qcocoansmenu.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoansmenu.mm13
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:@""])) {