--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401977
170 lines
4.9 KiB
Objective-C
170 lines
4.9 KiB
Objective-C
/*
|
|
SDL - Simple DirectMedia Layer
|
|
Copyright (C) 1997-2006 Sam Lantinga
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
Sam Lantinga
|
|
slouken@libsdl.org
|
|
*/
|
|
#include "SDL_config.h"
|
|
|
|
#include "SDL_cocoavideo.h"
|
|
|
|
/* setAppleMenu disappeared from the headers in 10.4 */
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
|
|
@interface NSApplication(NSAppleMenu)
|
|
- (void)setAppleMenu:(NSMenu *)menu;
|
|
@end
|
|
#endif
|
|
|
|
@interface SDLApplication : NSApplication
|
|
{
|
|
}
|
|
- (void)finishLaunching;
|
|
@end
|
|
|
|
@implementation SDLApplication
|
|
|
|
- (void)finishLaunching
|
|
{
|
|
[super finishLaunching];
|
|
_running = 1;
|
|
}
|
|
|
|
@end
|
|
|
|
static NSString *
|
|
GetApplicationName(void)
|
|
{
|
|
NSDictionary *dict;
|
|
NSString *appName = 0;
|
|
|
|
/* Determine the application name */
|
|
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
|
|
if (dict)
|
|
appName = [dict objectForKey: @"CFBundleName"];
|
|
|
|
if (![appName length])
|
|
appName = [[NSProcessInfo processInfo] processName];
|
|
|
|
return appName;
|
|
}
|
|
|
|
static void
|
|
CreateApplicationMenus(void)
|
|
{
|
|
NSString *appName;
|
|
NSString *title;
|
|
NSMenu *appleMenu;
|
|
NSMenu *windowMenu;
|
|
NSMenuItem *menuItem;
|
|
|
|
/* Create the main menu bar */
|
|
[NSApp setMainMenu:[[NSMenu alloc] init]];
|
|
|
|
/* Create the application menu */
|
|
appName = GetApplicationName();
|
|
appleMenu = [[NSMenu alloc] initWithTitle:@""];
|
|
|
|
/* Add menu items */
|
|
title = [@"About " stringByAppendingString:appName];
|
|
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
|
|
|
|
[appleMenu addItem:[NSMenuItem separatorItem]];
|
|
|
|
title = [@"Hide " stringByAppendingString:appName];
|
|
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
|
|
|
|
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
|
|
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
|
|
|
|
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
|
|
|
|
[appleMenu addItem:[NSMenuItem separatorItem]];
|
|
|
|
title = [@"Quit " stringByAppendingString:appName];
|
|
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
|
|
|
|
/* Put menu into the menubar */
|
|
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
|
|
[menuItem setSubmenu:appleMenu];
|
|
[[NSApp mainMenu] addItem:menuItem];
|
|
[menuItem release];
|
|
|
|
/* Tell the application object that this is now the application menu */
|
|
[NSApp setAppleMenu:appleMenu];
|
|
[appleMenu release];
|
|
|
|
|
|
/* Create the window menu */
|
|
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
|
|
|
|
/* "Minimize" item */
|
|
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
|
|
[windowMenu addItem:menuItem];
|
|
[menuItem release];
|
|
|
|
/* Put menu into the menubar */
|
|
menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
|
|
[menuItem setSubmenu:windowMenu];
|
|
[[NSApp mainMenu] addItem:menuItem];
|
|
[menuItem release];
|
|
|
|
/* Tell the application object that this is now the window menu */
|
|
[NSApp setWindowsMenu:windowMenu];
|
|
[windowMenu release];
|
|
}
|
|
|
|
void
|
|
Cocoa_RegisterApp(void)
|
|
{
|
|
ProcessSerialNumber psn;
|
|
NSAutoreleasePool *pool;
|
|
|
|
if (!GetCurrentProcess(&psn)) {
|
|
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
|
|
SetFrontProcess(&psn);
|
|
}
|
|
|
|
pool = [[NSAutoreleasePool alloc] init];
|
|
if (NSApp == nil) {
|
|
[SDLApplication sharedApplication];
|
|
|
|
if ([NSApp mainMenu] == nil) {
|
|
CreateApplicationMenus();
|
|
}
|
|
[NSApp finishLaunching];
|
|
}
|
|
[pool release];
|
|
}
|
|
|
|
void
|
|
Cocoa_PumpEvents(_THIS)
|
|
{
|
|
NSAutoreleasePool *pool;
|
|
|
|
pool = [[NSAutoreleasePool alloc] init];
|
|
while ([NSApp isRunning]) {
|
|
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
|
|
if ( event == nil ) {
|
|
break;
|
|
}
|
|
[NSApp sendEvent:event];
|
|
}
|
|
[pool release];
|
|
}
|
|
|
|
/* vi: set ts=4 sw=4 expandtab: */
|