X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/598fe99d56158319f6b5f817c4670748f98bc70a..7c60222510bc5e197b12f153c4bf05db66cb0f4a:/src/osx/cocoa/utils.mm diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index c2c8369940..66bf2fb682 100644 --- a/src/osx/cocoa/utils.mm +++ b/src/osx/cocoa/utils.mm @@ -71,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); @@ -237,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 @@ -255,6 +286,8 @@ bool wxApp::DoInitGui() [NSApp finishLaunching]; #endif } + gNSLayoutManager = [[NSLayoutManager alloc] init]; + return true; } @@ -266,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)