[gtk+] xi2: Handle XIM modules that replace events



commit d3274e8e0619bad02a7fa31874943707dc209fc8
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Apr 2 11:46:42 2011 +0200

    xi2: Handle XIM modules that replace events
    
    Fixes Bug 645993 - XIM has wierd behaviors. Some XIM modules
    filter every key event, possibly replacing it with their own
    one. These events usually have serial=0, so make
    GdkDeviceManagerXI2 also listen on these.

 gdk/x11/gdkdevicemanager-xi2.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 64d0f59..1953b48 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -938,13 +938,18 @@ gdk_x11_device_manager_xi2_translate_core_event (GdkEventTranslator *translator,
   gboolean keyboard = FALSE;
   GdkDevice *device;
 
-  if (xevent->type == KeyPress && xevent->xkey.keycode == 0)
+  if ((xevent->type == KeyPress || xevent->type == KeyRelease) &&
+      (xevent->xkey.keycode == 0 || xevent->xkey.serial == 0))
     {
       /* The X input methods (when triggered via XFilterEvent)
        * generate a core key press event with keycode 0 to signal the
        * end of a key sequence. We use the core translate_event
        * implementation to translate this event.
        *
+       * Other less educated IM modules like to filter every keypress,
+       * only to have these replaced by their own homegrown events,
+       * these events oddly have serial=0, so we try to catch these.
+       *
        * This is just a bandaid fix to keep xim working with a single
        * keyboard until XFilterEvent learns about XI2.
        */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]