1 #include <cspi/spi-private.h>
2 #include <cspi/spi-listener-impl.h>
5 * Standard event dispatcher
8 BONOBO_CLASS_BOILERPLATE (CSpiEventListener, cspi_event_listener,
9 GObject, spi_event_listener_get_type ())
12 cspi_event (SpiEventListener *listener,
13 Accessibility_Event *event)
16 CSpiEventListener *clistener = (CSpiEventListener *) listener;
17 AccessibleEvent aevent;
19 aevent.type = event->type;
20 aevent.source = cspi_object_add (event->source);
21 aevent.detail1 = event->detail1;
22 aevent.detail2 = event->detail2;
24 for (l = clistener->callbacks; l; l = l->next)
26 AccessibleEventListenerCB cb = l->data;
30 cspi_object_unref (aevent.source);
34 cspi_event_listener_instance_init (CSpiEventListener *listener)
39 cspi_event_listener_class_init (CSpiEventListenerClass *klass)
41 klass->event = cspi_event;
45 cspi_event_listener_new (void)
47 return g_object_new (cspi_event_listener_get_type (), NULL);
51 cspi_event_listener_add_callback (CSpiEventListener *listener,
52 AccessibleEventListenerCB callback)
54 g_return_if_fail (IS_SPI_ACCESSIBLE_EVENT_SPI_LISTENER (listener));
55 listener->callbacks = g_slist_prepend (listener->callbacks, callback);
59 cspi_event_listener_remove_callback (CSpiEventListener *listener,
60 AccessibleEventListenerCB callback)
62 g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
63 listener->callbacks = g_slist_remove (listener->callbacks, callback);
67 * Key event dispatcher
71 cspi_key_event (SpiKeystrokeListener *listener,
72 const Accessibility_KeyStroke *keystroke)
75 CSpiKeystrokeListener *clistener = (CSpiKeystrokeListener *) listener;
76 AccessibleKeystroke akeystroke;
77 gboolean handled = FALSE;
79 switch (keystroke->type)
81 case Accessibility_KEY_PRESSED:
82 akeystroke.type = SPI_KEY_PRESSED;
84 case Accessibility_KEY_RELEASED:
85 akeystroke.type = SPI_KEY_RELEASED;
91 akeystroke.keyID = keystroke->keyID;
92 akeystroke.keycode = keystroke->keycode;
93 akeystroke.timestamp = keystroke->timestamp;
94 akeystroke.modifiers = keystroke->modifiers;
96 for (l = clistener->callbacks; l; l = l->next)
98 AccessibleKeystrokeListenerCB cb = l->data;
99 if ((handled = cb (&akeystroke)))
109 cspi_keystroke_listener_init (CSpiKeystrokeListener *listener)
114 cspi_keystroke_listener_class_init (CSpiKeystrokeListenerClass *klass)
116 klass->key_event = cspi_key_event;
119 BONOBO_TYPE_FUNC (CSpiKeystrokeListener,
120 spi_keystroke_listener_get_type (),
121 cspi_keystroke_listener);
123 CSpiKeystrokeListener *
124 cspi_keystroke_listener_new (void)
126 return g_object_new (cspi_keystroke_listener_get_type (), NULL);
130 cspi_keystroke_listener_add_callback (CSpiKeystrokeListener *listener,
131 AccessibleKeystrokeListenerCB callback)
133 g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
134 listener->callbacks = g_slist_prepend (listener->callbacks, callback);
138 cspi_keystroke_listener_remove_callback (CSpiKeystrokeListener *listener,
139 AccessibleKeystrokeListenerCB callback)
141 g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
142 listener->callbacks = g_slist_remove (listener->callbacks, callback);