Date: Mon, 5 May 2003 00:08:51 -0400
authorSam Lantinga <slouken@libsdl.org>
Thu, 29 May 2003 04:52:36 +0000
changeset 631 52864d66d168
parent 630 550bccdf04bd
child 632 85e104fe14c2
Date: Mon, 5 May 2003 00:08:51 -0400 From: Darrell Walisser Subject: SDL Active Events Patch Hi Guys, I was reading sdl-devel the other day and remembered we don't handle SDL_APPACTIVE and SDL_APPMOUSEFOCUS. I hacked together a quick patch to do just this. One thing to note - there are actually two ways to "iconify" the SDL window (which sets SDL_APPACTIVE): hiding the entire application (for example, option-click on some other window) and minimizing the window to the dock. I treat both as SDL_APPACTIVE, since the window is no longer visible. Cheers, Darrell
src/video/quartz/SDL_QuartzEvents.m
src/video/quartz/SDL_QuartzWindow.m
--- a/src/video/quartz/SDL_QuartzEvents.m	Thu May 29 04:44:13 2003 +0000
+++ b/src/video/quartz/SDL_QuartzEvents.m	Thu May 29 04:52:36 2003 +0000
@@ -583,6 +583,16 @@
                         
                         QZ_PrivateWarpCursor (this, p.x, p.y);
                     }
+                    else
+                    if ( !isInGameWin && (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
+                    
+                        SDL_PrivateAppActive (0, SDL_APPMOUSEFOCUS);
+                    }
+                    else
+                    if ( isInGameWin && !(SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) {
+                    
+                        SDL_PrivateAppActive (1, SDL_APPMOUSEFOCUS);
+                    }
                     break;
                 case NSScrollWheel:
                     if ( isInGameWin ) {
--- a/src/video/quartz/SDL_QuartzWindow.m	Thu May 29 04:44:13 2003 +0000
+++ b/src/video/quartz/SDL_QuartzWindow.m	Thu May 29 04:52:36 2003 +0000
@@ -31,6 +31,9 @@
 - (void)miniaturize:(id)sender;
 - (void)display;
 - (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
+- (void)appDidHide:(NSNotification*)note;
+- (void)appDidUnhide:(NSNotification*)note;
+- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag;
 @end
 
 @implementation SDL_QuartzWindow
@@ -51,6 +54,9 @@
         QZ_SetPortAlphaOpaque ();
     }
     
+    /* window is hidden now */
+    SDL_PrivateAppActive (0, SDL_APPACTIVE);
+    
     [ super miniaturize:sender ];
 }
 
@@ -63,6 +69,9 @@
     */
     if ( (SDL_VideoSurface->flags & SDL_OPENGL) == 0)
         QZ_SetPortAlphaOpaque ();
+
+    /* window is visible again */
+    SDL_PrivateAppActive (1, SDL_APPACTIVE);
 }
 
 - (void)setFrame:(NSRect)frameRect display:(BOOL)flag
@@ -100,6 +109,28 @@
     }
 }
 
+- (void)appDidHide:(NSNotification*)note
+{
+    SDL_PrivateAppActive (0, SDL_APPACTIVE);
+}
+
+- (void)appDidUnhide:(NSNotification*)note
+{
+    SDL_PrivateAppActive (1, SDL_APPACTIVE);
+}
+
+- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag
+{
+    /* Make our window subclass receive these application notifications */
+    [ [ NSNotificationCenter defaultCenter ] addObserver:self
+        selector:@selector(appDidHide:) name:NSApplicationDidHideNotification object:NSApp ];
+    
+    [ [ NSNotificationCenter defaultCenter ] addObserver:self
+        selector:@selector(appDidUnhide:) name:NSApplicationDidUnhideNotification object:NSApp ];
+        
+    return [ super initWithContentRect:contentRect styleMask:styleMask backing:backingType defer:flag ];
+}
+
 @end
 
 /* Delegate for our NSWindow to send SDLQuit() on close */