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; }