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;
|
gboolean keyboard = FALSE;
|
||||||
GdkDevice *device;
|
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)
|
/* The X input methods (when triggered via XFilterEvent)
|
||||||
* generate a core key press event with keycode 0 to signal the
|
* generate a core key press event with keycode 0 to signal the
|
||||||
* end of a key sequence. We use the core translate_event
|
* end of a key sequence. We use the core translate_event
|
||||||
* implementation to translate this 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
|
* This is just a bandaid fix to keep xim working with a single
|
||||||
* keyboard until XFilterEvent learns about XI2.
|
* keyboard until XFilterEvent learns about XI2.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user