From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/joy.cpl/dinput.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dlls/joy.cpl/dinput.c b/dlls/joy.cpl/dinput.c index 8805631451f..3a31591216b 100644 --- a/dlls/joy.cpl/dinput.c +++ b/dlls/joy.cpl/dinput.c @@ -163,12 +163,15 @@ static void set_selected_effect( IDirectInputEffect *effect ) LeaveCriticalSection( &state_cs ); } -static IDirectInputEffect *get_selected_effect(void) +static IDirectInputEffect *get_selected_effect( DIJOYSTATE2 *state ) { + IDirectInputDevice8W *device; IDirectInputEffect *effect; EnterCriticalSection( &state_cs ); - if ((effect = effect_selected)) IDirectInputEffect_AddRef( effect ); + if (!(device = device_selected)) effect = NULL; + else if (FAILED(IDirectInputDevice8_GetDeviceState( device, sizeof(*state), state ))) effect = NULL; + else if ((effect = effect_selected)) IDirectInputEffect_AddRef( effect ); LeaveCriticalSection( &state_cs ); return effect; @@ -269,12 +272,13 @@ static DWORD WINAPI input_thread( void *param ) { IDirectInputEffect *effect; DIJOYSTATE2 state = {0}; - unsigned int i; SendMessageW( dialog_hwnd, WM_USER, 0, 0 ); - if ((effect = get_selected_effect())) + if ((effect = get_selected_effect( &state ))) { + static const BYTE empty[sizeof(state.rgbButtons)] = {0}; + BOOL pressed = memcmp( empty, state.rgbButtons, sizeof(state.rgbButtons) ); DWORD flags = DIEP_AXES | DIEP_DIRECTION | DIEP_NORESTART; LONG direction[3] = {0}; DWORD axes[3] = {0}; @@ -291,14 +295,10 @@ static DWORD WINAPI input_thread( void *param ) params.rgdwAxes[0] = state.lX; params.rgdwAxes[1] = state.lY; - for (i = 0; i < ARRAY_SIZE(state.rgbButtons); i++) + if (pressed) { - if (state.rgbButtons[i]) - { - IDirectInputEffect_SetParameters( effect, ¶ms, flags ); - IDirectInputEffect_Start( effect, 1, 0 ); - break; - } + IDirectInputEffect_SetParameters( effect, ¶ms, flags ); + IDirectInputEffect_Start( effect, 1, 0 ); } IDirectInputEffect_Release( effect ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8775