[Scummvm-git-logs] scummvm master -> 8eac9606bc899976a1042baa0641c9db8c89e5a0

criezy criezy at scummvm.org
Sun Mar 22 20:39:15 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
8eac9606bc MACOSX: Check selector exists when trying to replace application menus


Commit: 8eac9606bc899976a1042baa0641c9db8c89e5a0
    https://github.com/scummvm/scummvm/commit/8eac9606bc899976a1042baa0641c9db8c89e5a0
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2020-03-22T20:36:35Z

Commit Message:
MACOSX: Check selector exists when trying to replace application menus

In particular it has been reported that setHelpMenu was introduced in
MacOS X 10.6. So hopefully this change will fix running ScummVM on
MacOS X 10.5 or older.

This might fix bug #11260: MAC OS X: App incomplete when launched on
OS X 10.5.8.

Changed paths:
    backends/platform/sdl/macosx/appmenu_osx.mm


diff --git a/backends/platform/sdl/macosx/appmenu_osx.mm b/backends/platform/sdl/macosx/appmenu_osx.mm
index 38ce8c49a2..0263b95fe2 100644
--- a/backends/platform/sdl/macosx/appmenu_osx.mm
+++ b/backends/platform/sdl/macosx/appmenu_osx.mm
@@ -137,6 +137,10 @@ NSString *constructNSStringFromCString(const char *rawCString, CFStringEncoding
 }
 
 static NSMenu *addMenu(const char *title, CFStringEncoding encoding, NSString *key, SEL setAs) {
+	if (setAs && ![NSApp respondsToSelector:setAs]) {
+		return nil;
+	}
+
 	NSString *str = constructNSStringFromCString(title, encoding);
 	NSMenu *menu = [[NSMenu alloc] initWithTitle:str];
 
@@ -178,10 +182,6 @@ void releaseMenu() {
 }
 
 void replaceApplicationMenuItems() {
-	if (!delegate) {
-		delegate = [[ScummVMMenuHandler alloc] init];
-	}
-
 	// We cannot use [[NSApp mainMenu] removeAllItems] as removeAllItems was added in OS X 10.6
 	// So remove the SDL generated menus one by one instead.
 	while ([[NSApp mainMenu] numberOfItems] > 0) {
@@ -200,30 +200,38 @@ void replaceApplicationMenuItems() {
 #endif
 
 	NSMenu *appleMenu = addMenu("ScummVM", kCFStringEncodingASCII, @"", @selector(setAppleMenu:));
-	addMenuItem(_("About ScummVM"), stringEncoding, nil, @selector(orderFrontStandardAboutPanel:), @"", appleMenu);
-	[appleMenu addItem:[NSMenuItem separatorItem]];
-	addMenuItem(_("Hide ScummVM"), stringEncoding, nil, @selector(hide:), @"h", appleMenu);
-	addMenuItem(_("Hide Others"), stringEncoding, nil, @selector(hideOtherApplications:), @"h", appleMenu, (NSEventModifierFlagOption|NSEventModifierFlagCommand));
-	addMenuItem(_("Show All"), stringEncoding, nil, @selector(unhideAllApplications:), @"", appleMenu);
-	[appleMenu addItem:[NSMenuItem separatorItem]];
-	addMenuItem(_("Quit ScummVM"), stringEncoding, nil, @selector(terminate:), @"q", appleMenu);
+	if (appleMenu) {
+		addMenuItem(_("About ScummVM"), stringEncoding, nil, @selector(orderFrontStandardAboutPanel:), @"", appleMenu);
+		[appleMenu addItem:[NSMenuItem separatorItem]];
+		addMenuItem(_("Hide ScummVM"), stringEncoding, nil, @selector(hide:), @"h", appleMenu);
+		addMenuItem(_("Hide Others"), stringEncoding, nil, @selector(hideOtherApplications:), @"h", appleMenu, (NSEventModifierFlagOption|NSEventModifierFlagCommand));
+		addMenuItem(_("Show All"), stringEncoding, nil, @selector(unhideAllApplications:), @"", appleMenu);
+		[appleMenu addItem:[NSMenuItem separatorItem]];
+		addMenuItem(_("Quit ScummVM"), stringEncoding, nil, @selector(terminate:), @"q", appleMenu);
+	}
 
 	NSMenu *windowMenu = addMenu(_("Window"), stringEncoding, @"", @selector(setWindowsMenu:));
-	addMenuItem(_("Minimize"), stringEncoding, nil, @selector(performMiniaturize:), @"m", windowMenu);
+	if (windowMenu) {
+		addMenuItem(_("Minimize"), stringEncoding, nil, @selector(performMiniaturize:), @"m", windowMenu);
+	}
 
 	NSMenu *helpMenu = addMenu(_("Help"), stringEncoding, @"", @selector(setHelpMenu:));
-	addMenuItem(_("User Manual"), stringEncoding, delegate, @selector(openUserManual), @"", helpMenu);
-	[helpMenu addItem:[NSMenuItem separatorItem]];
-	addMenuItem(_("General Information"), stringEncoding, delegate, @selector(openReadme), @"", helpMenu);
-	addMenuItem(_("What's New in ScummVM"), stringEncoding, delegate, @selector(openNews), @"", helpMenu);
-	[helpMenu addItem:[NSMenuItem separatorItem]];
-	addMenuItem(_("Credits"), stringEncoding, delegate, @selector(openCredits), @"", helpMenu);
-	addMenuItem(_("GPL License"), stringEncoding, delegate, @selector(openLicenseGPL), @"", helpMenu);
-	addMenuItem(_("LGPL License"), stringEncoding, delegate, @selector(openLicenseLGPL), @"", helpMenu);
-	addMenuItem(_("Freefont License"), stringEncoding, delegate, @selector(openLicenseFreefont), @"", helpMenu);
-	addMenuItem(_("OFL License"), stringEncoding, delegate, @selector(openLicenseOFL), @"", helpMenu);
-	addMenuItem(_("BSD License"), stringEncoding, delegate, @selector(openLicenseBSD), @"", helpMenu);
-
+	if (helpMenu) {
+		if (!delegate) {
+			delegate = [[ScummVMMenuHandler alloc] init];
+		}
+		addMenuItem(_("User Manual"), stringEncoding, delegate, @selector(openUserManual), @"", helpMenu);
+		[helpMenu addItem:[NSMenuItem separatorItem]];
+		addMenuItem(_("General Information"), stringEncoding, delegate, @selector(openReadme), @"", helpMenu);
+		addMenuItem(_("What's New in ScummVM"), stringEncoding, delegate, @selector(openNews), @"", helpMenu);
+		[helpMenu addItem:[NSMenuItem separatorItem]];
+		addMenuItem(_("Credits"), stringEncoding, delegate, @selector(openCredits), @"", helpMenu);
+		addMenuItem(_("GPL License"), stringEncoding, delegate, @selector(openLicenseGPL), @"", helpMenu);
+		addMenuItem(_("LGPL License"), stringEncoding, delegate, @selector(openLicenseLGPL), @"", helpMenu);
+		addMenuItem(_("Freefont License"), stringEncoding, delegate, @selector(openLicenseFreefont), @"", helpMenu);
+		addMenuItem(_("OFL License"), stringEncoding, delegate, @selector(openLicenseOFL), @"", helpMenu);
+		addMenuItem(_("BSD License"), stringEncoding, delegate, @selector(openLicenseBSD), @"", helpMenu);
+	}
 
 	[appleMenu release];
 	[windowMenu release];




More information about the Scummvm-git-logs mailing list