mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against 7eb72b7bb3d3ea771efddcb5273e8a69456548ff.
This commit is contained in:
parent
88e86a23c0
commit
87a5dcecb7
@ -1,4 +1,4 @@
|
||||
From ec18233558b62aa736b5ecf20d2f7487e2823286 Mon Sep 17 00:00:00 2001
|
||||
From 9b9b36ccc66866ba142ce1f0d12190025ac2e7f7 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 7 Jun 2018 20:09:59 -0500
|
||||
Subject: [PATCH] server: Create server objects for eventfd-based
|
||||
@ -15,10 +15,10 @@ Subject: [PATCH] server: Create server objects for eventfd-based
|
||||
create mode 100644 server/esync.h
|
||||
|
||||
diff --git a/server/Makefile.in b/server/Makefile.in
|
||||
index 3b9446fe224..776faec63e4 100644
|
||||
index ae502dbf17d..b164193ef20 100644
|
||||
--- a/server/Makefile.in
|
||||
+++ b/server/Makefile.in
|
||||
@@ -11,6 +11,7 @@ C_SRCS = \
|
||||
@@ -11,6 +11,7 @@ SOURCES = \
|
||||
debugger.c \
|
||||
device.c \
|
||||
directory.c \
|
||||
@ -381,7 +381,7 @@ index 00000000000..00f9e638d83
|
||||
+extern int do_esync(void);
|
||||
+void esync_init(void);
|
||||
diff --git a/server/main.c b/server/main.c
|
||||
index a134d811d82..3436b0871b4 100644
|
||||
index ddda5f4e86e..5062d0999fa 100644
|
||||
--- a/server/main.c
|
||||
+++ b/server/main.c
|
||||
@@ -34,6 +34,7 @@
|
||||
@ -403,10 +403,10 @@ index a134d811d82..3436b0871b4 100644
|
||||
set_current_time();
|
||||
init_scheduler();
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 99df502e398..9e15ada5bd0 100644
|
||||
index e86d3414247..03bc0aeb11e 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3777,7 +3777,6 @@ struct handle_info
|
||||
@@ -3867,7 +3867,6 @@ struct handle_info
|
||||
obj_handle_t handle; /* process handle */
|
||||
@END
|
||||
|
||||
@ -414,11 +414,10 @@ index 99df502e398..9e15ada5bd0 100644
|
||||
/* Iterate thread list for process */
|
||||
@REQ(get_next_thread)
|
||||
obj_handle_t process; /* process handle */
|
||||
@@ -3788,3 +3787,27 @@ struct handle_info
|
||||
@REPLY
|
||||
@@ -3879,6 +3878,29 @@ struct handle_info
|
||||
obj_handle_t handle; /* next thread handle */
|
||||
@END
|
||||
+
|
||||
|
||||
+enum esync_type
|
||||
+{
|
||||
+ ESYNC_SEMAPHORE = 1,
|
||||
@ -442,6 +441,14 @@ index 99df502e398..9e15ada5bd0 100644
|
||||
+ int type; /* actual type (may be different for events) */
|
||||
+ unsigned int shm_idx;
|
||||
+@END
|
||||
|
||||
/* Setup keyboard auto-repeat */
|
||||
@REQ(set_keyboard_repeat)
|
||||
@@ -3888,3 +3910,4 @@ struct handle_info
|
||||
@REPLY
|
||||
int enable; /* previous state of auto-repeat enable */
|
||||
@END
|
||||
+
|
||||
--
|
||||
2.38.1
|
||||
2.43.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 193c44f510beed365640159cbdaeb0cb8186a7b0 Mon Sep 17 00:00:00 2001
|
||||
From 2f23f37d5a1ba0d59d367729d96285ac7c470e8d Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 8 Jun 2018 18:55:49 -0500
|
||||
Subject: [PATCH] server: Add a request to get the eventfd file descriptor
|
||||
@ -6,14 +6,14 @@ Subject: [PATCH] server: Add a request to get the eventfd file descriptor
|
||||
|
||||
---
|
||||
server/esync.c | 37 +++++++++++++++++++++++++++++++++++++
|
||||
server/protocol.def | 8 ++++++++
|
||||
2 files changed, 45 insertions(+)
|
||||
server/protocol.def | 9 ++++++++-
|
||||
2 files changed, 45 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index d646cb52bc2..cfbbcf55c48 100644
|
||||
index f95dc5a391f..85f7f1e060f 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -335,3 +335,40 @@ DECL_HANDLER(create_esync)
|
||||
@@ -333,3 +333,40 @@ DECL_HANDLER(create_esync)
|
||||
|
||||
if (root) release_object( root );
|
||||
}
|
||||
@ -55,14 +55,13 @@ index d646cb52bc2..cfbbcf55c48 100644
|
||||
+ release_object( obj );
|
||||
+}
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 552d504cc8d..9062a5020c2 100644
|
||||
index 03bc0aeb11e..4ab6b97ba93 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3689,3 +3689,11 @@ enum esync_type
|
||||
int type; /* actual type (may be different for events) */
|
||||
@@ -3902,6 +3902,14 @@ enum esync_type
|
||||
unsigned int shm_idx;
|
||||
@END
|
||||
+
|
||||
|
||||
+/* Retrieve the esync fd for an object. */
|
||||
+@REQ(get_esync_fd)
|
||||
+ obj_handle_t handle; /* handle to the object */
|
||||
@ -70,6 +69,15 @@ index 552d504cc8d..9062a5020c2 100644
|
||||
+ int type;
|
||||
+ unsigned int shm_idx;
|
||||
+@END
|
||||
+
|
||||
/* Setup keyboard auto-repeat */
|
||||
@REQ(set_keyboard_repeat)
|
||||
int enable; /* whether to enable auto-repeat */
|
||||
@@ -3910,4 +3918,3 @@ enum esync_type
|
||||
@REPLY
|
||||
int enable; /* previous state of auto-repeat enable */
|
||||
@END
|
||||
-
|
||||
--
|
||||
2.28.0
|
||||
2.43.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d7b142aa0b60d99bd225849439cd49119a6e3e80 Mon Sep 17 00:00:00 2001
|
||||
From 465a4772356f406552cc20bddec820a4e197b667 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 16:11:23 -0500
|
||||
Subject: [PATCH] server, ntdll: Implement message waits.
|
||||
@ -6,8 +6,8 @@ Subject: [PATCH] server, ntdll: Implement message waits.
|
||||
---
|
||||
dlls/ntdll/unix/esync.c | 51 +++++++++++++++++++++++++++++++++++++++--
|
||||
server/protocol.def | 5 ++++
|
||||
server/queue.c | 21 +++++++++++++++++
|
||||
3 files changed, 75 insertions(+), 2 deletions(-)
|
||||
server/queue.c | 22 ++++++++++++++++++
|
||||
3 files changed, 76 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
|
||||
index 399930c444b..06d7d8babc6 100644
|
||||
@ -105,23 +105,25 @@ index 399930c444b..06d7d8babc6 100644
|
||||
{
|
||||
struct stat st;
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index a2700b043ba..fb290c7964c 100644
|
||||
index 4ab6b97ba93..d28c1a6f5fa 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3907,3 +3907,8 @@ enum esync_type
|
||||
int type;
|
||||
@@ -3910,6 +3910,10 @@ enum esync_type
|
||||
unsigned int shm_idx;
|
||||
@END
|
||||
+
|
||||
+/* Notify the server that we are doing a message wait or done with one. */
|
||||
|
||||
+@REQ(esync_msgwait)
|
||||
+ int in_msgwait; /* are we in a message wait? */
|
||||
+@END
|
||||
+
|
||||
/* Setup keyboard auto-repeat */
|
||||
@REQ(set_keyboard_repeat)
|
||||
int enable; /* whether to enable auto-repeat */
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index 936a6309683..fc13b1cf6eb 100644
|
||||
index 1568355104c..b68774d7524 100644
|
||||
--- a/server/queue.c
|
||||
+++ b/server/queue.c
|
||||
@@ -148,6 +148,7 @@ struct msg_queue
|
||||
@@ -149,6 +149,7 @@ struct msg_queue
|
||||
int keystate_lock; /* owns an input keystate lock */
|
||||
unsigned int ignore_post_msg; /* ignore post messages newer than this unique id */
|
||||
int esync_fd; /* esync file descriptor (signalled on message) */
|
||||
@ -129,7 +131,7 @@ index 936a6309683..fc13b1cf6eb 100644
|
||||
};
|
||||
|
||||
struct hotkey
|
||||
@@ -321,6 +322,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
|
||||
@@ -322,6 +323,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
|
||||
queue->keystate_lock = 0;
|
||||
queue->ignore_post_msg = 0;
|
||||
queue->esync_fd = -1;
|
||||
@ -137,7 +139,7 @@ index 936a6309683..fc13b1cf6eb 100644
|
||||
list_init( &queue->send_result );
|
||||
list_init( &queue->callback_result );
|
||||
list_init( &queue->pending_timers );
|
||||
@@ -1108,6 +1110,10 @@ static int is_queue_hung( struct msg_queue *queue )
|
||||
@@ -1115,6 +1117,10 @@ static int is_queue_hung( struct msg_queue *queue )
|
||||
if (get_wait_queue_thread(entry)->queue == queue)
|
||||
return 0; /* thread is waiting on queue -> not hung */
|
||||
}
|
||||
@ -148,11 +150,10 @@ index 936a6309683..fc13b1cf6eb 100644
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3735,3 +3741,18 @@ DECL_HANDLER(update_rawinput_devices)
|
||||
release_object( desktop );
|
||||
@@ -3923,6 +3929,21 @@ DECL_HANDLER(update_rawinput_devices)
|
||||
}
|
||||
}
|
||||
+
|
||||
|
||||
+DECL_HANDLER(esync_msgwait)
|
||||
+{
|
||||
+ struct msg_queue *queue = get_current_queue();
|
||||
@ -167,6 +168,15 @@ index 936a6309683..fc13b1cf6eb 100644
|
||||
+ if (queue->fd)
|
||||
+ set_fd_events( queue->fd, req->in_msgwait ? POLLIN : 0 );
|
||||
+}
|
||||
+
|
||||
DECL_HANDLER(set_keyboard_repeat)
|
||||
{
|
||||
struct desktop *desktop;
|
||||
@@ -3941,3 +3962,4 @@ DECL_HANDLER(set_keyboard_repeat)
|
||||
|
||||
release_object( desktop );
|
||||
}
|
||||
+
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2d3957bbd6fb87e30bde05713c97ad42d57b3cf1 Mon Sep 17 00:00:00 2001
|
||||
From 5f5cfac7099cf4e5be912f07a66665f8217f57f3 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 17:17:31 -0500
|
||||
Subject: [PATCH] ntdll, server: Implement alertable waits.
|
||||
@ -15,10 +15,10 @@ Subject: [PATCH] ntdll, server: Implement alertable waits.
|
||||
8 files changed, 109 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
|
||||
index d1a282c65e9..2a7c3865617 100644
|
||||
index 2844f9f760c..aeeea1731ce 100644
|
||||
--- a/dlls/ntdll/unix/esync.c
|
||||
+++ b/dlls/ntdll/unix/esync.c
|
||||
@@ -607,17 +607,42 @@ static void update_grabbed_object( struct esync *obj )
|
||||
@@ -599,17 +599,42 @@ static void update_grabbed_object( struct esync *obj )
|
||||
static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEAN wait_any,
|
||||
BOOLEAN alertable, const LARGE_INTEGER *timeout )
|
||||
{
|
||||
@ -62,7 +62,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
NtQuerySystemTime( &now );
|
||||
if (timeout)
|
||||
{
|
||||
@@ -656,6 +681,8 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
@@ -648,6 +673,8 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
|
||||
if (msgwait)
|
||||
TRACE(" or driver events");
|
||||
@ -71,7 +71,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
|
||||
if (!timeout)
|
||||
TRACE(", timeout = INFINITE.\n");
|
||||
@@ -692,12 +719,27 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
@@ -684,12 +711,27 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
fds[i].fd = obj ? obj->fd : -1;
|
||||
fds[i].events = POLLIN;
|
||||
}
|
||||
@ -100,7 +100,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
/* Find out which object triggered the wait. */
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
@@ -771,6 +813,14 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
@@ -763,6 +805,14 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEA
|
||||
tryagain:
|
||||
/* First step: try to poll on each object in sequence. */
|
||||
fds[0].events = POLLIN;
|
||||
@ -115,7 +115,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
struct esync *obj = objs[i];
|
||||
@@ -786,9 +836,11 @@ tryagain:
|
||||
@@ -778,9 +828,11 @@ tryagain:
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
|
||||
if (fds[0].revents & (POLLHUP | POLLERR | POLLNVAL))
|
||||
{
|
||||
@@ -804,10 +856,12 @@ tryagain:
|
||||
@@ -796,10 +848,12 @@ tryagain:
|
||||
fds[i].fd = objs[i] ? objs[i]->fd : -1;
|
||||
fds[i].events = POLLIN;
|
||||
}
|
||||
@ -143,7 +143,7 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
{
|
||||
/* Quick, grab everything. */
|
||||
for (i = 0; i < count; i++)
|
||||
@@ -873,6 +927,19 @@ err:
|
||||
@@ -865,6 +919,19 @@ err:
|
||||
ERR("ppoll failed: %s\n", strerror(errno));
|
||||
return errno_to_status( errno );
|
||||
}
|
||||
@ -164,10 +164,10 @@ index d1a282c65e9..2a7c3865617 100644
|
||||
|
||||
/* We need to let the server know when we are doing a message wait, and when we
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index c8c959029d0..1d40afcb569 100644
|
||||
index b278ab8df84..a3f0368b731 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -52,6 +52,7 @@ struct ntdll_thread_data
|
||||
@@ -93,6 +93,7 @@ struct ntdll_thread_data
|
||||
{
|
||||
void *cpu_data[16]; /* reserved for CPU-specific data */
|
||||
void *kernel_stack; /* stack for thread startup and kernel syscalls */
|
||||
@ -176,10 +176,10 @@ index c8c959029d0..1d40afcb569 100644
|
||||
int reply_fd; /* fd for receiving server replies */
|
||||
int wait_fd[2]; /* fd for sleeping server requests */
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index 83b8b892b0f..977bfdd2dd2 100644
|
||||
index 2116b677adb..a7d0bb7e8c8 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -2888,6 +2888,7 @@ static TEB *init_teb( void *ptr, BOOL is_wow )
|
||||
@@ -3646,6 +3646,7 @@ static TEB *init_teb( void *ptr, BOOL is_wow )
|
||||
teb->StaticUnicodeString.Buffer = teb->StaticUnicodeBuffer;
|
||||
teb->StaticUnicodeString.MaximumLength = sizeof(teb->StaticUnicodeBuffer);
|
||||
thread_data = (struct ntdll_thread_data *)&teb->GdiTebBatch;
|
||||
@ -188,10 +188,10 @@ index 83b8b892b0f..977bfdd2dd2 100644
|
||||
thread_data->reply_fd = -1;
|
||||
thread_data->wait_fd[0] = -1;
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index ad5403bd4e0..3aa3a22df68 100644
|
||||
index c5587bef6cf..0c365006f0b 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -348,19 +348,25 @@ int esync_create_fd( int initval, int flags )
|
||||
@@ -346,19 +346,25 @@ int esync_create_fd( int initval, int flags )
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -221,7 +221,7 @@ index ad5403bd4e0..3aa3a22df68 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,3 +504,9 @@ DECL_HANDLER(get_esync_fd)
|
||||
@@ -496,3 +502,9 @@ DECL_HANDLER(get_esync_fd)
|
||||
|
||||
release_object( obj );
|
||||
}
|
||||
@ -232,10 +232,10 @@ index ad5403bd4e0..3aa3a22df68 100644
|
||||
+ send_client_fd( current->process, current->esync_apc_fd, current->id );
|
||||
+}
|
||||
diff --git a/server/esync.h b/server/esync.h
|
||||
index aeb58c5469c..cea025d9308 100644
|
||||
index 689d8569b73..e1588d205d9 100644
|
||||
--- a/server/esync.h
|
||||
+++ b/server/esync.h
|
||||
@@ -21,6 +21,7 @@
|
||||
@@ -23,6 +23,7 @@
|
||||
extern int do_esync(void);
|
||||
void esync_init(void);
|
||||
int esync_create_fd( int initval, int flags );
|
||||
@ -244,22 +244,22 @@ index aeb58c5469c..cea025d9308 100644
|
||||
void esync_clear( int fd );
|
||||
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 5eadd8795f2..bb6f1d1c589 100644
|
||||
index 8c728080d05..3ea700054c6 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3784,3 +3784,7 @@ enum esync_type
|
||||
@REQ(esync_msgwait)
|
||||
int in_msgwait; /* are we in a message wait? */
|
||||
@@ -3935,3 +3935,7 @@ enum esync_type
|
||||
@REPLY
|
||||
int enable; /* previous state of auto-repeat enable */
|
||||
@END
|
||||
+
|
||||
+/* Retrieve the fd to wait on for user APCs. */
|
||||
+@REQ(get_esync_apc_fd)
|
||||
+@END
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index 10da1e3d4c7..258c3f28815 100644
|
||||
index fd6b91b228a..8d7c520ced7 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -228,6 +228,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
@@ -232,6 +232,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
thread->teb = 0;
|
||||
thread->entry_point = 0;
|
||||
thread->esync_fd = -1;
|
||||
@ -267,7 +267,7 @@ index 10da1e3d4c7..258c3f28815 100644
|
||||
thread->system_regs = 0;
|
||||
thread->queue = NULL;
|
||||
thread->wait = NULL;
|
||||
@@ -375,7 +376,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
@@ -380,7 +381,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
}
|
||||
|
||||
if (do_esync())
|
||||
@ -278,7 +278,7 @@ index 10da1e3d4c7..258c3f28815 100644
|
||||
|
||||
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
|
||||
add_process_thread( thread->process, thread );
|
||||
@@ -1164,8 +1168,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
|
||||
@@ -1174,8 +1178,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
|
||||
grab_object( apc );
|
||||
list_add_tail( queue, &apc->entry );
|
||||
if (!list_prev( queue, &apc->entry )) /* first one */
|
||||
@ -292,7 +292,7 @@ index 10da1e3d4c7..258c3f28815 100644
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1211,6 +1220,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
|
||||
@@ -1221,6 +1230,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
|
||||
apc = LIST_ENTRY( ptr, struct thread_apc, entry );
|
||||
list_remove( ptr );
|
||||
}
|
||||
@ -304,10 +304,10 @@ index 10da1e3d4c7..258c3f28815 100644
|
||||
}
|
||||
|
||||
diff --git a/server/thread.h b/server/thread.h
|
||||
index 8a5a8501d9c..e5145f9eb07 100644
|
||||
index 9129e473ba9..10e9e28b432 100644
|
||||
--- a/server/thread.h
|
||||
+++ b/server/thread.h
|
||||
@@ -55,6 +55,7 @@ struct thread
|
||||
@@ -56,6 +56,7 @@ struct thread
|
||||
thread_id_t id; /* thread id */
|
||||
struct list mutex_list; /* list of currently owned mutexes */
|
||||
int esync_fd; /* esync file descriptor (signalled on exit) */
|
||||
@ -316,5 +316,5 @@ index 8a5a8501d9c..e5145f9eb07 100644
|
||||
struct msg_queue *queue; /* message queue */
|
||||
struct thread_wait *wait; /* current wait condition if sleeping */
|
||||
--
|
||||
2.30.2
|
||||
2.43.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 84025e765979320128422a50d5f892e8f501b2df Mon Sep 17 00:00:00 2001
|
||||
From e51d13c759303fd7a903d784ebf8e9a42e2955b6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Mon, 26 Aug 2019 14:37:20 +0200
|
||||
Subject: [PATCH] server: Add send_hardware_message flags for rawinput
|
||||
@ -7,14 +7,14 @@ Subject: [PATCH] server: Add send_hardware_message flags for rawinput
|
||||
---
|
||||
include/ntuser.h | 4 ++++
|
||||
server/protocol.def | 3 +--
|
||||
server/queue.c | 16 ++++++++++------
|
||||
3 files changed, 15 insertions(+), 8 deletions(-)
|
||||
server/queue.c | 20 ++++++++++++--------
|
||||
3 files changed, 17 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/include/ntuser.h b/include/ntuser.h
|
||||
index ff45ffa2bc8..bc51f04af6e 100644
|
||||
index 507ed2e47ec..33e99f1084e 100644
|
||||
--- a/include/ntuser.h
|
||||
+++ b/include/ntuser.h
|
||||
@@ -1440,6 +1440,10 @@ struct hid_packet
|
||||
@@ -1478,6 +1478,10 @@ struct hid_packet
|
||||
|
||||
C_ASSERT(sizeof(struct hid_packet) == offsetof(struct hid_packet, data[0]));
|
||||
|
||||
@ -26,7 +26,7 @@ index ff45ffa2bc8..bc51f04af6e 100644
|
||||
{
|
||||
UINT flags;
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 1fdedd161ff..4d199a6407c 100644
|
||||
index c3fab5e65ba..fc686f1254e 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -2164,7 +2164,7 @@ enum message_type
|
||||
@ -47,18 +47,18 @@ index 1fdedd161ff..4d199a6407c 100644
|
||||
|
||||
/* Get a message from the current queue */
|
||||
diff --git a/server/queue.c b/server/queue.c
|
||||
index ac863fd439b..c38d91ba28c 100644
|
||||
index 7a721877a6f..a220baa1f92 100644
|
||||
--- a/server/queue.c
|
||||
+++ b/server/queue.c
|
||||
@@ -2019,7 +2019,7 @@ static void dispatch_rawinput_message( struct desktop *desktop, struct rawinput_
|
||||
@@ -2020,7 +2020,7 @@ static void dispatch_rawinput_message( struct desktop *desktop, struct rawinput_
|
||||
|
||||
/* queue a hardware message for a mouse event */
|
||||
static int queue_mouse_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
|
||||
- unsigned int origin, struct msg_queue *sender )
|
||||
+ unsigned int origin, struct msg_queue *sender, unsigned int send_flags )
|
||||
{
|
||||
const struct rawinput_device *device;
|
||||
struct hardware_msg_data *msg_data;
|
||||
struct rawinput_message raw_msg;
|
||||
@@ -2075,7 +2075,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
||||
y = desktop->cursor.y;
|
||||
}
|
||||
@ -68,8 +68,8 @@ index ac863fd439b..c38d91ba28c 100644
|
||||
{
|
||||
memset( &raw_msg, 0, sizeof(raw_msg) );
|
||||
raw_msg.foreground = foreground;
|
||||
@@ -2097,6 +2097,8 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
||||
return 0;
|
||||
@@ -2090,6 +2090,8 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
||||
release_object( foreground );
|
||||
}
|
||||
|
||||
+ if (send_flags & SEND_HWMSG_NO_MSG) return 0;
|
||||
@ -77,17 +77,34 @@ index ac863fd439b..c38d91ba28c 100644
|
||||
for (i = 0; i < ARRAY_SIZE( messages ); i++)
|
||||
{
|
||||
if (!messages[i]) continue;
|
||||
@@ -2128,7 +2130,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
||||
@@ -2120,14 +2122,14 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
||||
}
|
||||
|
||||
static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
|
||||
- unsigned int origin, struct msg_queue *sender, int repeat );
|
||||
+ unsigned int origin, struct msg_queue *sender, int repeat, unsigned int send_flags);
|
||||
|
||||
static void key_repeat_timeout( void *private )
|
||||
{
|
||||
struct desktop *desktop = private;
|
||||
|
||||
desktop->key_repeat.timeout = NULL;
|
||||
- queue_keyboard_message( desktop, desktop->key_repeat.win, &desktop->key_repeat.input, IMO_HARDWARE, NULL, 1 );
|
||||
+ queue_keyboard_message( desktop, desktop->key_repeat.win, &desktop->key_repeat.input, IMO_HARDWARE, NULL, 1, 0 );
|
||||
}
|
||||
|
||||
static void stop_key_repeat( struct desktop *desktop )
|
||||
@@ -2140,7 +2142,7 @@ static void stop_key_repeat( struct desktop *desktop )
|
||||
|
||||
/* queue a hardware message for a keyboard event */
|
||||
static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
|
||||
- unsigned int origin, struct msg_queue *sender )
|
||||
+ unsigned int origin, struct msg_queue *sender, unsigned int send_flags )
|
||||
- unsigned int origin, struct msg_queue *sender, int repeat )
|
||||
+ unsigned int origin, struct msg_queue *sender, int repeat, unsigned int send_flags )
|
||||
{
|
||||
struct hw_msg_source source = { IMDT_KEYBOARD, origin };
|
||||
const struct rawinput_device *device;
|
||||
@@ -2232,7 +2234,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
|
||||
}
|
||||
struct hardware_msg_data *msg_data;
|
||||
@@ -2263,7 +2265,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
|
||||
}
|
||||
}
|
||||
|
||||
- if (!unicode && (foreground = get_foreground_thread( desktop, win )))
|
||||
@ -95,8 +112,8 @@ index ac863fd439b..c38d91ba28c 100644
|
||||
{
|
||||
struct rawinput_message raw_msg = {0};
|
||||
raw_msg.foreground = foreground;
|
||||
@@ -2253,6 +2255,8 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
|
||||
return 0;
|
||||
@@ -2278,6 +2280,8 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
|
||||
release_object( foreground );
|
||||
}
|
||||
|
||||
+ if (send_flags & SEND_HWMSG_NO_MSG) return 0;
|
||||
@ -104,7 +121,7 @@ index ac863fd439b..c38d91ba28c 100644
|
||||
if (!(msg = alloc_hardware_message( input->kbd.info, source, time, 0 ))) return 0;
|
||||
msg_data = msg->data;
|
||||
|
||||
@@ -3004,10 +3008,10 @@ DECL_HANDLER(send_hardware_message)
|
||||
@@ -3029,10 +3033,10 @@ DECL_HANDLER(send_hardware_message)
|
||||
switch (req->input.type)
|
||||
{
|
||||
case INPUT_MOUSE:
|
||||
@ -112,8 +129,8 @@ index ac863fd439b..c38d91ba28c 100644
|
||||
+ wait = queue_mouse_message( desktop, req->win, &req->input, origin, sender, req->flags );
|
||||
break;
|
||||
case INPUT_KEYBOARD:
|
||||
- wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender );
|
||||
+ wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, req->flags );
|
||||
- wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, 0 );
|
||||
+ wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, 0, req->flags );
|
||||
break;
|
||||
case INPUT_HARDWARE:
|
||||
queue_custom_hardware_message( desktop, req->win, origin, &req->input );
|
||||
|
@ -1 +1 @@
|
||||
9f6e44fd9ca7d39258f2772c3f44013142702ca4
|
||||
7eb72b7bb3d3ea771efddcb5273e8a69456548ff
|
||||
|
Loading…
Reference in New Issue
Block a user