int main (int argc, char **argv) { AccessibleKeySet switch_set; if ((argc > 1) && (!strncmp (argv[1], "-h", 2))) { printf ("Usage: keysynth-demo\n"); exit (1); } gtk_init (&argc, &argv); /* must call, because this program uses GTK+ */ SPI_init (); key_listener = SPI_createAccessibleKeystrokeListener (is_command_key, NULL); /* will listen only to Alt-key combinations */ SPI_registerAccessibleKeystrokeListener (key_listener, (AccessibleKeySet *) SPI_KEYSET_ALL_KEYS, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL, (unsigned long) ( KeyPress | KeyRelease), SPI_KEYLISTENER_CANCONSUME | SPI_KEYLISTENER_ALL_WINDOWS); create_vkbd (); /* * Register a listener on an 'unused' key, to serve as a 'single switch'. * On most Intel boxes there is at least one 'special' system key that does not * have a non-zero keycode assigned in the Xserver, so we will intercept any keycode * that is 'zero'. Often these the are the "windows" or the "menu" keys. */ switch_set.keysyms = g_new0 (unsigned long, 1); switch_set.keycodes = g_new0 (unsigned short, 1); switch_set.keystrings = g_new0 (char *, 1); switch_set.len = 1; switch_set.keysyms[0] = (unsigned long) 0; switch_set.keycodes[0] = (unsigned short) 0; switch_set.keystrings[0] = ""; switch_listener = SPI_createAccessibleKeystrokeListener (switch_callback, NULL); SPI_registerAccessibleKeystrokeListener (switch_listener, &switch_set, SPI_KEYMASK_UNMODIFIED, (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), SPI_KEYLISTENER_NOSYNC); SPI_event_main (); return SPI_exit (); }
static void test_keylisteners (void) { int i; AccessibleKeystroke stroke; AccessibleKeystrokeListener *key_listener; AccessibleKeySet *test_keyset; fprintf (stderr, "Testing keyboard listeners ...\n"); key_listener = SPI_createAccessibleKeystrokeListener ( key_listener_cb, &stroke); test_keyset = SPI_createAccessibleKeySet (1, "=", NULL, NULL); g_assert (SPI_registerAccessibleKeystrokeListener ( key_listener, test_keyset, 0, SPI_KEY_PRESSED | SPI_KEY_RELEASED, SPI_KEYLISTENER_CANCONSUME | SPI_KEYLISTENER_ALL_WINDOWS)); for (i = 0; i < 3; i++) { memset (&stroke, 0, sizeof (AccessibleKeystroke)); g_assert (SPI_generateKeyboardEvent ('=', NULL, SPI_KEY_SYM)); while (!(key_press_received)) g_main_context_iteration (NULL, TRUE); fprintf (stderr, "p [%s]", stroke.keystring); g_assert (!strcmp (stroke.keystring, "=")); while (!(key_release_received)) g_main_context_iteration (NULL, TRUE); fprintf (stderr, "r [%s]", stroke.keystring); key_press_received = FALSE; key_release_received = FALSE; } g_assert (SPI_deregisterAccessibleKeystrokeListener (key_listener, 0)); SPI_freeAccessibleKeySet (test_keyset); fprintf (stderr, "\n"); AccessibleKeystrokeListener_unref (key_listener); g_assert (SPI_generateMouseEvent (100, 100, "rel")); g_assert (SPI_generateMouseEvent (-50, -50, "rel")); g_assert (SPI_generateMouseEvent (-50, -50, "rel")); g_assert (SPI_generateMouseEvent (-1, -1, "b1c")); }
int main (int argc, char **argv) { const char *tab_strings[1] = {"Tab"}; short keycodes[] = {65, 64, 23}; SPIBoolean retval = FALSE; SPI_init (); /* prepare the keyboard snoopers */ command_key_listener = SPI_createAccessibleKeystrokeListener (report_command_key_event, NULL); ordinary_key_listener = SPI_createAccessibleKeystrokeListener (report_ordinary_key_event, NULL); synchronous_key_listener = SPI_createAccessibleKeystrokeListener (report_synchronous_key_event, NULL); tab_key_listener = SPI_createAccessibleKeystrokeListener (report_tab_key_event, NULL); all_key_listener = SPI_createAccessibleKeystrokeListener (report_all_key_event, NULL); command_keyset = SPI_createAccessibleKeySet (1, "q", NULL, NULL); async_keyset = SPI_createAccessibleKeySet (3, NULL, keycodes, NULL); sync_keyset = SPI_createAccessibleKeySet (3, "def", NULL, NULL); tab_keyset = SPI_createAccessibleKeySet (1, NULL, NULL, tab_strings); retval = SPI_registerAccessibleKeystrokeListener(command_key_listener, command_keyset, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL, (unsigned long) ( SPI_KEY_PRESSED ), SPI_KEYLISTENER_ALL_WINDOWS); fprintf (stderr, "Command key registry: result %s\n", retval ? "succeeded" : "failed"); retval = SPI_registerAccessibleKeystrokeListener(ordinary_key_listener, async_keyset, SPI_KEYMASK_UNMODIFIED, (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), SPI_KEYLISTENER_NOSYNC); retval = SPI_registerAccessibleKeystrokeListener(synchronous_key_listener, sync_keyset, SPI_KEYMASK_UNMODIFIED, (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), SPI_KEYLISTENER_CANCONSUME); retval = SPI_registerAccessibleKeystrokeListener(tab_key_listener, tab_keyset, SPI_KEYMASK_ALT, (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), SPI_KEYLISTENER_ALL_WINDOWS); fprintf (stderr, "tab listener registry: %s\n", retval ? "succeeded" : "failed"); retval = SPI_registerAccessibleKeystrokeListener(all_key_listener, SPI_KEYSET_ALL_KEYS, SPI_KEYMASK_CONTROL | SPI_KEYMASK_SHIFT, (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), SPI_KEYLISTENER_ALL_WINDOWS); fprintf (stderr, "all key registry: %s\n", retval ? "succeeded" : "failed" ); SPI_registerAccessibleKeystrokeListener(all_key_listener, SPI_KEYSET_ALL_KEYS, SPI_KEYMASK_SHIFT, (unsigned long) ( SPI_KEY_PRESSED ), SPI_KEYLISTENER_NOSYNC | SPI_KEYLISTENER_CANCONSUME); SPI_event_main (); putenv ("AT_BRIDGE_SHUTDOWN=1"); return SPI_exit (); }