[PATCH v4 3/3] winex11: Treat XFilterEvent() as a special event handler.
Byeongsik Jeon
bsjeon at hanmail.net
Fri Apr 8 07:45:41 CDT 2022
Signed-off-by: Byeongsik Jeon <bsjeon at hanmail.net>
---
v4: add new patch
XFilterEvent() invoked "xim callbacks" can also be treated as event handlers.
dlls/winex11.drv/event.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index a744ce7e4e5..02fb37eec05 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -424,13 +424,19 @@ static BOOL process_events( Display *display, Bool (*filter)(Display*, XEvent*,X
int count = 0;
BOOL queued = FALSE;
enum event_merge_action action = MERGE_DISCARD;
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
prev_event.type = 0;
while (XCheckIfEvent( display, &event, filter, (char *)arg ))
{
+ XEvent *prev = thread_data->current_event;
+ thread_data->current_event = &event;
count++;
if (XFilterEvent( &event, None ))
{
+ thread_data->current_event = prev;
+ queued = TRUE;
+
/*
* SCIM on linux filters key events strangely. It does not filter the
* KeyPress events for these keys however it does filter the
@@ -459,6 +465,7 @@ static BOOL process_events( Display *display, Bool (*filter)(Display*, XEvent*,X
else
continue; /* filtered, ignore it */
}
+ thread_data->current_event = prev;
get_event_data( &event );
action = merge_events( &prev_event, &event );
--
2.35.1
More information about the wine-devel
mailing list