# HG changeset patch # User Sam Lantinga # Date 1054183956 0 # Node ID 52864d66d168ab96b541e7d193607f5044b581af # Parent 550bccdf04bd33e79a093bfadfa04c6862338e9b 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 diff -r 550bccdf04bd -r 52864d66d168 src/video/quartz/SDL_QuartzEvents.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 ) { diff -r 550bccdf04bd -r 52864d66d168 src/video/quartz/SDL_QuartzWindow.m --- 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 */