diff src/video/quartz/SDL_QuartzEvents.m @ 761:c5b2b6d2d1fe

Date: Wed, 31 Dec 2003 21:55:30 +0100 From: Max Horn Subject: SDL: video/quartz cleanup while doing some experimental changes in the quartz code, I was annoyed by having to recompile that one big .o file over and over again. So I decided to finally realize one TODO: properly splitting the code over multiple files :-). With two exceptions, I didn't make code changes, only rearranged files and added new headers. Since there are several new files, making a patch didn't work out so well, so I decided to just send you all the new & modified files. The one source change I made is related to showing/hiding the mouse. I renamed cursor_visible to cursor_should_be_visible and cursor_hidden to cursor_visible; I think that makes reading the code easier. Then I added two new functions: QZ_ShowMouse and QZ_HideMouse. They help manage cursor_visible (the former 'cursor_hidden'). Finally I replaced the Carbon ShowCursor/HiderCuror calls by [NSCursor hide] and [NSCursor unhide]. The API docs are not conclusive, but it might be that with those the "cursor_visible" (former 'cursor_hidden') hack may not be necessary anymore; however so far I didn't test this hypothesis, so I left that in. The other change was to remove in_foreground and use [NSApp isActive] instead: Manually keeping track of whether we are in the foreground is error prone. This should work better in some corner cases.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 04 Jan 2004 14:55:35 +0000
parents 5d2f027b3349
children 68c8da837fc0
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzEvents.m	Wed Dec 31 04:48:38 2003 +0000
+++ b/src/video/quartz/SDL_QuartzEvents.m	Sun Jan 04 14:55:35 2004 +0000
@@ -1,6 +1,6 @@
 /*
     SDL - Simple DirectMedia Layer
-    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002    Sam Lantinga
+    Copyright (C) 1997-2003  Sam Lantinga
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -19,12 +19,15 @@
     Sam Lantinga
     slouken@libsdl.org
 */
-#include <stdlib.h>	// For getenv()
+
+#include "SDL_QuartzVideo.h"
+
+#include <stdlib.h> // For getenv()
 #include <IOKit/IOMessage.h> // For wake from sleep detection
 #include <IOKit/pwr_mgt/IOPMLib.h> // For wake from sleep detection
 #include "SDL_QuartzKeys.h"
 
-static void     QZ_InitOSKeymap (_THIS) {
+void     QZ_InitOSKeymap (_THIS) {
     const void *KCHRPtr;
     UInt32 state;
     UInt32 value;
@@ -283,7 +286,7 @@
              key.sym = mapping[i];
              /* If this was Caps Lock, we need some additional voodoo to make SDL happy */
              if (bit == NSAlphaShiftKeyMask)
-             SDL_PrivateKeyboard (SDL_PRESSED, &key);
+                  SDL_PrivateKeyboard (SDL_PRESSED, &key);
              SDL_PrivateKeyboard (SDL_RELEASED, &key);
         }
         else if ( newMask &&
@@ -302,13 +305,9 @@
 
 static void QZ_DoActivate (_THIS)
 {
-    in_foreground = YES;
-    
     /* Hide the cursor if it was hidden by SDL_ShowCursor() */
-    if (!cursor_visible && !cursor_hidden) {
-        HideCursor ();
-        cursor_hidden = YES;
-    }
+    if (!cursor_should_be_visible)
+        QZ_HideMouse (this);
 
     /* Regrab input, only if it was previously grabbed */
     if ( current_grab_mode == SDL_GRAB_ON ) {
@@ -323,8 +322,6 @@
 
 static void QZ_DoDeactivate (_THIS) {
 
-    in_foreground = NO;
-
     /* Get the current cursor location, for restore on activate */
     cursor_loc = [ NSEvent mouseLocation ]; /* global coordinates */
     if (qz_window)
@@ -335,10 +332,8 @@
     CGAssociateMouseAndMouseCursorPosition (1);
 
     /* Show the cursor if it was hidden by SDL_ShowCursor() */
-    if (!cursor_visible && cursor_hidden) {
-        ShowCursor ();
-        cursor_hidden = NO;
-    }
+    if (!cursor_should_be_visible)
+        QZ_ShowMouse (this);
 
     SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS);
 }
@@ -359,13 +354,13 @@
              IOAllowPowerChange(power_connection, (long) messageArgument);
              break;
          case kIOMessageSystemHasPoweredOn:
-			/* awake */
+            /* awake */
             SDL_PrivateExpose();
             break;
      }
 }
 
-static void QZ_RegisterForSleepNotifications (_THIS)
+void QZ_RegisterForSleepNotifications (_THIS)
 {
      CFRunLoopSourceRef rls;
      IONotificationPortRef thePortRef;
@@ -400,7 +395,7 @@
 }
 
 
-static void QZ_PumpEvents (_THIS)
+void QZ_PumpEvents (_THIS)
 {
     int firstMouseEvent;
     CGMouseDelta dx, dy;
@@ -445,7 +440,7 @@
             BOOL isInGameWin;
             
             #define DO_MOUSE_DOWN(button) do {                                               \
-                            if ( in_foreground ) {                                           \
+                            if ( [ NSApp isActive ] ) {                                      \
                                 if ( isInGameWin ) {                                         \
                                     SDL_PrivateMouseButton (SDL_PRESSED, button, 0, 0);      \
                                     expect_mouse_up |= 1<<button;                            \