From 08a8de62276ba1ee317bf0a7e6ae4a5f981d61b6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 31 Jul 2020 22:31:38 +0200 Subject: [PATCH] (XInput) Proper joypad disconnect messages now with autoconfig system --- input/drivers_joypad/xinput_hybrid_joypad.c | 6 ++++-- input/drivers_joypad/xinput_joypad.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/input/drivers_joypad/xinput_hybrid_joypad.c b/input/drivers_joypad/xinput_hybrid_joypad.c index 1d70e20e2f..bdec926dfd 100644 --- a/input/drivers_joypad/xinput_hybrid_joypad.c +++ b/input/drivers_joypad/xinput_hybrid_joypad.c @@ -588,11 +588,13 @@ static void xinput_joypad_poll(void) for (i = 0; i < 4; ++i) { - bool new_connected = g_XInputGetStateEx(i, &(g_xinput_states[i].xstate)) != ERROR_DEVICE_NOT_CONNECTED; + DWORD status = g_XInputGetStateEx(i, &(g_xinput_states[i].xstate)); + bool success = status == ERROR_SUCCESS; + bool new_connected = status != ERROR_DEVICE_NOT_CONNECTED; if (new_connected != g_xinput_states[i].connected) { g_xinput_states[i].connected = new_connected; - if (!g_xinput_states[i].connected) + if (!success) input_autoconfigure_disconnect(i, xinput_joypad_name(i)); } } diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c index 7d3213a2b5..0cc5898c53 100644 --- a/input/drivers_joypad/xinput_joypad.c +++ b/input/drivers_joypad/xinput_joypad.c @@ -330,7 +330,9 @@ static void xinput_joypad_poll(void) for (i = 0; i < 4; ++i) { - bool new_connected = g_XInputGetStateEx(i, &(g_xinput_states[i].xstate)) != ERROR_DEVICE_NOT_CONNECTED; + DWORD status = g_XInputGetStateEx(i, &(g_xinput_states[i].xstate)); + bool success = status == ERROR_SUCCESS; + bool new_connected = status != ERROR_DEVICE_NOT_CONNECTED; if (new_connected != g_xinput_states[i].connected) { /* Normally, dinput handles device insertion/removal for us, but @@ -347,7 +349,7 @@ static void xinput_joypad_poll(void) } g_xinput_states[i].connected = new_connected; - if (!g_xinput_states[i].connected) + if (!success) input_autoconfigure_disconnect(i, xinput_joypad_name(i)); } }