Vitaliy Margolen : dinput: Make newly created device append itself to Direct Input's list.

Alexandre Julliard julliard at winehq.org
Wed Jan 19 11:46:13 CST 2011


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

Author: Vitaliy Margolen <wine-patches at 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:




More information about the wine-cvs mailing list