+
+static gboolean
+key_event_matches_listener (Accessibility_KeyStroke *key_event,
+ DEControllerKeyListener *listener,
+ CORBA_boolean is_system_global)
+{
+ g_print ("mask=%x, listener mask= %x\n", (unsigned int) key_event->modifiers,
+ (unsigned int) (listener->mask->value & 0xFFFF));
+ if ((key_event->modifiers == (CORBA_unsigned_short) (listener->mask->value && 0xFFFF)) &&
+ ((listener->keys == NULL) || (1)) && /* in keyset seq */
+ (1) && /* in event type seq */
+ (is_system_global == listener->is_system_global))
+ {
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static gboolean
+notify_keylisteners (GList *key_listeners,
+ Accessibility_KeyStroke *key_event,
+ CORBA_boolean is_system_global,
+ CORBA_Environment *ev)
+{
+ int i, n_listeners = g_list_length (key_listeners);
+ gboolean is_consumed = FALSE;
+
+ for (i=0; i<n_listeners && !is_consumed; ++i)
+ {
+ Accessibility_KeystrokeListener ls;
+ DEControllerKeyListener *key_listener = (DEControllerKeyListener *)
+ g_list_nth_data (key_listeners, i);
+ ls = (Accessibility_KeystrokeListener) key_listener->listener.object;
+ if (key_event_matches_listener (key_event, key_listener, is_system_global))
+ {
+ if (!CORBA_Object_is_nil(ls, ev))
+ {
+ is_consumed = Accessibility_KeystrokeListener_keyEvent (ls, key_event, ev);
+ }
+ }
+ else g_print ("no match for listener %d\n", i);
+ }
+ return is_consumed;
+}
+