author | Sam Lantinga |
Sun, 23 Jul 2006 09:11:10 +0000 | |
changeset 1931 | 103c6fec2a60 |
child 1932 | dc864bcabcc4 |
permissions | -rw-r--r-- |
slouken@1931 | 1 |
/* |
slouken@1931 | 2 |
SDL - Simple DirectMedia Layer |
slouken@1931 | 3 |
Copyright (C) 1997-2006 Sam Lantinga |
slouken@1931 | 4 |
|
slouken@1931 | 5 |
This library is free software; you can redistribute it and/or |
slouken@1931 | 6 |
modify it under the terms of the GNU Lesser General Public |
slouken@1931 | 7 |
License as published by the Free Software Foundation; either |
slouken@1931 | 8 |
version 2.1 of the License, or (at your option) any later version. |
slouken@1931 | 9 |
|
slouken@1931 | 10 |
This library is distributed in the hope that it will be useful, |
slouken@1931 | 11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
slouken@1931 | 12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
slouken@1931 | 13 |
Lesser General Public License for more details. |
slouken@1931 | 14 |
|
slouken@1931 | 15 |
You should have received a copy of the GNU Lesser General Public |
slouken@1931 | 16 |
License along with this library; if not, write to the Free Software |
slouken@1931 | 17 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
slouken@1931 | 18 |
|
slouken@1931 | 19 |
Sam Lantinga |
slouken@1931 | 20 |
slouken@libsdl.org |
slouken@1931 | 21 |
*/ |
slouken@1931 | 22 |
#include "SDL_config.h" |
slouken@1931 | 23 |
|
slouken@1931 | 24 |
#include "SDL_cocoavideo.h" |
slouken@1931 | 25 |
|
slouken@1931 | 26 |
/* setAppleMenu disappeared from the headers in 10.4 */ |
slouken@1931 | 27 |
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 |
slouken@1931 | 28 |
@interface NSApplication(NSAppleMenu) |
slouken@1931 | 29 |
- (void)setAppleMenu:(NSMenu *)menu; |
slouken@1931 | 30 |
@end |
slouken@1931 | 31 |
#endif |
slouken@1931 | 32 |
|
slouken@1931 | 33 |
@interface SDLApplication : NSApplication |
slouken@1931 | 34 |
{ |
slouken@1931 | 35 |
} |
slouken@1931 | 36 |
- (void)finishLaunching; |
slouken@1931 | 37 |
@end |
slouken@1931 | 38 |
|
slouken@1931 | 39 |
@implementation SDLApplication |
slouken@1931 | 40 |
|
slouken@1931 | 41 |
- (void)finishLaunching |
slouken@1931 | 42 |
{ |
slouken@1931 | 43 |
[super finishLaunching]; |
slouken@1931 | 44 |
_running = 1; |
slouken@1931 | 45 |
} |
slouken@1931 | 46 |
|
slouken@1931 | 47 |
@end |
slouken@1931 | 48 |
|
slouken@1931 | 49 |
static NSString * |
slouken@1931 | 50 |
GetApplicationName(void) |
slouken@1931 | 51 |
{ |
slouken@1931 | 52 |
NSDictionary *dict; |
slouken@1931 | 53 |
NSString *appName = 0; |
slouken@1931 | 54 |
|
slouken@1931 | 55 |
/* Determine the application name */ |
slouken@1931 | 56 |
dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); |
slouken@1931 | 57 |
if (dict) |
slouken@1931 | 58 |
appName = [dict objectForKey: @"CFBundleName"]; |
slouken@1931 | 59 |
|
slouken@1931 | 60 |
if (![appName length]) |
slouken@1931 | 61 |
appName = [[NSProcessInfo processInfo] processName]; |
slouken@1931 | 62 |
|
slouken@1931 | 63 |
return appName; |
slouken@1931 | 64 |
} |
slouken@1931 | 65 |
|
slouken@1931 | 66 |
static void |
slouken@1931 | 67 |
CreateApplicationMenus(void) |
slouken@1931 | 68 |
{ |
slouken@1931 | 69 |
NSString *appName; |
slouken@1931 | 70 |
NSString *title; |
slouken@1931 | 71 |
NSMenu *appleMenu; |
slouken@1931 | 72 |
NSMenu *windowMenu; |
slouken@1931 | 73 |
NSMenuItem *menuItem; |
slouken@1931 | 74 |
|
slouken@1931 | 75 |
/* Create the main menu bar */ |
slouken@1931 | 76 |
[NSApp setMainMenu:[[NSMenu alloc] init]]; |
slouken@1931 | 77 |
|
slouken@1931 | 78 |
/* Create the application menu */ |
slouken@1931 | 79 |
appName = GetApplicationName(); |
slouken@1931 | 80 |
appleMenu = [[NSMenu alloc] initWithTitle:@""]; |
slouken@1931 | 81 |
|
slouken@1931 | 82 |
/* Add menu items */ |
slouken@1931 | 83 |
title = [@"About " stringByAppendingString:appName]; |
slouken@1931 | 84 |
[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; |
slouken@1931 | 85 |
|
slouken@1931 | 86 |
[appleMenu addItem:[NSMenuItem separatorItem]]; |
slouken@1931 | 87 |
|
slouken@1931 | 88 |
title = [@"Hide " stringByAppendingString:appName]; |
slouken@1931 | 89 |
[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; |
slouken@1931 | 90 |
|
slouken@1931 | 91 |
menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; |
slouken@1931 | 92 |
[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; |
slouken@1931 | 93 |
|
slouken@1931 | 94 |
[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; |
slouken@1931 | 95 |
|
slouken@1931 | 96 |
[appleMenu addItem:[NSMenuItem separatorItem]]; |
slouken@1931 | 97 |
|
slouken@1931 | 98 |
title = [@"Quit " stringByAppendingString:appName]; |
slouken@1931 | 99 |
[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; |
slouken@1931 | 100 |
|
slouken@1931 | 101 |
/* Put menu into the menubar */ |
slouken@1931 | 102 |
menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; |
slouken@1931 | 103 |
[menuItem setSubmenu:appleMenu]; |
slouken@1931 | 104 |
[[NSApp mainMenu] addItem:menuItem]; |
slouken@1931 | 105 |
[menuItem release]; |
slouken@1931 | 106 |
|
slouken@1931 | 107 |
/* Tell the application object that this is now the application menu */ |
slouken@1931 | 108 |
[NSApp setAppleMenu:appleMenu]; |
slouken@1931 | 109 |
[appleMenu release]; |
slouken@1931 | 110 |
|
slouken@1931 | 111 |
|
slouken@1931 | 112 |
/* Create the window menu */ |
slouken@1931 | 113 |
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; |
slouken@1931 | 114 |
|
slouken@1931 | 115 |
/* "Minimize" item */ |
slouken@1931 | 116 |
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; |
slouken@1931 | 117 |
[windowMenu addItem:menuItem]; |
slouken@1931 | 118 |
[menuItem release]; |
slouken@1931 | 119 |
|
slouken@1931 | 120 |
/* Put menu into the menubar */ |
slouken@1931 | 121 |
menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; |
slouken@1931 | 122 |
[menuItem setSubmenu:windowMenu]; |
slouken@1931 | 123 |
[[NSApp mainMenu] addItem:menuItem]; |
slouken@1931 | 124 |
[menuItem release]; |
slouken@1931 | 125 |
|
slouken@1931 | 126 |
/* Tell the application object that this is now the window menu */ |
slouken@1931 | 127 |
[NSApp setWindowsMenu:windowMenu]; |
slouken@1931 | 128 |
[windowMenu release]; |
slouken@1931 | 129 |
} |
slouken@1931 | 130 |
|
slouken@1931 | 131 |
void |
slouken@1931 | 132 |
Cocoa_RegisterApp(void) |
slouken@1931 | 133 |
{ |
slouken@1931 | 134 |
ProcessSerialNumber psn; |
slouken@1931 | 135 |
NSAutoreleasePool *pool; |
slouken@1931 | 136 |
|
slouken@1931 | 137 |
if (!GetCurrentProcess(&psn)) { |
slouken@1931 | 138 |
TransformProcessType(&psn, kProcessTransformToForegroundApplication); |
slouken@1931 | 139 |
SetFrontProcess(&psn); |
slouken@1931 | 140 |
} |
slouken@1931 | 141 |
|
slouken@1931 | 142 |
pool = [[NSAutoreleasePool alloc] init]; |
slouken@1931 | 143 |
if (NSApp == nil) { |
slouken@1931 | 144 |
[SDLApplication sharedApplication]; |
slouken@1931 | 145 |
|
slouken@1931 | 146 |
if ([NSApp mainMenu] == nil) { |
slouken@1931 | 147 |
CreateApplicationMenus(); |
slouken@1931 | 148 |
} |
slouken@1931 | 149 |
[NSApp finishLaunching]; |
slouken@1931 | 150 |
} |
slouken@1931 | 151 |
[pool release]; |
slouken@1931 | 152 |
} |
slouken@1931 | 153 |
|
slouken@1931 | 154 |
void |
slouken@1931 | 155 |
Cocoa_PumpEvents(_THIS) |
slouken@1931 | 156 |
{ |
slouken@1931 | 157 |
NSAutoreleasePool *pool; |
slouken@1931 | 158 |
|
slouken@1931 | 159 |
pool = [[NSAutoreleasePool alloc] init]; |
slouken@1931 | 160 |
for ( ; [NSApp isRunning]; ) { |
slouken@1931 | 161 |
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ]; |
slouken@1931 | 162 |
if ( event == nil ) { |
slouken@1931 | 163 |
break; |
slouken@1931 | 164 |
} |
slouken@1931 | 165 |
[NSApp sendEvent:event]; |
slouken@1931 | 166 |
} |
slouken@1931 | 167 |
[pool release]; |
slouken@1931 | 168 |
} |
slouken@1931 | 169 |
|
slouken@1931 | 170 |
/* vi: set ts=4 sw=4 expandtab: */ |