From: Charlotte Pabst cpabst@codeweavers.com
XIM events are handled by Xlib internally and need to go through XFilterEvent to be processed.
This allows for keyboard input to be processed while connected to an input method daemon when an application only polls for keyboard input. --- dlls/winex11.drv/event.c | 7 ++++++- dlls/winex11.drv/x11drv.h | 3 +++ dlls/winex11.drv/x11drv_main.c | 5 ++++- 3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index b1797cea24a..c72b6588214 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -302,13 +302,18 @@ static Bool filter_event( Display *display, XEvent *event, char *arg ) return (mask & (QS_MOUSEMOVE | QS_RAWINPUT)) != 0; case Expose: return (mask & QS_PAINT) != 0; + case ClientMessage: + if (event->xclient.message_type == x11drv_atom(_XIM_XCONNECT) + || event->xclient.message_type == x11drv_atom(_XIM_PROTOCOL) + || event->xclient.message_type == x11drv_atom(_XIM_MOREDATA)) + return 1; + /* fallthrough */ case FocusIn: case FocusOut: case MapNotify: case UnmapNotify: case ConfigureNotify: case PropertyNotify: - case ClientMessage: return (mask & (QS_POSTMESSAGE | QS_SENDMESSAGE)) != 0; #ifdef GenericEvent case GenericEvent: diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 8e383ae4c48..e04eed2ea85 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -548,6 +548,9 @@ enum x11drv_atoms XATOM_text_rtf, XATOM_text_richtext, XATOM_text_uri_list, + XATOM__XIM_XCONNECT, + XATOM__XIM_PROTOCOL, + XATOM__XIM_MOREDATA, NB_XATOMS };
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index e58d3afca63..b57b945c4cd 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -188,7 +188,10 @@ static const char * const atom_names[NB_XATOMS - FIRST_XATOM] = "text/plain", "text/rtf", "text/richtext", - "text/uri-list" + "text/uri-list", + "_XIM_XCONNECT", + "_XIM_PROTOCOL", + "_XIM_MOREDATA", };
/***********************************************************************