Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
commit 1170112da3776fdb06425f62d57b63144c33dc51
Author: James Zipperer <james.zipperer@synapse.com>
Date: Sun Aug 21 01:19:19 2016 -0700
bugfix for controller / joystick add / remove being in the event queue at the same time
Loading branch information
Showing
2 changed files
with
24 additions
and
0 deletions .
+12
−0
src/joystick/SDL_gamecontroller.c
+12
−0
src/joystick/linux/SDL_sysjoystick.c
@@ -222,7 +222,19 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event)
SDL_GameController *controllerlist = SDL_gamecontrollers;
while (controllerlist) {
if (controllerlist->joystick ->instance_id == event->jdevice .which ) {
SDL_Event peeped;
SDL_Event deviceevent;
/* If there is an existing add event in the queue, it
* needs to be modified to have the right value for which,
* because the number of controllers in the system is now
* one less.
*/
if ( SDL_PeepEvents (&peeped, 1 , SDL_GETEVENT, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEADDED) > 0 ) {
peeped.jdevice .which --;
SDL_PushEvent (&peeped);
}
deviceevent.type = SDL_CONTROLLERDEVICEREMOVED;
deviceevent.cdevice .which = event->jdevice .which ;
SDL_PushEvent (&deviceevent);
@@ -295,6 +295,18 @@ MaybeRemoveDevice(const char *path)
event.type = SDL_JOYDEVICEREMOVED;
if (SDL_GetEventState (event.type ) == SDL_ENABLE) {
SDL_Event peeped;
/* If there is an existing add event in the queue, it
* needs to be modified to have the right value for which,
* because the number of controllers in the system is now
* one less.
*/
if ( SDL_PeepEvents (&peeped, 1 , SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEADDED) > 0 ) {
peeped.jdevice .which --;
SDL_PushEvent (&peeped);
}
event.jdevice .which = item->device_instance ;
if ( (SDL_EventOK == NULL ) ||
(*SDL_EventOK) (SDL_EventOKParam, &event) ) {
Toggle all file notes