static void *doAtSpiScreenOpen(void *arg) { AccessibleEventListener *evListener; sem_t *SPI_init_sem = (sem_t *)arg; int res; static const char *events[] = { "object:text-changed", "object:text-caret-moved", "object:state-changed:focused", "focus:", }; const char **event; if ((res=SPI_init())) { logMessage(LOG_ERR,"SPI_init returned %d",res); return 0; } if (!(evListener = SPI_createAccessibleEventListener(evListenerCB,NULL))) logMessage(LOG_ERR,"SPI_createAccessibleEventListener failed"); else for (event=events; event<&events[sizeof(events)/sizeof(*events)]; event++) if (!(SPI_registerGlobalEventListener(evListener,*event))) logMessage(LOG_ERR,"SPI_registerGlobalEventListener(%s) failed",*event); sem_post(SPI_init_sem); SPI_event_main(); if (!(SPI_deregisterGlobalEventListenerAll(evListener))) logMessage(LOG_ERR,"SPI_deregisterGlobalEventListenerAll failed"); AccessibleEventListener_unref(evListener); if (curFocus) finiTerm(); if ((res=SPI_exit())) logMessage(LOG_ERR,"SPI_exit returned %d",res); return NULL; }
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 initialize( Driver* dp, char* application_title ) { dp->application_title = application_title; initialize_SPI(); listen_for_application_activation( dp ); search_desktop_for_application( dp ); if ( dp->found_application ) { remove_listener( dp ); closedown( dp ); return; } start_timeout_timer( dp ); SPI_event_main(); remove_listener( dp ); closedown( dp ); if ( ! dp->found_application ) rb_raise( rb_eRuntimeError, "No such application running." ); }
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 (); }