X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/598fe99d56158319f6b5f817c4670748f98bc70a..ab67e8874db324fab5223cc8d5dff8a8de3e2b77:/src/osx/cocoa/utils.mm diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index c2c8369940..f4702bb185 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,16 +237,46 @@ 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]; // calling finishLaunching so early before running the loop seems to trigger some 'MenuManager compatibility' which leads @@ -255,6 +285,8 @@ bool wxApp::DoInitGui() [NSApp finishLaunching]; #endif } + gNSLayoutManager = [[NSLayoutManager alloc] init]; + return true; } @@ -266,6 +298,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)