From a22d4ee50d362eb1f638111d287c81af70a8f5fc Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 13 Dec 2012 15:20:29 +0100 Subject: [PATCH] keygrabber: Handle XI2 key events, part of SL #3895 XInput2 events are coerced by active grabs on the alt-tab handling code in sugar shell, even if the keygrabber itself does core events. Signed-off-by: Carlos Garnacho Acked-by: Simon Schampijer --- src/sugar3/sugar-key-grabber.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/sugar3/sugar-key-grabber.c b/src/sugar3/sugar-key-grabber.c index 74a0a953..a4c00968 100644 --- a/src/sugar3/sugar-key-grabber.c +++ b/src/sugar3/sugar-key-grabber.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -138,6 +139,25 @@ filter_events(GdkXEvent *xevent, GdkEvent *event, gpointer data) return GDK_FILTER_REMOVE; } + if (xev->type == GenericEvent) { + XIDeviceEvent *ev; + int return_value = FALSE; + + ev = (XIDeviceEvent *) ((XGenericEventCookie *) xev)->data; + + if (ev->evtype == XI_KeyPress) { + g_signal_emit (grabber, signals[KEY_PRESSED], 0, + ev->detail, ev->mods.effective, ev->time, &return_value); + } else if (ev->evtype == XI_KeyRelease) { + g_signal_emit (grabber, signals[KEY_RELEASED], 0, + ev->detail, ev->mods.effective, ev->time, &return_value); + } + + if (return_value) + return GDK_FILTER_REMOVE; + } + + return GDK_FILTER_CONTINUE; }