static gint mai_key_snooper(GtkWidget *the_widget, GdkEventKey *event, gpointer func_data) { /* notify each AtkKeySnoopFunc in turn... */ MaiKeyEventInfo *info = g_new0(MaiKeyEventInfo, 1); gint consumed = 0; if (key_listener_list) { GHashTable *new_hash = g_hash_table_new(NULL, NULL); g_hash_table_foreach (key_listener_list, insert_hf, new_hash); info->key_event = atk_key_event_from_gdk_event_key (event); info->func_data = func_data; consumed = g_hash_table_foreach_steal (new_hash, notify_hf, info); g_hash_table_destroy (new_hash); g_free(info->key_event); } g_free(info); return (consumed ? 1 : 0); }
gboolean _gtk_accessibility_key_snooper (GtkWidget *widget, GdkEventKey *event) { GSList *l; AtkKeyEventStruct atk_event; gboolean result; result = FALSE; atk_key_event_from_gdk_event_key (event, &atk_event); for (l = key_listener_list; l; l = l->next) { KeyEventListener *listener = l->data; result |= listener->func (&atk_event, listener->data); } return result; }