Add connected gamepads on start

Trigger SDL_CONTROLLERDEVICEADDED for all gamepads already connected
when scrcpy starts. We want to handle both the gamepads initially
connected and the gamepads connected while scrcpy is running.

This is not racy, because this event may not trigged automatically until
SDL events are "pumped" (SDL_PumpEvents/SDL_WaitEvent).
This commit is contained in:
Romain Vimont 2024-09-06 23:08:08 +02:00
parent 0ea20f90be
commit abec04e8e7

View file

@ -337,6 +337,21 @@ scrcpy_generate_scid(void) {
return sc_rand_u32(&rand) & 0x7FFFFFFF;
}
static void
init_sdl_gamepads(void) {
// Trigger a SDL_CONTROLLERDEVICEADDED event for all gamepads already
// connected
int num_joysticks = SDL_NumJoysticks();
for (int i = 0; i < num_joysticks; ++i) {
if (SDL_IsGameController(i)) {
SDL_Event event;
event.cdevice.type = SDL_CONTROLLERDEVICEADDED;
event.cdevice.which = i;
SDL_PushEvent(&event);
}
}
}
enum scrcpy_exit_code
scrcpy(struct scrcpy_options *options) {
static struct scrcpy scrcpy;
@ -851,6 +866,11 @@ aoa_complete:
timeout_started = true;
}
bool use_gamepads = true;
if (use_gamepads) {
init_sdl_gamepads();
}
ret = event_loop(s);
terminate_event_loop();
LOGD("quit...");