Home | History | Annotate | Download | only in events
      1 /*
      2     SDL - Simple DirectMedia Layer
      3     Copyright (C) 1997-2012 Sam Lantinga
      4 
      5     This library is free software; you can redistribute it and/or
      6     modify it under the terms of the GNU Lesser General Public
      7     License as published by the Free Software Foundation; either
      8     version 2.1 of the License, or (at your option) any later version.
      9 
     10     This library is distributed in the hope that it will be useful,
     11     but WITHOUT ANY WARRANTY; without even the implied warranty of
     12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13     Lesser General Public License for more details.
     14 
     15     You should have received a copy of the GNU Lesser General Public
     16     License along with this library; if not, write to the Free Software
     17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     18 
     19     Sam Lantinga
     20     slouken (at) libsdl.org
     21 */
     22 #include "SDL_config.h"
     23 
     24 /* Application focus/iconification handling code for SDL */
     25 
     26 #include "SDL_events.h"
     27 #include "SDL_events_c.h"
     28 
     29 
     30 /* These are static for our active event handling code */
     31 static Uint8 SDL_appstate = 0;
     32 
     33 /* Public functions */
     34 int SDL_AppActiveInit(void)
     35 {
     36 	/* Start completely active */
     37 	SDL_appstate = (SDL_APPACTIVE|SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS);
     38 
     39 	/* That's it! */
     40 	return(0);
     41 }
     42 void SDL_AppActiveQuit(void)
     43 {
     44 }
     45 
     46 Uint8 SDL_GetAppState(void)
     47 {
     48 	return(SDL_appstate);
     49 }
     50 
     51 /* This is global for SDL_eventloop.c */
     52 int SDL_PrivateAppActive(Uint8 gain, Uint8 state)
     53 {
     54 	int posted;
     55 	Uint8 new_state;
     56 
     57 	/* Modify the current state with the given mask */
     58 	if ( gain ) {
     59 		new_state = (SDL_appstate | state);
     60 	} else {
     61 		new_state = (SDL_appstate & ~state);
     62 	}
     63 
     64 	/* Drop events that don't change state */
     65 	if ( new_state == SDL_appstate ) {
     66 		return(0);
     67 	}
     68 
     69 	/* Update internal active state */
     70 	SDL_appstate = new_state;
     71 
     72 	/* Post the event, if desired */
     73 	posted = 0;
     74 	if ( SDL_ProcessEvents[SDL_ACTIVEEVENT] == SDL_ENABLE ) {
     75 		SDL_Event event;
     76 		SDL_memset(&event, 0, sizeof(event));
     77 		event.type = SDL_ACTIVEEVENT;
     78 		event.active.gain = gain;
     79 		event.active.state = state;
     80 		if ( (SDL_EventOK == NULL) || (*SDL_EventOK)(&event) ) {
     81 			posted = 1;
     82 			SDL_PushEvent(&event);
     83 		}
     84 	}
     85 
     86 	/* If we lost keyboard focus, post key-up events */
     87 	if ( (state & SDL_APPINPUTFOCUS) && !gain ) {
     88 		SDL_ResetKeyboard();
     89 	}
     90 	/* If we were minimized, post button-up events */
     91 	if ( (state & SDL_APPACTIVE) && !gain ) {
     92 		SDL_ResetMouse();
     93 	}
     94 	return(posted);
     95 }
     96