[PATCH 3/8] dinput: Introduce new dinput_unacquire_window_devices helper.
Rémi Bernon
rbernon at codeweavers.com
Wed Jan 5 07:58:37 CST 2022
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52263
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/dinput/dinput_main.c | 72 +++++++++++++++++++++------------------
1 file changed, 39 insertions(+), 33 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index e2fabfc75f0..c4b41b7b945 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -1204,9 +1204,46 @@ static LRESULT CALLBACK LL_hook_proc( int code, WPARAM wparam, LPARAM lparam )
return skip ? 1 : CallNextHookEx( 0, code, wparam, lparam );
}
-static LRESULT CALLBACK callwndproc_proc( int code, WPARAM wparam, LPARAM lparam )
+static void dinput_unacquire_window_devices( HWND window )
{
struct dinput_device *impl, *next;
+
+ LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_device_list, struct dinput_device, entry )
+ {
+ if (window == impl->win)
+ {
+ TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
+ dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
+ }
+ }
+ LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_mouse_list, struct dinput_device, entry )
+ {
+ if (window == impl->win)
+ {
+ TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
+ dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
+ }
+ }
+ LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_rawmouse_list, struct dinput_device, entry )
+ {
+ if (window == impl->win)
+ {
+ TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
+ dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
+ }
+ }
+ LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_keyboard_list, struct dinput_device, entry )
+ {
+ if (window == impl->win)
+ {
+ TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
+ dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
+ }
+ }
+}
+
+static LRESULT CALLBACK callwndproc_proc( int code, WPARAM wparam, LPARAM lparam )
+{
CWPSTRUCT *msg = (CWPSTRUCT *)lparam;
HWND foreground;
@@ -1217,38 +1254,7 @@ static LRESULT CALLBACK callwndproc_proc( int code, WPARAM wparam, LPARAM lparam
foreground = GetForegroundWindow();
EnterCriticalSection( &dinput_hook_crit );
- LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_device_list, struct dinput_device, entry )
- {
- if (msg->hwnd == impl->win && msg->hwnd != foreground)
- {
- TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
- dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
- }
- }
- LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_mouse_list, struct dinput_device, entry )
- {
- if (msg->hwnd == impl->win && msg->hwnd != foreground)
- {
- TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
- dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
- }
- }
- LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_rawmouse_list, struct dinput_device, entry )
- {
- if (msg->hwnd == impl->win && msg->hwnd != foreground)
- {
- TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
- dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
- }
- }
- LIST_FOR_EACH_ENTRY_SAFE( impl, next, &acquired_keyboard_list, struct dinput_device, entry )
- {
- if (msg->hwnd == impl->win && msg->hwnd != foreground)
- {
- TRACE( "%p window is not foreground - unacquiring %p\n", impl->win, impl );
- dinput_device_internal_unacquire( &impl->IDirectInputDevice8W_iface );
- }
- }
+ if (msg->hwnd != foreground) dinput_unacquire_window_devices( msg->hwnd );
LeaveCriticalSection( &dinput_hook_crit );
return CallNextHookEx( 0, code, wparam, lparam );
--
2.34.1
More information about the wine-devel
mailing list