/* This function (and associated calls) may be called more than once */ int SDL_StartEventLoop(Uint32 flags) { int retcode; /* Clean out the event queue */ SDL_EventThread = NULL; SDL_EventQ.lock = NULL; SDL_StopEventLoop(); /* No filter to start with, process most event types */ SDL_EventOK = NULL; SDL_memset(SDL_ProcessEvents, SDL_ENABLE, sizeof(SDL_ProcessEvents)); SDL_eventstate = ~0; /* It's not save to call SDL_EventState() yet */ SDL_eventstate &= ~(0x00000001 << SDL_SYSWMEVENT); SDL_ProcessEvents[SDL_SYSWMEVENT] = SDL_IGNORE; /* Initialize event handlers */ retcode = 0; retcode += SDL_KeyboardInit(); retcode += SDL_MouseInit(); retcode += SDL_QuitInit(); if (retcode < 0) { /* We don't expect them to fail, but... */ return (-1); } /* Create the lock and event thread */ if (SDL_StartEventThread(flags) < 0) { SDL_StopEventLoop(); return (-1); } return (0); }
int SDL_StartEventLoop(Uint32 flags) { int retcode; SDL_EventThread = NULL; SDL_EventQ.lock = NULL; SDL_StopEventLoop(); SDL_EventOK = NULL; SDL_memset(SDL_ProcessEvents,SDL_ENABLE,sizeof(SDL_ProcessEvents)); SDL_eventstate = ~0; SDL_eventstate &= ~(0x00000001 << SDL_SYSWMEVENT); SDL_ProcessEvents[SDL_SYSWMEVENT] = SDL_IGNORE; retcode = 0; retcode += SDL_AppActiveInit(); retcode += SDL_KeyboardInit(); retcode += SDL_MouseInit(); retcode += SDL_QuitInit(); if ( retcode < 0 ) { return(-1); } if ( SDL_StartEventThread(flags) < 0 ) { SDL_StopEventLoop(); return(-1); } return(0); }
void SDL_QuitSubSystem(Uint32 flags) { /* Shut down requested initialized subsystems */ #if !SDL_JOYSTICK_DISABLED if ((flags & SDL_INIT_GAMECONTROLLER)) { /* game controller implies joystick */ flags |= SDL_INIT_JOYSTICK; if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_GAMECONTROLLER)) { SDL_GameControllerQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_GAMECONTROLLER); } if ((flags & SDL_INIT_JOYSTICK)) { /* joystick implies events */ flags |= SDL_INIT_EVENTS; if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_JOYSTICK)) { SDL_JoystickQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_JOYSTICK); } #endif #if !SDL_HAPTIC_DISABLED if ((flags & SDL_INIT_HAPTIC)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_HAPTIC)) { SDL_HapticQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_HAPTIC); } #endif #if !SDL_AUDIO_DISABLED if ((flags & SDL_INIT_AUDIO)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_AUDIO)) { SDL_AudioQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_AUDIO); } #endif #if !SDL_VIDEO_DISABLED if ((flags & SDL_INIT_VIDEO)) { /* video implies events */ flags |= SDL_INIT_EVENTS; if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_VIDEO)) { SDL_VideoQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_VIDEO); } #endif #if !SDL_TIMERS_DISABLED if ((flags & SDL_INIT_TIMER)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_TIMER)) { SDL_TimerQuit(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_TIMER); } #endif #if !SDL_EVENTS_DISABLED if ((flags & SDL_INIT_EVENTS)) { if (SDL_PrivateShouldQuitSubsystem(SDL_INIT_EVENTS)) { SDL_QuitQuit(); SDL_StopEventLoop(); } SDL_PrivateSubsystemRefCountDecr(SDL_INIT_EVENTS); } #endif }