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