dinput: Set high DIK bit for extended scancodes.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51910 Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
231542b39e
commit
7c67ebfd56
|
@ -80,7 +80,8 @@ static BYTE map_dik_code(DWORD scanCode, DWORD vkCode, DWORD subType, DWORD vers
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scanCode;
|
if (scanCode & 0x100) scanCode |= 0x80;
|
||||||
|
return (BYTE)scanCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dinput_keyboard_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lparam )
|
int dinput_keyboard_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lparam )
|
||||||
|
@ -89,6 +90,7 @@ int dinput_keyboard_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lpa
|
||||||
BYTE new_diks, subtype = GET_DIDEVICE_SUBTYPE( This->base.instance.dwDevType );
|
BYTE new_diks, subtype = GET_DIDEVICE_SUBTYPE( This->base.instance.dwDevType );
|
||||||
int dik_code, ret = This->base.dwCoopLevel & DISCL_EXCLUSIVE;
|
int dik_code, ret = This->base.dwCoopLevel & DISCL_EXCLUSIVE;
|
||||||
KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;
|
KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam;
|
||||||
|
DWORD scan_code;
|
||||||
|
|
||||||
if (wparam != WM_KEYDOWN && wparam != WM_KEYUP &&
|
if (wparam != WM_KEYDOWN && wparam != WM_KEYUP &&
|
||||||
wparam != WM_SYSKEYDOWN && wparam != WM_SYSKEYUP)
|
wparam != WM_SYSKEYDOWN && wparam != WM_SYSKEYUP)
|
||||||
|
@ -105,9 +107,9 @@ int dinput_keyboard_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lpa
|
||||||
case VK_NUMLOCK : dik_code = DIK_NUMLOCK; break;
|
case VK_NUMLOCK : dik_code = DIK_NUMLOCK; break;
|
||||||
case VK_SUBTRACT: dik_code = DIK_SUBTRACT; break;
|
case VK_SUBTRACT: dik_code = DIK_SUBTRACT; break;
|
||||||
default:
|
default:
|
||||||
dik_code = map_dik_code( hook->scanCode & 0xff, hook->vkCode, subtype,
|
scan_code = hook->scanCode & 0xff;
|
||||||
This->base.dinput->dwVersion );
|
if (hook->flags & LLKHF_EXTENDED) scan_code |= 0x100;
|
||||||
if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80;
|
dik_code = map_dik_code( scan_code, hook->vkCode, subtype, This->base.dinput->dwVersion );
|
||||||
}
|
}
|
||||||
new_diks = hook->flags & LLKHF_UP ? 0 : 0x80;
|
new_diks = hook->flags & LLKHF_UP ? 0 : 0x80;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue