From c183de566282a56251d89e2a028dd8bf186ac88a Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Wed, 12 Apr 2017 20:11:16 +0200 Subject: [PATCH] onepad: add hot-plugging support Note: pad to player mapping is done later v2: remove the useless print --- plugins/onepad/SDL/joystick.cpp | 2 ++ plugins/onepad/onepad.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/plugins/onepad/SDL/joystick.cpp b/plugins/onepad/SDL/joystick.cpp index 2437ab6cc1..40955fe817 100644 --- a/plugins/onepad/SDL/joystick.cpp +++ b/plugins/onepad/SDL/joystick.cpp @@ -47,6 +47,8 @@ void JoystickInfo::EnumerateJoysticks(std::vector> &vjo SDL_JoystickEventState(SDL_QUERY); SDL_GameControllerEventState(SDL_QUERY); + SDL_EventState(SDL_CONTROLLERDEVICEADDED, SDL_ENABLE); + SDL_EventState(SDL_CONTROLLERDEVICEREMOVED, SDL_ENABLE); { // Support as much Joystick as possible GBytes *bytes = g_resource_lookup_data(onepad_res_get_resource(), "/onepad/res/game_controller_db.txt", G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr); diff --git a/plugins/onepad/onepad.cpp b/plugins/onepad/onepad.cpp index 1b47eaa8d5..e0acdc69ec 100644 --- a/plugins/onepad/onepad.cpp +++ b/plugins/onepad/onepad.cpp @@ -341,6 +341,21 @@ PADpoll(u8 value) EXPORT_C_(keyEvent *) PADkeyEvent() { +#ifdef SDL_BUILD + // Take the opportunity to handle hot plugging here + SDL_Event events; + while (SDL_PollEvent(&events)) { + switch (events.type) { + case SDL_CONTROLLERDEVICEADDED: + case SDL_CONTROLLERDEVICEREMOVED: + GamePad::EnumerateGamePads(s_vgamePad); + break; + default: + break; + } + } +#endif + s_event = event; event.evt = 0; event.key = 0;