Vitaliy Margolen : dinput: Don't return non existent keys.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Dec 18 05:34:34 CST 2006
Module: wine
Branch: master
Commit: 1db55d2511e766003e83245e83b91ec9ef4e6fe4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1db55d2511e766003e83245e83b91ec9ef4e6fe4
Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date: Sun Dec 17 23:20:52 2006 -0700
dinput: Don't return non existent keys.
---
dlls/dinput/keyboard.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index cbf06ab..14562b4 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -316,12 +316,13 @@ static HRESULT WINAPI SysKeyboardAImpl_E
memset(&ddoi, 0, sizeof(ddoi));
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
- for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) {
- /* Report 255 keys :-) */
+ for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
+ {
+ if (!GetKeyNameTextA(((i & 0x7f) << 16) | ((i & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName)))
+ continue;
ddoi.guidType = GUID_Key;
ddoi.dwOfs = i;
ddoi.dwType = DIDFT_MAKEINSTANCE(i) | DIDFT_BUTTON;
- GetKeyNameTextA(((i & 0x7f) << 16) | ((i & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));
_dump_OBJECTINSTANCEA(&ddoi);
if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;
}
@@ -452,7 +453,8 @@ SysKeyboardAImpl_GetObjectInfo(
ddoi.guidType = GUID_Key;
ddoi.dwOfs = dwObj;
ddoi.dwType = DIDFT_MAKEINSTANCE(dwObj) | DIDFT_BUTTON;
- GetKeyNameTextA(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));
+ if (!GetKeyNameTextA(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName)))
+ return DIERR_OBJECTNOTFOUND;
/* And return our just filled device object instance structure */
memcpy(pdidoi, &ddoi, (dwSize < sizeof(ddoi) ? dwSize : sizeof(ddoi)));
@@ -485,7 +487,8 @@ static HRESULT WINAPI SysKeyboardWImpl_G
ddoi.guidType = GUID_Key;
ddoi.dwOfs = dwObj;
ddoi.dwType = DIDFT_MAKEINSTANCE(dwObj) | DIDFT_BUTTON;
- GetKeyNameTextW(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));
+ if (!GetKeyNameTextW(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName)))
+ return DIERR_OBJECTNOTFOUND;
/* And return our just filled device object instance structure */
memcpy(pdidoi, &ddoi, (dwSize < sizeof(ddoi) ? dwSize : sizeof(ddoi)));
More information about the wine-cvs
mailing list