Module: wine Branch: master Commit: 9441d898f78189af4d61368d955f29417b01d0c3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9441d898f78189af4d61368d95...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Tue Jan 18 21:06:37 2011 -0700
dinput: Make newly created device append itself to Direct Input's list.
---
dlls/dinput/dinput_main.c | 14 -------------- dlls/dinput/joystick_linux.c | 4 ++++ dlls/dinput/joystick_linuxinput.c | 5 +++++ dlls/dinput/joystick_osx.c | 4 ++++ dlls/dinput/keyboard.c | 5 +++++ dlls/dinput/mouse.c | 5 +++++ 6 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 4eb52b3..59b81e8 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -506,14 +506,7 @@ static HRESULT WINAPI IDirectInput7AImpl_CreateDeviceEx(LPDIRECTINPUT7A iface, R
if (!dinput_devices[i]->create_deviceA) continue; if ((ret = dinput_devices[i]->create_deviceA(This, rguid, riid, (LPDIRECTINPUTDEVICEA*) pvOut)) == DI_OK) - { - IDirectInputDeviceImpl *dev = impl_from_IDirectInputDevice8A(*pvOut); - - EnterCriticalSection( &This->crit ); - list_add_tail( &This->devices_list, &dev->entry ); - LeaveCriticalSection( &This->crit ); return DI_OK; - }
if (ret == DIERR_NOINTERFACE) ret_value = DIERR_NOINTERFACE; @@ -544,14 +537,7 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R
if (!dinput_devices[i]->create_deviceW) continue; if ((ret = dinput_devices[i]->create_deviceW(This, rguid, riid, (LPDIRECTINPUTDEVICEW*) pvOut)) == DI_OK) - { - IDirectInputDeviceImpl *dev = impl_from_IDirectInputDevice8W(*pvOut); - - EnterCriticalSection( &This->crit ); - list_add_tail( &This->devices_list, &dev->entry ); - LeaveCriticalSection( &This->crit ); return DI_OK; - }
if (ret == DIERR_NOINTERFACE) ret_value = DIERR_NOINTERFACE; diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index 736b16c..8348310 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -390,6 +390,10 @@ static HRESULT alloc_device(REFGUID rguid, IDirectInputImpl *dinput,
IDirectInput_AddRef(&newDevice->generic.base.dinput->IDirectInput7A_iface);
+ EnterCriticalSection(&dinput->crit); + list_add_tail(&dinput->devices_list, &newDevice->generic.base.entry); + LeaveCriticalSection(&dinput->crit); + newDevice->generic.devcaps.dwSize = sizeof(newDevice->generic.devcaps); newDevice->generic.devcaps.dwFlags = DIDC_ATTACHED; if (newDevice->generic.base.dinput->dwVersion >= 0x0800) diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c index 3d8ee19..088f419 100644 --- a/dlls/dinput/joystick_linuxinput.c +++ b/dlls/dinput/joystick_linuxinput.c @@ -525,6 +525,11 @@ static JoystickImpl *alloc_device(REFGUID rguid, IDirectInputImpl *dinput, unsig newDevice->generic.devcaps.dwFlags |= DIDC_FORCEFEEDBACK;
IDirectInput_AddRef(&newDevice->generic.base.dinput->IDirectInput7A_iface); + + EnterCriticalSection(&dinput->crit); + list_add_tail(&dinput->devices_list, &newDevice->generic.base.entry); + LeaveCriticalSection(&dinput->crit); + return newDevice;
failed: diff --git a/dlls/dinput/joystick_osx.c b/dlls/dinput/joystick_osx.c index 19ff6a3..2fa0bb9 100644 --- a/dlls/dinput/joystick_osx.c +++ b/dlls/dinput/joystick_osx.c @@ -821,6 +821,10 @@ static HRESULT alloc_device(REFGUID rguid, IDirectInputImpl *dinput,
IDirectInput_AddRef(&newDevice->generic.base.dinput->IDirectInput7A_iface);
+ EnterCriticalSection(&dinput->crit); + list_add_tail(&dinput->devices_list, &newDevice->generic.base.entry); + LeaveCriticalSection(&dinput->crit); + newDevice->generic.devcaps.dwSize = sizeof(newDevice->generic.devcaps); newDevice->generic.devcaps.dwFlags = DIDC_ATTACHED; if (newDevice->generic.base.dinput->dwVersion >= 0x0800) diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 6957662..f190677 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -255,6 +255,11 @@ static SysKeyboardImpl *alloc_device(REFGUID rguid, IDirectInputImpl *dinput)
newDevice->base.data_format.wine_df = df; IDirectInput_AddRef(&newDevice->base.dinput->IDirectInput7A_iface); + + EnterCriticalSection(&dinput->crit); + list_add_tail(&dinput->devices_list, &newDevice->base.entry); + LeaveCriticalSection(&dinput->crit); + return newDevice;
failed: diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 0bdec82..2aa0574 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -242,6 +242,11 @@ static SysMouseImpl *alloc_device(REFGUID rguid, IDirectInputImpl *dinput)
newDevice->base.data_format.wine_df = df; IDirectInput_AddRef(&newDevice->base.dinput->IDirectInput7A_iface); + + EnterCriticalSection(&dinput->crit); + list_add_tail(&dinput->devices_list, &newDevice->base.entry); + LeaveCriticalSection(&dinput->crit); + return newDevice;
failed: