+static gboolean
+key_event_source_func (void *p)
+{
+ GList *listeners = (GList *)p;
+ XEvent *x_event = g_new0 (XEvent, 1);
+ while (XPending (display))
+ {
+ XNextEvent (display, x_event);
+ while (listeners)
+ {
+ /* if the listener mask matches, notify it*/
+ if (1)
+ {
+ ;
+ }
+ }
+ }
+ return TRUE;
+}
+
+void
+save_this_impl_registerKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask)
+{
+ static gboolean initialized = FALSE;
+ static Window grab_window;
+ XEvent *x_event = g_new0(XEvent, 1);
+ key_listeners = g_list_append (key_listeners, listener);
+ if (!initialized)
+ {
+ g_timeout_add_full (G_PRIORITY_HIGH_IDLE, 200, key_event_source_func, key_listeners, NULL);
+ display = XOpenDisplay (getenv ("DISPLAY"));
+ grab_window = DefaultRootWindow (display);
+ XSelectInput (display, grab_window, KeyPress | KeyRelease);
+ initialized = TRUE;
+ }
+ /* */
+ XGrabKey (display,
+ AnyKey,
+ LockMask,
+ grab_window,
+ False,
+ GrabModeAsync,
+ GrabModeAsync);
+ while (0)
+ {
+ XNextEvent (display, x_event);
+ g_print ("foo!\n");
+ }
+}
+