static void control_spi_listener_init (ControlSpiListener *listener) { listener->event_queue = g_queue_new (); listener->window_listener = SPI_createAccessibleEventListener (control_spi_listener_window_listener_cb, listener); listener->showing_listener = SPI_createAccessibleEventListener (control_spi_listener_showing_listener_cb, listener); listener->keys_listener = SPI_createAccessibleEventListener (control_spi_listener_keys_listener_cb, listener); }
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; }
static void listen_for_application_activation( Driver* dp ) { dp->window_listener = SPI_createAccessibleEventListener( check_for_application, dp ); int success = SPI_registerGlobalEventListener( dp->window_listener, "window:activate" ); if ( ! success ) report_error( "Failed to register a GlobalEventListener" ); }
EventLog * event_log_create (GtkWindow *parent) { EventLog *log = g_new0 (EventLog, 1); log->xml = get_glade_xml(); log->window = glade_xml_get_widget (log->xml, "event_window"); gtk_window_set_transient_for (GTK_WINDOW (log->window), parent); glade_xml_signal_connect_data (log->xml, "events_clear_clicked", G_CALLBACK (events_clear_clicked), log); glade_xml_signal_connect_data (log->xml, "events_select_all_clicked", G_CALLBACK (events_select_all_clicked), log); glade_xml_signal_connect_data (log->xml, "events_save_as_clicked", G_CALLBACK (events_save_as_clicked), log); log->text_view = GTK_TEXT_VIEW (glade_xml_get_widget (log->xml, "event_text_view")); log->filters_view = GTK_TREE_VIEW (glade_xml_get_widget (log->xml, "event_filters")); g_signal_connect (log->text_view, "button_press_event", G_CALLBACK (link_clicked), log); log->log_text = gtk_text_buffer_new (NULL); gtk_text_view_set_buffer (log->text_view, log->log_text); gtk_text_view_set_wrap_mode (log->text_view, /* GTK_WRAP_NONE */ GTK_WRAP_CHAR); setup_filters (log); log->global_listener = SPI_createAccessibleEventListener (global_event_callback, log); log->idle_tail = 0; #ifdef IDLE_LOGGING log->idle_log = 0; log->event_list = NULL; #endif gtk_widget_show (log->window); return log; }
int main (int argc, char **argv) { int leaked, i; TestWindow *win; const char *modules; AccessibleEventListener *global_listener; modules = g_getenv ("GTK_MODULES"); if (!modules || modules [0] == '\0') putenv ("GTK_MODULES=gail:atk-bridge"); modules = NULL; for (i = 1; i < argc; i++) { if (!g_strcasecmp (argv [i], "--poke")) do_poke = TRUE; } gtk_init (&argc, &argv); g_assert (!SPI_init ()); g_assert (SPI_init ()); g_assert (SPI_getDesktopCount () == 1); test_roles (); test_misc (); test_desktop (); test_keylisteners (); win = create_test_window (); global_listener = SPI_createAccessibleEventListener (global_listener_cb, win); g_assert (SPI_registerGlobalEventListener (global_listener, "focus:")); fprintf (stderr, "Waiting for focus event ...\n"); gtk_main (); g_assert (SPI_deregisterGlobalEventListenerAll (global_listener)); AccessibleEventListener_unref (global_listener); test_window_destroy (win); /* Wait for any pending events from the registry */ g_usleep (500*1000); for (i = 0; i < 100; i++) dbus_connection_read_write_dispatch (SPI_bus(), 5); if ((leaked = SPI_exit ())) g_error ("Leaked %d SPI handles", leaked); g_assert (!SPI_exit ()); fprintf (stderr, "All tests passed\n"); if (g_getenv ("_MEMPROF_SOCKET")) { fprintf (stderr, "Waiting for memprof\n"); gtk_main (); } putenv ("AT_BRIDGE_SHUTDOWN=1"); return 0; }