[DInput] Tribes fix...
Lionel Ulmer
lionel.ulmer at free.fr
Mon Feb 10 16:21:33 CST 2003
Hi all,
With this patch, Tribes1 now likes our DInput driver.
Lionel (who waits for his beer when he will visit Sweden :-) )
Changelog:
Implement EnumObjects for the keyboard device
--
Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
--- ../wine_base/dlls/dinput/device.c Sun Feb 2 12:44:55 2003
+++ dlls/dinput/device.c Mon Feb 10 23:13:41 2003
@@ -102,8 +102,8 @@
void _dump_OBJECTINSTANCEA(DIDEVICEOBJECTINSTANCEA *ddoi) {
if (TRACE_ON(dinput)) {
- DPRINTF(" - enumerating : 0x%08lx - %2ld - 0x%08lx - %s\n",
- ddoi->guidType.Data1, ddoi->dwOfs, ddoi->dwType, ddoi->tszName);
+ DPRINTF(" - enumerating : %s - %2ld - 0x%08lx - %s\n",
+ debugstr_guid(&ddoi->guidType), ddoi->dwOfs, ddoi->dwType, ddoi->tszName);
}
}
--- ../wine_base/dlls/dinput/keyboard/main.c Sat Feb 1 18:04:44 2003
+++ dlls/dinput/keyboard/main.c Mon Feb 10 23:16:39 2003
@@ -166,7 +166,7 @@
EnterCriticalSection(&keyboard_crit);
if (!keyboard_users++)
- keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );
+ keyboard_hook = SetWindowsHookExW( WH_KEYBOARD_LL, KeyboardCallback, DINPUT_instance, 0 );
LeaveCriticalSection(&keyboard_crit);
return newDevice;
@@ -326,6 +326,40 @@
return ret;
}
+static HRESULT WINAPI SysKeyboardAImpl_EnumObjects(
+ LPDIRECTINPUTDEVICE8A iface,
+ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback,
+ LPVOID lpvRef,
+ DWORD dwFlags)
+{
+ ICOM_THIS(SysKeyboardAImpl,iface);
+ DIDEVICEOBJECTINSTANCEA ddoi;
+ int i;
+
+ TRACE("(this=%p,%p,%p,%08lx)\n", This, lpCallback, lpvRef, dwFlags);
+ if (TRACE_ON(dinput)) {
+ DPRINTF(" - flags = ");
+ _dump_EnumObjects_flags(dwFlags);
+ DPRINTF("\n");
+ }
+
+ /* Only the fields till dwFFMaxForce are relevant */
+ memset(&ddoi, 0, sizeof(ddoi));
+ ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
+
+ for (i = 0; i < 256; i++) {
+ /* Report 255 keys :-) */
+ ddoi.guidType = GUID_Key;
+ ddoi.dwOfs = i;
+ ddoi.dwType = DIDFT_MAKEINSTANCE(i) | DIDFT_BUTTON;
+ strcpy(ddoi.tszName, "a"); /* This should be better handled :-/ */
+ _dump_OBJECTINSTANCEA(&ddoi);
+ if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;
+ }
+
+ return DI_OK;
+}
+
static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface);
static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
@@ -412,7 +446,7 @@
lpDIDevCaps->dwFlags = DIDC_ATTACHED;
lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD;
lpDIDevCaps->dwAxes = 0;
- lpDIDevCaps->dwButtons = 0;
+ lpDIDevCaps->dwButtons = 256;
lpDIDevCaps->dwPOVs = 0;
lpDIDevCaps->dwFFSamplePeriod = 0;
lpDIDevCaps->dwFFMinTimeResolution = 0;
@@ -434,7 +468,7 @@
IDirectInputDevice2AImpl_AddRef,
SysKeyboardAImpl_Release,
SysKeyboardAImpl_GetCapabilities,
- IDirectInputDevice2AImpl_EnumObjects,
+ SysKeyboardAImpl_EnumObjects,
IDirectInputDevice2AImpl_GetProperty,
SysKeyboardAImpl_SetProperty,
SysKeyboardAImpl_Acquire,
--- ../wine_base/dlls/dinput/mouse/main.c Sun Feb 2 12:44:55 2003
+++ dlls/dinput/mouse/main.c Mon Feb 10 23:08:33 2003
@@ -874,6 +874,7 @@
}
/* Only the fields till dwFFMaxForce are relevant */
+ memset(&ddoi, 0, sizeof(ddoi));
ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);
/* In a mouse, we have : two relative axis and three buttons */
More information about the wine-patches
mailing list