From abfe5601c7b0e792070208769de63a3f990d7d0d Mon Sep 17 00:00:00 2001 From: Marcus Minhorst Date: Sun, 8 Jun 2025 16:52:00 -0400 Subject: [PATCH] Check for SDL_JOYDEVICEADDED and SDL_JOYDEVICEREMOVED --- src/common/platform/posix/sdl/i_input.cpp | 8 +++++++ src/common/platform/posix/sdl/i_joystick.cpp | 23 +++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/common/platform/posix/sdl/i_input.cpp b/src/common/platform/posix/sdl/i_input.cpp index 02cf31e45..0148eaad2 100644 --- a/src/common/platform/posix/sdl/i_input.cpp +++ b/src/common/platform/posix/sdl/i_input.cpp @@ -32,6 +32,7 @@ */ #include #include "m_argv.h" +#include "m_joy.h" #include "v_video.h" #include "d_eventbase.h" @@ -467,6 +468,13 @@ void MessagePump (const SDL_Event &sev) if(event.data1 != 0) D_PostEvent(&event); break; + + case SDL_JOYDEVICEADDED: + case SDL_JOYDEVICEREMOVED: + I_UpdateDeviceList(); + event.type = EV_DeviceChange; + D_PostEvent (&event); + break; } } diff --git a/src/common/platform/posix/sdl/i_joystick.cpp b/src/common/platform/posix/sdl/i_joystick.cpp index 42837ecba..c08686465 100644 --- a/src/common/platform/posix/sdl/i_joystick.cpp +++ b/src/common/platform/posix/sdl/i_joystick.cpp @@ -281,7 +281,22 @@ class SDLInputJoystickManager public: SDLInputJoystickManager() { - for(int i = 0;i < SDL_NumJoysticks();i++) + this->UpdateDeviceList(); + } + ~SDLInputJoystickManager() + { + for(unsigned int i = 0;i < Joysticks.Size();i++) + delete Joysticks[i]; + } + + void UpdateDeviceList() + { + for (int i = 0; i < Joysticks.SSize(); i++) + { + delete Joysticks[i]; + } + Joysticks.clear(); + for(int i = 0; i < SDL_NumJoysticks(); i++) { SDLInputJoystick *device = new SDLInputJoystick(i); if(device->IsValid()) @@ -290,11 +305,6 @@ public: delete device; } } - ~SDLInputJoystickManager() - { - for(unsigned int i = 0;i < Joysticks.Size();i++) - delete Joysticks[i]; - } void AddAxes(float axes[NUM_JOYAXIS]) { @@ -364,5 +374,6 @@ void I_ProcessJoysticks() IJoystickConfig *I_UpdateDeviceList() { + JoystickManager->UpdateDeviceList(); return NULL; }