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