]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/utils.mm
Add missing WXK constants for the control keys
[wxWidgets.git] / src / osx / cocoa / utils.mm
index 9f57601f8487afe7772829274d1ca7e9b089def4..ef5aefa5389935a5b34e5903464fa54e25ad5c6d 100644 (file)
@@ -37,7 +37,7 @@
 
 #if wxOSX_USE_COCOA
 
 
 #if wxOSX_USE_COCOA
 
-#if wxUSE_BASE
+#if wxUSE_GUI
 
 // Emit a beeeeeep
 void wxBell()
 
 // Emit a beeeeeep
 void wxBell()
@@ -45,17 +45,13 @@ void wxBell()
     NSBeep();
 }
 
     NSBeep();
 }
 
-#endif // wxUSE_BASE
-
-#if wxUSE_GUI
-
 @implementation wxNSAppController
 
 - (void)applicationWillFinishLaunching:(NSNotification *)application { 
     wxUnusedVar(application);
     
 @implementation wxNSAppController
 
 - (void)applicationWillFinishLaunching:(NSNotification *)application { 
     wxUnusedVar(application);
     
-    // we must install our handlers later than setting the app delegates, because otherwise our handlers
-    // get overwritten
+    // we must install our handlers later than setting the app delegate, because otherwise our handlers
+    // get overwritten in the meantime
 
     NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
     
 
     NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
     
@@ -241,15 +237,43 @@ void wxBell()
 }
 @end
 
 }
 @end
 
+// 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
+
+wxNSAppController* appcontroller = nil;
+
+NSLayoutManager* gNSLayoutManager = nil;
+
+
 bool wxApp::DoInitGui()
 {
     wxMacAutoreleasePool pool;
 bool wxApp::DoInitGui()
 {
     wxMacAutoreleasePool pool;
-    [NSApplication sharedApplication];
 
     if (!sm_isEmbedded)
     {
 
     if (!sm_isEmbedded)
     {
-        wxNSAppController* controller = [[wxNSAppController alloc] init];
-        [NSApp setDelegate:controller];
+        [wxNSApplication sharedApplication];
+
+        appcontroller = [[wxNSAppController alloc] init];
+        [NSApp setDelegate:appcontroller];
 
         // 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
 
         // 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
@@ -257,11 +281,24 @@ bool wxApp::DoInitGui()
         [NSApp finishLaunching];
 #endif
     }
         [NSApp finishLaunching];
 #endif
     }
+    gNSLayoutManager = [[NSLayoutManager alloc] init];
+    
     return true;
 }
 
 void wxApp::DoCleanUp()
 {
     return true;
 }
 
 void wxApp::DoCleanUp()
 {
+    if ( appcontroller != nil )
+    {
+        [NSApp setDelegate:nil];
+        [appcontroller release];
+        appcontroller = nil;
+    }
+    if ( gNSLayoutManager != nil )
+    {
+        [gNSLayoutManager release];
+        gNSLayoutManager = nil;
+    }
 }
 
 void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 }
 
 void wxClientDisplayRect(int *x, int *y, int *width, int *height)
@@ -305,10 +342,10 @@ wxMouseState wxGetMouseState()
     ms.SetMiddleDown( (buttons & 0x04) != 0 );
     ms.SetRightDown( (buttons & 0x02) != 0 );
     
     ms.SetMiddleDown( (buttons & 0x04) != 0 );
     ms.SetRightDown( (buttons & 0x02) != 0 );
     
-    ms.SetControlDown(modifiers & NSControlKeyMask);
+    ms.SetRawControlDown(modifiers & NSControlKeyMask);
     ms.SetShiftDown(modifiers & NSShiftKeyMask);
     ms.SetAltDown(modifiers & NSAlternateKeyMask);
     ms.SetShiftDown(modifiers & NSShiftKeyMask);
     ms.SetAltDown(modifiers & NSAlternateKeyMask);
-    ms.SetMetaDown(modifiers & NSCommandKeyMask);
+    ms.SetControlDown(modifiers & NSCommandKeyMask);
     
     return ms;
 }
     
     return ms;
 }