X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e1875c7859f8cd788b263b9640c281bce7b4353a..7c60222510bc5e197b12f153c4bf05db66cb0f4a:/src/osx/cocoa/utils.mm diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index 4a4c1e0c33..66bf2fb682 100644 --- a/src/osx/cocoa/utils.mm +++ b/src/osx/cocoa/utils.mm @@ -37,7 +37,7 @@ #if wxOSX_USE_COCOA -#if wxUSE_BASE +#if wxUSE_GUI // Emit a beeeeeep void wxBell() @@ -45,10 +45,6 @@ void wxBell() NSBeep(); } -#endif // wxUSE_BASE - -#if wxUSE_GUI - @implementation wxNSAppController - (void)applicationWillFinishLaunching:(NSNotification *)application { @@ -75,7 +71,7 @@ void wxBell() const size_t count = [fileNames count]; for (i = 0; i < count; i++) { - fileList.Add( wxCFStringRef::AsString([fileNames objectAtIndex:i]) ); + fileList.Add( wxCFStringRef::AsStringWithNormalizationFormC([fileNames objectAtIndex:i]) ); } wxTheApp->MacOpenFiles(fileList); @@ -241,17 +237,48 @@ void wxBell() } @end -wxNSAppController* appcontroller = nil; +// here we subclass NSApplication, for the purpose of being able to override sendEvent. +@interface wxNSApplication : NSApplication +{ +} + +- (void)sendEvent:(NSEvent *)anEvent; + +@end + +@implementation wxNSApplication + +/* This is needed because otherwise we don't receive any key-up events for command-key + combinations (an AppKit bug, apparently) */ +- (void)sendEvent:(NSEvent *)anEvent +{ + if ([anEvent type] == NSKeyUp && ([anEvent modifierFlags] & NSCommandKeyMask)) + [[self keyWindow] sendEvent:anEvent]; + else [super sendEvent:anEvent]; +} + +@end + +WX_NSObject appcontroller = nil; + +NSLayoutManager* gNSLayoutManager = nil; + +WX_NSObject wxApp::OSXCreateAppController() +{ + return [[wxNSAppController alloc] init]; +} bool wxApp::DoInitGui() { wxMacAutoreleasePool pool; - [NSApplication sharedApplication]; if (!sm_isEmbedded) { - appcontroller = [[wxNSAppController alloc] init]; + [wxNSApplication sharedApplication]; + + appcontroller = OSXCreateAppController(); [NSApp setDelegate:appcontroller]; + [NSColor setIgnoresAlpha:NO]; // calling finishLaunching so early before running the loop seems to trigger some 'MenuManager compatibility' which leads // to the duplication of menus under 10.5 and a warning under 10.6 @@ -259,6 +286,8 @@ bool wxApp::DoInitGui() [NSApp finishLaunching]; #endif } + gNSLayoutManager = [[NSLayoutManager alloc] init]; + return true; } @@ -270,6 +299,11 @@ void wxApp::DoCleanUp() [appcontroller release]; appcontroller = nil; } + if ( gNSLayoutManager != nil ) + { + [gNSLayoutManager release]; + gNSLayoutManager = nil; + } } void wxClientDisplayRect(int *x, int *y, int *width, int *height)