Commit graph

284 commits

Author SHA1 Message Date
Rémi Bernon 24ad74ee26 server: Send emulated mouse messages on primary pointer updates. 2024-03-06 19:20:09 +01:00
Rémi Bernon 40b65e28a7 server: Continuously send pointer update messages while it's down. 2024-03-06 19:20:09 +01:00
Rémi Bernon d8b8ac85eb server: Generate WM_POINTERENTER / WM_POINTERLEAVE messages. 2024-03-06 19:20:09 +01:00
Rémi Bernon 5b833c83be server: Stop waiting on LL-hooks for non-injected input. 2024-03-06 19:19:47 +01:00
Rémi Bernon 61d1c18957 server: Add support for sending and receiving WM_POINTER* messages. 2024-03-05 20:50:07 +01:00
Rémi Bernon bb5f0e122f win32u: Use a custom struct hid_input for NtUserSendHardwareInput. 2024-03-05 20:50:06 +01:00
Rémi Bernon 9591a36ee8 server: Dispatch rawinput messages using the rawinput process list. 2024-02-28 19:51:20 +01:00
Rémi Bernon c43b1ecbc3 server: Keep a list of processes that can receive rawinput messages. 2024-02-28 19:51:20 +01:00
Rémi Bernon 496eed7aaf server: Send hardware input to the visible input desktop.
When hwnd is specified, it is because it received a direct host input,
so switch the input desktop to match the one that is receiving it.

We don't validate that the sending thread uses the same desktop as the
target window: it may not even be the case for drivers with a separate
thread that listens on input events.
2024-02-28 19:51:20 +01:00
Rémi Bernon 1664ad7d50 server: Fix rawinput buffer sizes and alignment on WoW64. 2024-02-09 11:14:07 +01:00
Rémi Bernon 2eb8950392 server: Move rawinput message conversion from win32u.
Appending the entire RAWMOUSE / RAWKEYBOARD / RAWHID + report structs
after the hardware message data, instead of using a custom intermediate
structure.
2024-02-09 11:14:07 +01:00
Rémi Bernon c8bf3ba2da server: Stop using hardware_msg_data in rawinput_message. 2024-02-08 23:31:24 +01:00
Rémi Bernon f86cca3897 server: Stop using union rawinput in hw_input_t. 2024-02-08 23:31:24 +01:00
Rémi Bernon c62ca2e1aa server: Combine HID usage page and usage together. 2024-02-08 23:31:24 +01:00
Rémi Bernon d1789fbb40 server: Change desktop cursor only when inside the thread's windows.
Getting rid of the desktop cursor handle at the same time.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55961
2023-12-21 18:39:04 +01:00
Rémi Bernon 9dc80b13be server: Introduce a new get_desktop_cursor_thread_input helper.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55961
2023-12-21 18:39:04 +01:00
Brendan McGrath fa873804fb server: Always release internal hardware messages. 2023-12-21 18:38:59 +01:00
Rémi Bernon 2e90c01696 server: Ignore the capture window wrt desktop cursor changes.
This partially reverts commit c3dcf1e269.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55306
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56046
2023-12-18 22:14:57 +01:00
Rémi Bernon bb496ea847 server: Always queue mouse messages delivered to another window.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55306
2023-12-18 22:14:57 +01:00
Rémi Bernon c3dcf1e269 server: Use the capture window as cursor window if it is set.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55306
2023-12-15 21:10:17 +01:00
Rémi Bernon 82642e34e1 server: Update the desktop cursor position / window on click.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55306
2023-12-15 21:10:17 +01:00
Rémi Bernon 19ad5bd598 server: Peek wine internal driver messages regardless of filter.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55774
2023-12-13 19:13:01 +01:00
Rémi Bernon 2581e0b3ea server: Send WM_WINE_SETCURSOR with the thread input cursor handle.
Which may be different from the last desktop cursor handle.

This makes the behavior better match the old winex11 behavior, which queried
the current thread input cursor handle on every mouse move to sync it with X11,
although it contradicts MSDN documentation which states that the cursor handle
is global.

This fixes the X11 cursor being visible in "Deus Ex: GOTY Edition".
2023-10-11 20:30:04 +02:00
Rémi Bernon ab9b99c4a5 server: Pass set_cursor flags in WM_WINE_CLIPCURSOR wparam.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55047
2023-06-16 21:35:58 +02:00
Rémi Bernon 25906eedd8 server: Introduce and send new WM_WINE_SETCURSOR hardware message. 2023-06-13 22:10:56 +02:00
Rémi Bernon b04ef19930 server: Keep track of the current desktop cursor handle. 2023-06-13 22:10:56 +02:00
Rémi Bernon 10f5ff7f06 server: Update desktop cursor window when cursor pos changes. 2023-06-13 22:10:56 +02:00
Rémi Bernon 6ac82b2a24 server: Use hardware message category when checking filter. 2023-06-12 21:21:41 +02:00
Rémi Bernon 3ae2dc4648 server: Pass the message code to get_hardware_msg_bit. 2023-06-12 21:21:41 +02:00
Rémi Bernon 5ebb1ed132 server: Queue a hardware WM_WINE_CLIPCURSOR message to the foreground thread.
When applying a new cursor clipping rect, or to the previous foreground
thread when foreground changes, to notify it of the cursor clipping rect
being reset.
2023-06-07 22:48:27 +02:00
Rémi Bernon bd06c87b5b server: Use a separate helper to merge WM_MOUSEMOVE messages. 2023-06-07 22:48:27 +02:00
Rémi Bernon 2101d4d6ad server: Use the helper to reset the clip rect when the desktop size changes. 2023-06-07 22:48:27 +02:00
Rémi Bernon 88cbc08b7f server: Don't reset cursor clipping on foreground thread exit.
It will be reset on foreground input changes, when it happens.
2023-06-02 21:08:34 +02:00
Rémi Bernon 900ba82654 win32u: Use WM_WINE_CLIPCURSOR / TRUE for empty clipping rect. 2023-05-31 22:50:10 +02:00
Rémi Bernon 8f9610fdff server: Use get_hardware_msg_bit consistently to classify messages. 2023-05-31 21:19:35 +02:00
Rémi Bernon 26c6386de9 server: Move set_cursor desktop local variable to wider scope. 2023-05-30 12:25:25 +02:00
Rémi Bernon 61dbfea452 server: Assume the internal clip message to be WM_WINE_CLIPCURSOR. 2023-05-30 12:25:25 +02:00
Henry Goffin 0e85ac17a4 win32u: Invalidate all cached keys after input.
This patch addresses an issue in Second Life and potentially other
multi-threaded applications which process WM_KEYDOWN in one thread
and then verify that the key is "still down" with GetAsyncKeyState
from another thread. Wine uses a per-thread key cache, resulting
in inconsistent views of key status. Caches are now invalidated
when an input event is injected by the driver or via SendInput.
2023-03-02 10:20:01 +01:00
Aric Stewart c937155ff6 server: Take into account extra_size in get_rawinput_buffer. 2022-11-17 21:51:42 +01:00
Rémi Bernon 9804210966 server: Remove no-op raw_msg.foreground release.
It's previously set to NULL and never updated.
2022-11-14 13:17:31 +01:00
Rémi Bernon 28aa321f36 server: Avoid reallocating rawinput device array with zero size.
It actually frees the pointer.
2022-08-08 18:50:54 +02:00
Rémi Bernon a2395ecf96 server: Use the client provided rawinput registered device array. 2022-07-28 20:08:58 +02:00
Rémi Bernon 1587e9db88 win32u: Implement NtUserGetRegisteredRawInputDevices on the client side. 2022-07-28 20:08:58 +02:00
Rémi Bernon c57eda2432 server: Avoid using pointer value after realloc.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-06-15 11:57:08 +02:00
Rémi Bernon 68b6e876f0 server: Create message queue and thread input in get_key_state.
This removes the fallback to desktop async keystate and uses instead the
keystate synchronization logic in all cases.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 13:53:29 +02:00
Rémi Bernon f076e5f854 server: Lock thread input keystate whenever it is modified.
And synchronize it with desktop async keystate, on GetKeyState calls,
if it is not locked yet.

Based on a patch from Sebastian Lackner <sebastian@fds-team.de>.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 13:53:26 +02:00
Rémi Bernon ff74d5c244 server: Create message queue and thread input in set_key_state.
This marks one test case as todo, but it was an outlier, and the 'X' key
state is now wrong in all cases. Overall this makes the tests results
more coherent.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-26 13:53:18 +02:00
Rémi Bernon 095204a9f3 server: Return error when hardware message is too large.
So that the client allocates a larger receive buffer when needed and not
trigger the assert below when setting the reply message data.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-12 17:27:50 +01:00
Ziqing Hui 77f1658393 server: Also queue hotkey message for WM_SYSKEYDOWN.
ALT and F10 key generate WM_SYSKEYDOWN message.
They should also have the ability to queue hotkey message.

Signed-off-by: Ziqing Hui <zhui@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-02 17:09:39 +01:00
Huw Davies 6fdae1979b configure: Stop checking for poll.h and sys/poll.h - always use poll.h.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-31 17:56:54 +01:00