HRESULT WINAPI DINPUT_DllGetClassObject(REFCLSID rclsid, REFIID riid,\r
LPVOID *ppv)\r
{\r
- TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);\r
+ TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);\r
if ( IsEqualCLSID( &IID_IClassFactory, riid ) ) {\r
*ppv = (LPVOID)&DINPUT_CF;\r
IClassFactory_AddRef((IClassFactory*)*ppv);\r
return S_OK;\r
}\r
\r
- FIXME("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);\r
+ FIXME("(%s,%s,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);\r
return CLASS_E_CLASSNOTAVAILABLE;\r
}\r
return FALSE;\r
}\r
\r
- if ((dwDevType==0) || (GET_DIDEVICE_TYPE(dwDevType)==DIDEVTYPE_JOYSTICK)) {\r
+ if ((dwDevType == 0) ||\r
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||\r
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {\r
/* check whether we have a joystick */\r
sprintf(dev, "%s%d", JOYDEV, id);\r
if ((fd = open(dev,O_RDONLY)) < 0) {\r
return FALSE;\r
}\r
\r
- if ((dwDevType==0) || (GET_DIDEVICE_TYPE(dwDevType)==DIDEVTYPE_JOYSTICK)) {\r
+ if ((dwDevType == 0) ||\r
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||\r
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))) {\r
/* check whether we have a joystick */\r
sprintf(dev, "%s%d", JOYDEV, id);\r
if ((fd = open(dev,O_RDONLY)) < 0) {\r
\r
newDevice->devcaps.dwSize = sizeof(newDevice->devcaps);\r
newDevice->devcaps.dwFlags = DIDC_ATTACHED;\r
- newDevice->devcaps.dwDevType = DIDEVTYPE_JOYSTICK;\r
+ if (newDevice->dinput->version >= 8)\r
+ newDevice->devcaps.dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);\r
+ else\r
+ newDevice->devcaps.dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);\r
newDevice->devcaps.dwFFSamplePeriod = 0;\r
newDevice->devcaps.dwFFMinTimeResolution = 0;\r
newDevice->devcaps.dwFirmwareRevision = 0;\r
FAILED:\r
hr = DIERR_OUTOFMEMORY;\r
FAILED1:\r
- if (newDevice->axis_map)\r
- HeapFree(GetProcessHeap(),0,newDevice->axis_map);\r
- if (newDevice->name)\r
- HeapFree(GetProcessHeap(),0,newDevice->name);\r
- if (newDevice->props)\r
- HeapFree(GetProcessHeap(),0,newDevice->props);\r
- if (newDevice->user_df->rgodf)\r
- HeapFree(GetProcessHeap(),0,newDevice->user_df->rgodf);\r
- if (newDevice->user_df)\r
- HeapFree(GetProcessHeap(),0,newDevice->user_df);\r
- if (newDevice)\r
- HeapFree(GetProcessHeap(),0,newDevice);\r
+ HeapFree(GetProcessHeap(),0,newDevice->axis_map);\r
+ HeapFree(GetProcessHeap(),0,newDevice->name);\r
+ HeapFree(GetProcessHeap(),0,newDevice->props);\r
+ HeapFree(GetProcessHeap(),0,newDevice->user_df->rgodf);\r
+ HeapFree(GetProcessHeap(),0,newDevice->user_df);\r
+ HeapFree(GetProcessHeap(),0,newDevice);\r
*pdev = 0;\r
\r
return hr;\r
return ref;\r
\r
/* Free the device name */\r
- if (This->name)\r
- HeapFree(GetProcessHeap(),0,This->name);\r
+ HeapFree(GetProcessHeap(),0,This->name);\r
\r
/* Free the axis map */\r
- if (This->axis_map)\r
- HeapFree(GetProcessHeap(),0,This->axis_map);\r
+ HeapFree(GetProcessHeap(),0,This->axis_map);\r
\r
/* Free the data queue */\r
- if (This->data_queue != NULL)\r
- HeapFree(GetProcessHeap(),0,This->data_queue);\r
+ HeapFree(GetProcessHeap(),0,This->data_queue);\r
\r
/* Free the DataFormat */\r
HeapFree(GetProcessHeap(), 0, This->user_df->rgodf);\r
\r
FAILED:\r
WARN("out of memory\n");\r
- if (new_props)\r
- HeapFree(GetProcessHeap(),0,new_props);\r
- if (new_rgodf)\r
- HeapFree(GetProcessHeap(),0,new_rgodf);\r
- if (new_df)\r
- HeapFree(GetProcessHeap(),0,new_df);\r
+ HeapFree(GetProcessHeap(),0,new_props);\r
+ HeapFree(GetProcessHeap(),0,new_rgodf);\r
+ HeapFree(GetProcessHeap(),0,new_df);\r
return DIERR_OUTOFMEMORY;\r
}\r
\r
pdidi->guidInstance = GUID_Joystick;\r
pdidi->guidProduct = DInput_Wine_Joystick_GUID;\r
/* we only support traditional joysticks for now */\r
- if (This->dinput->version >= 8)\r
- pdidi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);\r
- else\r
- pdidi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);\r
+ pdidi->dwDevType = This->devcaps.dwDevType;\r
strcpy(pdidi->tszInstanceName, "Joystick");\r
strcpy(pdidi->tszProductName, This->name);\r
if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3A)) {\r
pdidi->guidInstance = GUID_Joystick;\r
pdidi->guidProduct = DInput_Wine_Joystick_GUID;\r
/* we only support traditional joysticks for now */\r
- if (This->dinput->version >= 8)\r
- pdidi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);\r
- else\r
- pdidi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);\r
+ pdidi->dwDevType = This->devcaps.dwDevType;\r
MultiByteToWideChar(CP_ACP, 0, "Joystick", -1, pdidi->tszInstanceName, MAX_PATH);\r
MultiByteToWideChar(CP_ACP, 0, This->name, -1, pdidi->tszProductName, MAX_PATH);\r
if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3W)) {\r
if (id != 0)\r
return FALSE;\r
\r
- if ((dwDevType != 0) && (GET_DIDEVICE_TYPE(dwDevType) != DIDEVTYPE_JOYSTICK))\r
- return FALSE;\r
+ if (!((dwDevType == 0) ||\r
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||\r
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))\r
+ return FALSE;\r
\r
if (dwFlags & DIEDFL_FORCEFEEDBACK)\r
return FALSE;\r
if (id != 0)\r
return FALSE;\r
\r
- if ((dwDevType != 0) && (GET_DIDEVICE_TYPE(dwDevType) != DIDEVTYPE_JOYSTICK))\r
- return FALSE;\r
+ if (!((dwDevType == 0) ||\r
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version < 8)) ||\r
+ (((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 8))))\r
+ return FALSE;\r
\r
if (dwFlags & DIEDFL_FORCEFEEDBACK)\r
return FALSE;\r
lpddi->guidProduct = DInput_Wine_Joystick_GUID;\r
\r
lpddi->guidFFDriver = GUID_NULL;\r
- lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL<<8);\r
+ if (version >= 8)\r
+ lpddi->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);\r
+ else\r
+ lpddi->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);\r
\r
MultiByteToWideChar(CP_ACP, 0, "Joystick", -1, lpddi->tszInstanceName, MAX_PATH);\r
/* ioctl JSIOCGNAME(len) */\r
return ref;\r
\r
/* Free the data queue */\r
- if (This->data_queue != NULL)\r
- HeapFree(GetProcessHeap(),0,This->data_queue);\r
+ HeapFree(GetProcessHeap(),0,This->data_queue);\r
\r
/* Free the DataFormat */\r
HeapFree(GetProcessHeap(), 0, This->df);\r
wasacquired = 0;\r
}\r
lpDIDevCaps->dwFlags = DIDC_ATTACHED;\r
- lpDIDevCaps->dwDevType = DIDEVTYPE_JOYSTICK;\r
+ if (This->dinput->version >= 8)\r
+ lpDIDevCaps->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);\r
+ else\r
+ lpDIDevCaps->dwDevType = DIDEVTYPE_JOYSTICK | (DIDEVTYPEJOYSTICK_TRADITIONAL << 8);\r
\r
axes=0;\r
for (i=0;i<ABS_MAX;i++) if (test_bit(This->absbits,i)) axes++;\r
\r
if ((dwDevType == 0) ||\r
((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||\r
- ((dwDevType == DI8DEVTYPE_KEYBOARD) && (version >= 8))) {\r
+ (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {\r
TRACE("Enumerating the Keyboard device\n");\r
\r
fill_keyboard_dideviceinstanceA(lpddi, version);\r
\r
if ((dwDevType == 0) ||\r
((dwDevType == DIDEVTYPE_KEYBOARD) && (version < 8)) ||\r
- ((dwDevType == DI8DEVTYPE_KEYBOARD) && (version >= 8))) {\r
+ (((dwDevType == DI8DEVCLASS_KEYBOARD) || (dwDevType == DI8DEVTYPE_KEYBOARD)) && (version >= 8))) {\r
TRACE("Enumerating the Keyboard device\n");\r
\r
fill_keyboard_dideviceinstanceW(lpddi, version);\r
#endif\r
\r
/* Free the data queue */\r
- if (This->buffer != NULL)\r
- HeapFree(GetProcessHeap(),0,This->buffer);\r
+ HeapFree(GetProcessHeap(),0,This->buffer);\r
\r
DeleteCriticalSection(&(This->crit));\r
\r
LPDIRECTINPUTDEVICE8A iface,\r
LPDIDEVCAPS lpDIDevCaps)\r
{\r
- SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
+ SysKeyboardImpl *This = (SysKeyboardImpl *)iface;\r
+ DIDEVCAPS devcaps;\r
\r
- TRACE("(this=%p,%p)\n",This,lpDIDevCaps);\r
+ TRACE("(this=%p,%p)\n",This,lpDIDevCaps);\r
\r
- if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {\r
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;\r
+ if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && (lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3))) {\r
+ WARN("invalid parameter\n");\r
+ return DIERR_INVALIDPARAM;\r
+ }\r
+ \r
+ devcaps.dwSize = lpDIDevCaps->dwSize;\r
+ devcaps.dwFlags = DIDC_ATTACHED;\r
if (This->dinput->version >= 8)\r
- lpDIDevCaps->dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);\r
+ devcaps.dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);\r
else\r
- lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);\r
- lpDIDevCaps->dwAxes = 0;\r
- lpDIDevCaps->dwButtons = 256;\r
- lpDIDevCaps->dwPOVs = 0;\r
- lpDIDevCaps->dwFFSamplePeriod = 0;\r
- lpDIDevCaps->dwFFMinTimeResolution = 0;\r
- lpDIDevCaps->dwFirmwareRevision = 100;\r
- lpDIDevCaps->dwHardwareRevision = 100;\r
- lpDIDevCaps->dwFFDriverVersion = 0;\r
- } else if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS_DX3)) {\r
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;\r
- lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);\r
- lpDIDevCaps->dwAxes = 0;\r
- lpDIDevCaps->dwButtons = 256;\r
- lpDIDevCaps->dwPOVs = 0;\r
- } else {\r
- WARN("invalid parameter\n");\r
- return DIERR_INVALIDPARAM;\r
- }\r
-\r
- return DI_OK;\r
+ devcaps.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);\r
+ devcaps.dwAxes = 0;\r
+ devcaps.dwButtons = 256;\r
+ devcaps.dwPOVs = 0;\r
+ devcaps.dwFFSamplePeriod = 0;\r
+ devcaps.dwFFMinTimeResolution = 0;\r
+ devcaps.dwFirmwareRevision = 100;\r
+ devcaps.dwHardwareRevision = 100;\r
+ devcaps.dwFFDriverVersion = 0;\r
+\r
+ memcpy(lpDIDevCaps, &devcaps, lpDIDevCaps->dwSize);\r
+ \r
+ return DI_OK;\r
}\r
\r
/******************************************************************************\r
\r
if ((dwDevType == 0) ||\r
((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||\r
- ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) {\r
+ (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {\r
TRACE("Enumerating the mouse device\n");\r
\r
fill_mouse_dideviceinstanceA(lpddi, version);\r
\r
if ((dwDevType == 0) ||\r
((dwDevType == DIDEVTYPE_MOUSE) && (version < 8)) ||\r
- ((dwDevType == DI8DEVTYPE_MOUSE) && (version >= 8))) {\r
+ (((dwDevType == DI8DEVCLASS_POINTER) || (dwDevType == DI8DEVTYPE_MOUSE)) && (version >= 8))) {\r
TRACE("Enumerating the mouse device\n");\r
\r
fill_mouse_dideviceinstanceW(lpddi, version);\r
return ref;\r
\r
/* Free the data queue */\r
- if (This->data_queue != NULL)\r
- HeapFree(GetProcessHeap(),0,This->data_queue);\r
+ HeapFree(GetProcessHeap(),0,This->data_queue);\r
\r
#ifndef __REACTOS__\r
if (This->hook) {\r
/* Only allow mouse events every 10 ms.\r
* This is to allow the cursor to start acceleration before\r
* the warps happen. But if it involves a mouse button event we\r
- * allow it since we don't want to loose the clicks.\r
+ * allow it since we don't want to lose the clicks.\r
*/\r
if (((GetCurrentTime() - last_event) < 10)\r
&& wparam == WM_MOUSEMOVE)\r
\r
switch(wparam) {\r
case WM_LBUTTONDOWN:\r
- GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0xFF,\r
+ GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x80,\r
hook->time, This->dinput->evsequence++);\r
- This->m_state.rgbButtons[0] = 0xFF;\r
+ This->m_state.rgbButtons[0] = 0x80;\r
break;\r
case WM_LBUTTONUP:\r
GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x00,\r
This->m_state.rgbButtons[0] = 0x00;\r
break;\r
case WM_RBUTTONDOWN:\r
- GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0xFF,\r
+ GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x80,\r
hook->time, This->dinput->evsequence++);\r
- This->m_state.rgbButtons[1] = 0xFF;\r
+ This->m_state.rgbButtons[1] = 0x80;\r
break;\r
case WM_RBUTTONUP:\r
GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x00,\r
This->m_state.rgbButtons[1] = 0x00;\r
break;\r
case WM_MBUTTONDOWN:\r
- GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0xFF,\r
+ GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x80,\r
hook->time, This->dinput->evsequence++);\r
- This->m_state.rgbButtons[2] = 0xFF;\r
+ This->m_state.rgbButtons[2] = 0x80;\r
break;\r
case WM_MBUTTONUP:\r
GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x00,\r
LPDIDEVCAPS lpDIDevCaps)\r
{\r
SysMouseImpl *This = (SysMouseImpl *)iface;\r
- \r
+ DIDEVCAPS devcaps;\r
+\r
TRACE("(this=%p,%p)\n",This,lpDIDevCaps);\r
- \r
- if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {\r
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;\r
- if (This->dinput->version >= 8)\r
- lpDIDevCaps->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);\r
- else\r
- lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);\r
- lpDIDevCaps->dwAxes = 3;\r
- lpDIDevCaps->dwButtons = 3;\r
- lpDIDevCaps->dwPOVs = 0;\r
- lpDIDevCaps->dwFFSamplePeriod = 0;\r
- lpDIDevCaps->dwFFMinTimeResolution = 0;\r
- lpDIDevCaps->dwFirmwareRevision = 100;\r
- lpDIDevCaps->dwHardwareRevision = 100;\r
- lpDIDevCaps->dwFFDriverVersion = 0;\r
- } else if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS_DX3)) {\r
- lpDIDevCaps->dwFlags = DIDC_ATTACHED;\r
- lpDIDevCaps->dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);\r
- lpDIDevCaps->dwAxes = 3;\r
- lpDIDevCaps->dwButtons = 3;\r
- lpDIDevCaps->dwPOVs = 0;\r
- } else {\r
+\r
+ if ((lpDIDevCaps->dwSize != sizeof(DIDEVCAPS)) && (lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3))) {\r
WARN("invalid parameter\n");\r
return DIERR_INVALIDPARAM;\r
}\r
+\r
+ devcaps.dwSize = lpDIDevCaps->dwSize;\r
+ devcaps.dwFlags = DIDC_ATTACHED;\r
+ if (This->dinput->version >= 8)\r
+ devcaps.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_TRADITIONAL << 8);\r
+ else\r
+ devcaps.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_TRADITIONAL << 8);\r
+ devcaps.dwAxes = 3;\r
+ devcaps.dwButtons = 3;\r
+ devcaps.dwPOVs = 0;\r
+ devcaps.dwFFSamplePeriod = 0;\r
+ devcaps.dwFFMinTimeResolution = 0;\r
+ devcaps.dwFirmwareRevision = 100;\r
+ devcaps.dwHardwareRevision = 100;\r
+ devcaps.dwFFDriverVersion = 0;\r
+\r
+ memcpy(lpDIDevCaps, &devcaps, lpDIDevCaps->dwSize);\r
\r
return DI_OK;\r
}\r