Vitaliy Margolen : dinput: Implement DIPROP_KEYNAME property for keyboard device.

Alexandre Julliard julliard at winehq.org
Mon Sep 15 06:55:17 CDT 2008


Module: wine
Branch: master
Commit: d939367ac8fc1e7c7461008c86557fd870c4fbe4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d939367ac8fc1e7c7461008c86557fd870c4fbe4

Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date:   Sun Sep 14 12:51:23 2008 -0600

dinput: Implement DIPROP_KEYNAME property for keyboard device.

Based on patch from Sergey Khodych.

---

 dlls/dinput/keyboard.c |   40 ++++++++++++++++++++++++++++++++++++++--
 include/dinput.h       |    7 +++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index e0f76fa..b851b95 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -430,6 +430,42 @@ static HRESULT WINAPI SysKeyboardWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface
     return DI_OK;
 }
 
+/******************************************************************************
+ *      GetProperty : Retrieves information about the input device.
+ */
+static HRESULT WINAPI SysKeyboardAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,
+        REFGUID rguid, LPDIPROPHEADER pdiph)
+{
+    TRACE("(%p) %s,%p\n", iface, debugstr_guid(rguid), pdiph);
+    _dump_DIPROPHEADER(pdiph);
+
+    if (HIWORD(rguid)) return DI_OK;
+
+    switch (LOWORD(rguid))
+    {
+        case (DWORD)DIPROP_KEYNAME:
+        {
+            HRESULT hr;
+            LPDIPROPSTRING ps = (LPDIPROPSTRING)pdiph;
+            DIDEVICEOBJECTINSTANCEW didoi;
+
+            if (pdiph->dwSize != sizeof(DIPROPSTRING))
+                return DIERR_INVALIDPARAM;
+
+            didoi.dwSize = sizeof(DIDEVICEOBJECTINSTANCEW);
+
+            hr = SysKeyboardWImpl_GetObjectInfo((LPDIRECTINPUTDEVICE8W)iface , &didoi,
+                                                 ps->diph.dwObj, ps->diph.dwHow);
+            if (hr == DI_OK)
+                memcpy(ps->wsz, didoi.tszName, sizeof(ps->wsz));
+            return hr;
+        }
+        default:
+            return IDirectInputDevice2AImpl_GetProperty( iface, rguid, pdiph );
+    }
+    return DI_OK;
+}
+
 static const IDirectInputDevice8AVtbl SysKeyboardAvt =
 {
 	IDirectInputDevice2AImpl_QueryInterface,
@@ -437,7 +473,7 @@ static const IDirectInputDevice8AVtbl SysKeyboardAvt =
         IDirectInputDevice2AImpl_Release,
 	SysKeyboardAImpl_GetCapabilities,
         IDirectInputDevice2AImpl_EnumObjects,
-	IDirectInputDevice2AImpl_GetProperty,
+        SysKeyboardAImpl_GetProperty,
 	IDirectInputDevice2AImpl_SetProperty,
 	IDirectInputDevice2AImpl_Acquire,
 	IDirectInputDevice2AImpl_Unacquire,
@@ -479,7 +515,7 @@ static const IDirectInputDevice8WVtbl SysKeyboardWvt =
         XCAST(Release)IDirectInputDevice2AImpl_Release,
 	XCAST(GetCapabilities)SysKeyboardAImpl_GetCapabilities,
         IDirectInputDevice2WImpl_EnumObjects,
-	XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty,
+        XCAST(GetProperty)SysKeyboardAImpl_GetProperty,
 	XCAST(SetProperty)IDirectInputDevice2AImpl_SetProperty,
 	XCAST(Acquire)IDirectInputDevice2AImpl_Acquire,
 	XCAST(Unacquire)IDirectInputDevice2AImpl_Unacquire,
diff --git a/include/dinput.h b/include/dinput.h
index 3ee9ab7..44b20fd 100644
--- a/include/dinput.h
+++ b/include/dinput.h
@@ -725,6 +725,12 @@ typedef struct DIPROPGUIDANDPATH {
 } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
 typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
 
+typedef struct DIPROPSTRING {
+        DIPROPHEADER diph;
+        WCHAR        wsz[MAX_PATH];
+} DIPROPSTRING, *LPDIPROPSTRING;
+typedef const DIPROPSTRING *LPCDIPROPSTRING;
+
 /* special property GUIDs */
 #ifdef __cplusplus
 #define MAKEDIPROP(prop)	(*(const GUID *)(prop))
@@ -755,6 +761,7 @@ typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
 
 #define DIPROP_CALIBRATION	MAKEDIPROP(11)
 #define DIPROP_GUIDANDPATH	MAKEDIPROP(12)
+#define DIPROP_KEYNAME          MAKEDIPROP(20)
 
 typedef struct DIDEVCAPS_DX3 {
     DWORD	dwSize;




More information about the wine-cvs mailing list