symbian-qemu-0.9.1-12/libsdl-trunk/src/events/SDL_active.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2     SDL - Simple DirectMedia Layer
       
     3     Copyright (C) 1997-2006 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@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 	return(posted);
       
    91 }