From: Rémi Bernon rbernon@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57919 --- dlls/dinput/config.c | 3 +++ dlls/dinput/device.c | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c index d7a416501f0..dd2edcd5869 100644 --- a/dlls/dinput/config.c +++ b/dlls/dinput/config.c @@ -307,6 +307,7 @@ static void assign_action(HWND dialog) lpdiaf->rgoAction[old_action].dwObjID = 0; lpdiaf->rgoAction[old_action].guidInstance = GUID_NULL; lpdiaf->rgoAction[old_action].dwHow = DIAH_UNMAPPED; + lpdiaf->rgoAction[old_action].dwFlags = 0; }
/* Find if action text is already set for other object and unset it */ @@ -321,6 +322,7 @@ static void assign_action(HWND dialog) lpdiaf->rgoAction[action].dwObjID = type; lpdiaf->rgoAction[action].guidInstance = device->ddi.guidInstance; lpdiaf->rgoAction[action].dwHow = DIAH_USERCONFIG; + lpdiaf->rgoAction[action].dwFlags |= DIA_APPMAPPED;
/* Set new action in the list */ lv_set_action(dialog, obj, action, lpdiaf); @@ -334,6 +336,7 @@ static void copy_actions(LPDIACTIONFORMATW to, LPDIACTIONFORMATW from) to->rgoAction[i].guidInstance = from->rgoAction[i].guidInstance; to->rgoAction[i].dwObjID = from->rgoAction[i].dwObjID; to->rgoAction[i].dwHow = from->rgoAction[i].dwHow; + to->rgoAction[i].dwFlags = from->rgoAction[i].dwFlags; to->rgoAction[i].lptszActionName = from->rgoAction[i].lptszActionName; } } diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c index 6288eeb3c2a..31240d03f65 100644 --- a/dlls/dinput/device.c +++ b/dlls/dinput/device.c @@ -1867,11 +1867,14 @@ static HRESULT WINAPI dinput_device_BuildActionMap( IDirectInputDevice8W *iface, if (!action->dwSemantic) return DIERR_INVALIDPARAM; if (flags == DIDBAM_PRESERVE && !IsEqualCLSID( &action->guidInstance, &GUID_NULL ) && !IsEqualCLSID( &action->guidInstance, &impl->guid )) continue; - if (action->dwFlags & DIA_APPMAPPED) action->dwHow = DIAH_APPREQUESTED; - else action->dwHow = 0; - if (action->dwHow == DIAH_APPREQUESTED || action->dwHow == DIAH_USERCONFIG) continue; + if (action->dwFlags & DIA_APPMAPPED) + { + action->dwHow = DIAH_APPREQUESTED; + continue; + } if ((action->dwSemantic & 0xf0000000) == 0x80000000) action->dwFlags &= ~DIA_APPNOMAP; if (!(action->dwFlags & DIA_APPNOMAP)) action->guidInstance = GUID_NULL; + action->dwHow = 0; }
/* Unless asked the contrary by these flags, try to load a previous mapping */