mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 09:14:58 +00:00 
			
		
		
		
	Added SDL_PrivateJoystickAdded() and SDL_PrivateJoystickRemoved()
Updated the removal code to iterate over all joystick add messages instead of just the first one.
This commit is contained in:
		
							parent
							
								
									c69bce6774
								
							
						
					
					
						commit
						ad1bfea5a0
					
				| 
						 | 
				
			
			@ -105,6 +105,35 @@ struct _SDL_GameController
 | 
			
		|||
int SDL_PrivateGameControllerAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis, Sint16 value);
 | 
			
		||||
int SDL_PrivateGameControllerButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button, Uint8 state);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
static void UpdateEventsForDeviceRemoval()
 | 
			
		||||
{
 | 
			
		||||
    int i, num_events;
 | 
			
		||||
    SDL_Event *events;
 | 
			
		||||
 | 
			
		||||
    num_events = SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEADDED);
 | 
			
		||||
    if (num_events <= 0) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    events = SDL_stack_alloc(SDL_Event, num_events);
 | 
			
		||||
    if (!events) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    num_events = SDL_PeepEvents(events, num_events, SDL_GETEVENT, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEADDED);
 | 
			
		||||
    for (i = 0; i < num_events; ++i) {
 | 
			
		||||
        --events[i].cdevice.which;
 | 
			
		||||
    }
 | 
			
		||||
    SDL_PeepEvents(events, num_events, SDL_ADDEVENT, 0, 0);
 | 
			
		||||
 | 
			
		||||
    SDL_stack_free(events);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Event filter to fire controller events from joystick ones
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -222,22 +251,13 @@ 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);
 | 
			
		||||
 | 
			
		||||
                    UpdateEventsForDeviceRemoval();
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                controllerlist = controllerlist->next;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -497,6 +497,71 @@ SDL_PrivateJoystickShouldIgnoreEvent()
 | 
			
		|||
 | 
			
		||||
/* These are global for SDL_sysjoystick.c and SDL_events.c */
 | 
			
		||||
 | 
			
		||||
void SDL_PrivateJoystickAdded(int device_index)
 | 
			
		||||
{
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
 | 
			
		||||
    event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = device_index;
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
static void UpdateEventsForDeviceRemoval()
 | 
			
		||||
{
 | 
			
		||||
    int i, num_events;
 | 
			
		||||
    SDL_Event *events;
 | 
			
		||||
 | 
			
		||||
    num_events = SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEADDED);
 | 
			
		||||
    if (num_events <= 0) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    events = SDL_stack_alloc(SDL_Event, num_events);
 | 
			
		||||
    if (!events) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    num_events = SDL_PeepEvents(events, num_events, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEADDED);
 | 
			
		||||
    for (i = 0; i < num_events; ++i) {
 | 
			
		||||
        --events[i].jdevice.which;
 | 
			
		||||
    }
 | 
			
		||||
    SDL_PeepEvents(events, num_events, SDL_ADDEVENT, 0, 0);
 | 
			
		||||
 | 
			
		||||
    SDL_stack_free(events);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDL_PrivateJoystickRemoved(SDL_JoystickID device_instance)
 | 
			
		||||
{
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
 | 
			
		||||
    event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = device_instance;
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    UpdateEventsForDeviceRemoval();
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,8 @@ extern void SDL_GameControllerQuit(void);
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
/* Internal event queueing functions */
 | 
			
		||||
extern void SDL_PrivateJoystickAdded(int device_index);
 | 
			
		||||
extern void SDL_PrivateJoystickRemoved(SDL_JoystickID device_instance);
 | 
			
		||||
extern int SDL_PrivateJoystickAxis(SDL_Joystick * joystick,
 | 
			
		||||
                                   Uint8 axis, Sint16 value);
 | 
			
		||||
extern int SDL_PrivateJoystickBall(SDL_Joystick * joystick,
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +43,8 @@ extern int SDL_PrivateJoystickHat(SDL_Joystick * joystick,
 | 
			
		|||
                                  Uint8 hat, Uint8 value);
 | 
			
		||||
extern int SDL_PrivateJoystickButton(SDL_Joystick * joystick,
 | 
			
		||||
                                     Uint8 button, Uint8 state);
 | 
			
		||||
extern void SDL_PrivateJoystickBatteryLevel( SDL_Joystick * joystick,
 | 
			
		||||
    SDL_JoystickPowerLevel ePowerLevel );
 | 
			
		||||
extern void SDL_PrivateJoystickBatteryLevel(SDL_Joystick * joystick,
 | 
			
		||||
                                            SDL_JoystickPowerLevel ePowerLevel);
 | 
			
		||||
 | 
			
		||||
/* Internal sanity checking functions */
 | 
			
		||||
extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,10 +27,6 @@
 | 
			
		|||
#include "SDL_error.h"
 | 
			
		||||
#include "SDL_events.h"
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "SDL_joystick.h"
 | 
			
		||||
#include "SDL_hints.h"
 | 
			
		||||
#include "SDL_assert.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -252,9 +248,6 @@ Android_AddJoystick(int device_id, const char *name, SDL_bool is_accelerometer,
 | 
			
		|||
{
 | 
			
		||||
    SDL_JoystickGUID guid;
 | 
			
		||||
    SDL_joylist_item *item;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
    
 | 
			
		||||
    if(JoystickByDeviceId(device_id) != NULL || name == NULL) {
 | 
			
		||||
        return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -299,17 +292,7 @@ Android_AddJoystick(int device_id, const char *name, SDL_bool is_accelerometer,
 | 
			
		|||
    /* Need to increment the joystick count before we post the event */
 | 
			
		||||
    ++numjoysticks;
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = (numjoysticks - 1);
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickAdded(numjoysticks - 1);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_JOYSTICK
 | 
			
		||||
    SDL_Log("Added joystick %s with device_id %d", name, device_id);
 | 
			
		||||
| 
						 | 
				
			
			@ -323,9 +306,6 @@ Android_RemoveJoystick(int device_id)
 | 
			
		|||
{
 | 
			
		||||
    SDL_joylist_item *item = SDL_joylist;
 | 
			
		||||
    SDL_joylist_item *prev = NULL;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
    
 | 
			
		||||
    /* Don't call JoystickByDeviceId here or there'll be an infinite loop! */
 | 
			
		||||
    while (item != NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -357,17 +337,7 @@ Android_RemoveJoystick(int device_id)
 | 
			
		|||
    /* Need to decrement the joystick count before we post the event */
 | 
			
		||||
    --numjoysticks;
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = item->device_instance;
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickRemoved(item->device_instance);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_JOYSTICK
 | 
			
		||||
    SDL_Log("Removed joystick with device_id %d", device_id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,9 +34,6 @@
 | 
			
		|||
#include "SDL_sysjoystick_c.h"
 | 
			
		||||
#include "SDL_events.h"
 | 
			
		||||
#include "../../haptic/darwin/SDL_syshaptic_c.h"    /* For haptic hot plugging */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SDL_JOYSTICK_RUNLOOP_MODE CFSTR("SDLJoystick")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,21 +151,7 @@ JoystickDeviceWasRemovedCallback(void *ctx, IOReturn result, void *sender)
 | 
			
		|||
    MacHaptic_MaybeRemoveDevice(device->ffservice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceRemoved()? */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    {
 | 
			
		||||
        SDL_Event event;
 | 
			
		||||
        event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
        if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
            event.jdevice.which = device->instance_id;
 | 
			
		||||
            if ((SDL_EventOK == NULL)
 | 
			
		||||
                || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
 | 
			
		||||
                SDL_PushEvent(&event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickRemoved(device->instance_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -476,21 +459,7 @@ JoystickDeviceWasAddedCallback(void *ctx, IOReturn res, void *sender, IOHIDDevic
 | 
			
		|||
        ++device_index;  /* bump by one since we counted by pNext. */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceAdded()? */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    {
 | 
			
		||||
        SDL_Event event;
 | 
			
		||||
        event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
        if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
            event.jdevice.which = device_index;
 | 
			
		||||
            if ((SDL_EventOK == NULL)
 | 
			
		||||
                || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
 | 
			
		||||
                SDL_PushEvent(&event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickAdded(device_index);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SDL_bool
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,10 +27,6 @@
 | 
			
		|||
#include "SDL_error.h"
 | 
			
		||||
#include "SDL_events.h"
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "SDL_joystick.h"
 | 
			
		||||
#include "SDL_hints.h"
 | 
			
		||||
#include "SDL_assert.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -57,10 +53,6 @@ Emscripten_JoyStickConnected(int eventType, const EmscriptenGamepadEvent *gamepa
 | 
			
		|||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    item = (SDL_joylist_item *) SDL_malloc(sizeof (SDL_joylist_item));
 | 
			
		||||
    if (item == NULL) {
 | 
			
		||||
        return 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -105,20 +97,12 @@ Emscripten_JoyStickConnected(int eventType, const EmscriptenGamepadEvent *gamepa
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    ++numjoysticks;
 | 
			
		||||
 | 
			
		||||
    SDL_PrivateJoystickAdded(numjoysticks - 1);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_JOYSTICK
 | 
			
		||||
    SDL_Log("Number of joysticks is %d", numjoysticks);
 | 
			
		||||
#endif
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = numjoysticks - 1;
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_JOYSTICK
 | 
			
		||||
    SDL_Log("Added joystick with index %d", item->index);
 | 
			
		||||
| 
						 | 
				
			
			@ -132,9 +116,6 @@ Emscripten_JoyStickDisconnected(int eventType, const EmscriptenGamepadEvent *gam
 | 
			
		|||
{
 | 
			
		||||
    SDL_joylist_item *item = SDL_joylist;
 | 
			
		||||
    SDL_joylist_item *prev = NULL;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    while (item != NULL) {
 | 
			
		||||
        if (item->index == gamepadEvent->index) {
 | 
			
		||||
| 
						 | 
				
			
			@ -165,17 +146,7 @@ Emscripten_JoyStickDisconnected(int eventType, const EmscriptenGamepadEvent *gam
 | 
			
		|||
    /* Need to decrement the joystick count before we post the event */
 | 
			
		||||
    --numjoysticks;
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = item->device_instance;
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
	SDL_PrivateJoystickRemoved(item->device_instance);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_JOYSTICK
 | 
			
		||||
    SDL_Log("Removed joystick with id %d", item->device_instance);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,10 +32,6 @@
 | 
			
		|||
#include "../SDL_sysjoystick.h"
 | 
			
		||||
#include "../SDL_joystick_c.h"
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#import <CoreMotion/CoreMotion.h>
 | 
			
		||||
 | 
			
		||||
#ifdef SDL_JOYSTICK_MFI
 | 
			
		||||
| 
						 | 
				
			
			@ -127,9 +123,6 @@ static void
 | 
			
		|||
SDL_SYS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
 | 
			
		||||
{
 | 
			
		||||
    SDL_JoystickDeviceItem *device = deviceList;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    while (device != NULL) {
 | 
			
		||||
        if (device->controller == controller) {
 | 
			
		||||
| 
						 | 
				
			
			@ -172,17 +165,7 @@ SDL_SYS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
 | 
			
		|||
 | 
			
		||||
    ++numjoysticks;
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = numjoysticks - 1;
 | 
			
		||||
        if ((SDL_EventOK == NULL) ||
 | 
			
		||||
            (*SDL_EventOK)(SDL_EventOKParam, &event)) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickAdded(numjoysticks - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SDL_JoystickDeviceItem *
 | 
			
		||||
| 
						 | 
				
			
			@ -191,9 +174,6 @@ SDL_SYS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
 | 
			
		|||
    SDL_JoystickDeviceItem *prev = NULL;
 | 
			
		||||
    SDL_JoystickDeviceItem *next = NULL;
 | 
			
		||||
    SDL_JoystickDeviceItem *item = deviceList;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (device == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -234,17 +214,7 @@ SDL_SYS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
 | 
			
		|||
 | 
			
		||||
    --numjoysticks;
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = device->instance_id;
 | 
			
		||||
        if ((SDL_EventOK == NULL) ||
 | 
			
		||||
            (*SDL_EventOK)(SDL_EventOKParam, &event)) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
	SDL_PrivateJoystickRemoved(device->instance_id);
 | 
			
		||||
 | 
			
		||||
    SDL_free(device->name);
 | 
			
		||||
    SDL_free(device);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,11 +42,6 @@
 | 
			
		|||
#include "../SDL_joystick_c.h"
 | 
			
		||||
#include "SDL_sysjoystick_c.h"
 | 
			
		||||
 | 
			
		||||
/* !!! FIXME: move this somewhere else. */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* This isn't defined in older Linux kernel headers */
 | 
			
		||||
#ifndef SYN_DROPPED
 | 
			
		||||
#define SYN_DROPPED 3
 | 
			
		||||
| 
						 | 
				
			
			@ -176,9 +171,6 @@ MaybeAddDevice(const char *path)
 | 
			
		|||
    char namebuf[128];
 | 
			
		||||
    SDL_JoystickGUID guid;
 | 
			
		||||
    SDL_joylist_item *item;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (path == NULL) {
 | 
			
		||||
        return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -239,18 +231,7 @@ MaybeAddDevice(const char *path)
 | 
			
		|||
    /* Need to increment the joystick count before we post the event */
 | 
			
		||||
    ++numjoysticks;
 | 
			
		||||
 | 
			
		||||
    /* !!! FIXME: Move this to an SDL_PrivateJoyDeviceAdded() function? */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
 | 
			
		||||
    if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
        event.jdevice.which = (numjoysticks - 1);
 | 
			
		||||
        if ( (SDL_EventOK == NULL) ||
 | 
			
		||||
             (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
 | 
			
		||||
            SDL_PushEvent(&event);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
    SDL_PrivateJoystickAdded(numjoysticks - 1);
 | 
			
		||||
 | 
			
		||||
    return numjoysticks;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -262,9 +243,6 @@ MaybeRemoveDevice(const char *path)
 | 
			
		|||
{
 | 
			
		||||
    SDL_joylist_item *item;
 | 
			
		||||
    SDL_joylist_item *prev = NULL;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (path == NULL) {
 | 
			
		||||
        return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -290,30 +268,7 @@ MaybeRemoveDevice(const char *path)
 | 
			
		|||
            /* Need to decrement the joystick count before we post the event */
 | 
			
		||||
            --numjoysticks;
 | 
			
		||||
 | 
			
		||||
            /* !!! FIXME: Move this to an SDL_PrivateJoyDeviceRemoved() function? */
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
            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) ) {
 | 
			
		||||
                    SDL_PushEvent(&event);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
            SDL_PrivateJoystickRemoved(item->device_instance);
 | 
			
		||||
 | 
			
		||||
            SDL_free(item->path);
 | 
			
		||||
            SDL_free(item->name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,9 +42,6 @@
 | 
			
		|||
#include "SDL_joystick.h"
 | 
			
		||||
#include "../SDL_sysjoystick.h"
 | 
			
		||||
#include "../../thread/SDL_systhread.h"
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
#include "../../events/SDL_events_c.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "../../core/windows/SDL_windows.h"
 | 
			
		||||
#if !defined(__WINRT__)
 | 
			
		||||
#include <dbt.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -327,9 +324,6 @@ void
 | 
			
		|||
SDL_SYS_JoystickDetect()
 | 
			
		||||
{
 | 
			
		||||
    JoyStick_DeviceData *pCurList = NULL;
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
    SDL_Event event;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* only enum the devices if the joystick thread told us something changed */
 | 
			
		||||
    if (!s_bDeviceAdded && !s_bDeviceRemoved) {
 | 
			
		||||
| 
						 | 
				
			
			@ -361,17 +355,7 @@ SDL_SYS_JoystickDetect()
 | 
			
		|||
            SDL_DINPUT_MaybeRemoveDevice(&pCurList->dxdevice);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
        SDL_zero(event);
 | 
			
		||||
        event.type = SDL_JOYDEVICEREMOVED;
 | 
			
		||||
 | 
			
		||||
        if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
            event.jdevice.which = pCurList->nInstanceID;
 | 
			
		||||
            if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
 | 
			
		||||
                SDL_PushEvent(&event);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
        SDL_PrivateJoystickRemoved(pCurList->nInstanceID);
 | 
			
		||||
 | 
			
		||||
        pListNext = pCurList->pNext;
 | 
			
		||||
        SDL_free(pCurList->joystickname);
 | 
			
		||||
| 
						 | 
				
			
			@ -392,17 +376,8 @@ SDL_SYS_JoystickDetect()
 | 
			
		|||
                    SDL_DINPUT_MaybeAddDevice(&pNewJoystick->dxdevice);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
#if !SDL_EVENTS_DISABLED
 | 
			
		||||
                SDL_zero(event);
 | 
			
		||||
                event.type = SDL_JOYDEVICEADDED;
 | 
			
		||||
                SDL_PrivateJoystickAdded(device_index);
 | 
			
		||||
 | 
			
		||||
                if (SDL_GetEventState(event.type) == SDL_ENABLE) {
 | 
			
		||||
                    event.jdevice.which = device_index;
 | 
			
		||||
                    if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
 | 
			
		||||
                        SDL_PushEvent(&event);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
#endif /* !SDL_EVENTS_DISABLED */
 | 
			
		||||
                pNewJoystick->send_add_event = SDL_FALSE;
 | 
			
		||||
            }
 | 
			
		||||
            device_index++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue