forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
2ce9ff2d6a
commit
d3274e8e06
@ -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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user