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