add so I can tag.
authormichael <michael@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 26 Nov 2001 04:38:16 +0000 (04:38 +0000)
committermichael <michael@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 26 Nov 2001 04:38:16 +0000 (04:38 +0000)
git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@117 e2bd861d-eb25-0410-b326-f6ed22b6b98c

cspi/bonobo/cspi-bonobo-listener.c [new file with mode: 0644]
cspi/bonobo/cspi-bonobo-listener.h [new file with mode: 0644]
cspi/spi-listener-impl.c [new file with mode: 0644]
cspi/spi-listener-impl.h [new file with mode: 0644]

diff --git a/cspi/bonobo/cspi-bonobo-listener.c b/cspi/bonobo/cspi-bonobo-listener.c
new file mode 100644 (file)
index 0000000..ac1523c
--- /dev/null
@@ -0,0 +1,143 @@
+#include <cspi/spi-private.h>
+#include <cspi/spi-listener-impl.h>
+
+/*
+ * Standard event dispatcher
+ */
+
+BONOBO_CLASS_BOILERPLATE (CSpiEventListener, cspi_event_listener,
+                         GObject, spi_event_listener_get_type ())
+
+static void
+cspi_event (SpiEventListener    *listener,
+           Accessibility_Event *event)
+{
+  GSList *l;
+  CSpiEventListener *clistener = (CSpiEventListener *) listener;
+  AccessibleEvent aevent;
+
+  aevent.type    = event->type;
+  aevent.source  = cspi_object_add (event->source);
+  aevent.detail1 = event->detail1;
+  aevent.detail2 = event->detail2;
+
+  for (l = clistener->callbacks; l; l = l->next)
+    {
+      AccessibleEventListenerCB cb = l->data;
+      cb (&aevent);
+    }
+  
+  cspi_object_unref (aevent.source);
+}
+
+static void
+cspi_event_listener_instance_init (CSpiEventListener *listener)
+{
+}
+
+static void
+cspi_event_listener_class_init (CSpiEventListenerClass *klass)
+{
+  klass->event = cspi_event;
+}
+
+CSpiEventListener *
+cspi_event_listener_new (void)
+{
+  return g_object_new (spi_event_listener_get_type (), NULL);
+}
+
+void
+cspi_event_listener_add_callback (CSpiEventListener        *listener,
+                                 AccessibleEventListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_prepend (listener->callbacks, callback);
+}
+
+void
+cspi_event_listener_remove_callback (CSpiEventListener        *listener,
+                                    AccessibleEventListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_remove (listener->callbacks, callback);
+}
+
+/*
+ * Key event dispatcher
+ */
+
+static gboolean
+cspi_key_event (SpiKeystrokeListener          *listener,
+               const Accessibility_KeyStroke *keystroke)
+{
+  GSList *l;
+  CSpiKeystrokeListener *clistener = (CSpiKeystrokeListener *) listener;
+  AccessibleKeystroke akeystroke;
+  gboolean handled = FALSE;
+
+  switch (keystroke->type)
+    {
+      case Accessibility_KEY_PRESSED:
+       akeystroke.type = SPI_KEY_PRESSED;
+       break;
+      case Accessibility_KEY_RELEASED:
+       akeystroke.type = SPI_KEY_RELEASED;
+       break;
+      default:
+       akeystroke.type = 0;
+       break;
+    }
+  akeystroke.keyID     = keystroke->keyID;
+  akeystroke.keycode   = keystroke->keycode;
+  akeystroke.timestamp = keystroke->timestamp;
+  akeystroke.modifiers = keystroke->modifiers;
+
+  for (l = clistener->callbacks; l; l = l->next)
+    {
+      AccessibleKeystrokeListenerCB cb = l->data;
+      if ((handled = cb (&akeystroke)))
+        {
+         break;
+       }
+    }
+  
+  return handled;
+}
+
+static void
+cspi_keystroke_listener_init (CSpiKeystrokeListener *listener)
+{
+}
+
+static void
+cspi_keystroke_listener_class_init (CSpiKeystrokeListenerClass *klass)
+{
+  klass->key_event = cspi_key_event;
+}
+
+BONOBO_TYPE_FUNC (CSpiKeystrokeListener, 
+                 spi_keystroke_listener_get_type (),
+                 cspi_keystroke_listener);
+
+CSpiKeystrokeListener *
+cspi_keystroke_listener_new (void)
+{
+  return g_object_new (spi_keystroke_listener_get_type (), NULL);
+}
+
+void
+cspi_keystroke_listener_add_callback (CSpiKeystrokeListener        *listener,
+                                     AccessibleKeystrokeListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_prepend (listener->callbacks, callback);
+}
+
+void
+cspi_keystroke_listener_remove_callback (CSpiKeystrokeListener        *listener,
+                                        AccessibleKeystrokeListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_remove (listener->callbacks, callback);
+}
diff --git a/cspi/bonobo/cspi-bonobo-listener.h b/cspi/bonobo/cspi-bonobo-listener.h
new file mode 100644 (file)
index 0000000..2dbf7c0
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef __SPI_LISTENER_IMPL_H__
+#define __SPI_LISTENER_IMP_H__
+
+#include <libspi/Accessibility.h>
+#include <libspi/accessibleeventlistener.h>
+#include <libspi/keystrokelistener.h>
+#include <cspi/spi-impl.h>
+#include <cspi/spi-listener.h>
+
+G_BEGIN_DECLS
+
+#define CSPI_KEYSTROKE_LISTENER_TYPE        (cspi_keystroke_listener_get_type ())
+#define CSPI_KEYSTROKE_LISTENER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), CSPI_KEYSTROKE_LISTENER_TYPE, CSpiKeystrokeListener))
+#define CSPI_KEYSTROKE_LISTENER_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), CSPI_KEYSTROKE_LISTENER_TYPE, CSpiKeystrokeListenerClass))
+#define IS_CSPI_KEYSTROKE_LISTENER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), CSPI_KEYSTROKE_LISTENER_TYPE))
+#define IS_CSPI_KEYSTROKE_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CSPI_KEYSTROKE_LISTENER_TYPE))
+
+typedef struct _CSpiEventListener CSpiEventListener;
+struct _CSpiEventListener {
+       SpiEventListener parent;
+       GSList          *callbacks;
+};
+typedef SpiEventListenerClass CSpiEventListenerClass;
+
+GType              cspi_event_listener_get_type        (void);
+CSpiEventListener *cspi_event_listener_new             (void);
+void               cspi_event_listener_add_callback    (CSpiEventListener        *listener,
+                                                       AccessibleEventListenerCB callback);
+void               cspi_event_listener_remove_callback (CSpiEventListener        *listener,
+                                                       AccessibleEventListenerCB callback);
+
+typedef struct _CSpiKeystrokeListener CSpiKeystrokeListener;
+struct _CSpiKeystrokeListener {
+       SpiKeystrokeListener parent;
+       GSList              *callbacks;
+};
+typedef SpiKeystrokeListenerClass CSpiKeystrokeListenerClass;
+
+GType                  cspi_keystroke_listener_get_type        (void);
+CSpiKeystrokeListener *cspi_keystroke_listener_new             (void);
+void                   cspi_keystroke_listener_add_callback    (CSpiKeystrokeListener        *listener,
+                                                               AccessibleKeystrokeListenerCB callback);
+void                   cspi_keystroke_listener_remove_callback (CSpiKeystrokeListener        *listener,
+                                                               AccessibleKeystrokeListenerCB callback);
+
+G_END_DECLS
+
+#endif /* __SPI_LISTENER_IMPL_H__ */
diff --git a/cspi/spi-listener-impl.c b/cspi/spi-listener-impl.c
new file mode 100644 (file)
index 0000000..ac1523c
--- /dev/null
@@ -0,0 +1,143 @@
+#include <cspi/spi-private.h>
+#include <cspi/spi-listener-impl.h>
+
+/*
+ * Standard event dispatcher
+ */
+
+BONOBO_CLASS_BOILERPLATE (CSpiEventListener, cspi_event_listener,
+                         GObject, spi_event_listener_get_type ())
+
+static void
+cspi_event (SpiEventListener    *listener,
+           Accessibility_Event *event)
+{
+  GSList *l;
+  CSpiEventListener *clistener = (CSpiEventListener *) listener;
+  AccessibleEvent aevent;
+
+  aevent.type    = event->type;
+  aevent.source  = cspi_object_add (event->source);
+  aevent.detail1 = event->detail1;
+  aevent.detail2 = event->detail2;
+
+  for (l = clistener->callbacks; l; l = l->next)
+    {
+      AccessibleEventListenerCB cb = l->data;
+      cb (&aevent);
+    }
+  
+  cspi_object_unref (aevent.source);
+}
+
+static void
+cspi_event_listener_instance_init (CSpiEventListener *listener)
+{
+}
+
+static void
+cspi_event_listener_class_init (CSpiEventListenerClass *klass)
+{
+  klass->event = cspi_event;
+}
+
+CSpiEventListener *
+cspi_event_listener_new (void)
+{
+  return g_object_new (spi_event_listener_get_type (), NULL);
+}
+
+void
+cspi_event_listener_add_callback (CSpiEventListener        *listener,
+                                 AccessibleEventListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_prepend (listener->callbacks, callback);
+}
+
+void
+cspi_event_listener_remove_callback (CSpiEventListener        *listener,
+                                    AccessibleEventListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_remove (listener->callbacks, callback);
+}
+
+/*
+ * Key event dispatcher
+ */
+
+static gboolean
+cspi_key_event (SpiKeystrokeListener          *listener,
+               const Accessibility_KeyStroke *keystroke)
+{
+  GSList *l;
+  CSpiKeystrokeListener *clistener = (CSpiKeystrokeListener *) listener;
+  AccessibleKeystroke akeystroke;
+  gboolean handled = FALSE;
+
+  switch (keystroke->type)
+    {
+      case Accessibility_KEY_PRESSED:
+       akeystroke.type = SPI_KEY_PRESSED;
+       break;
+      case Accessibility_KEY_RELEASED:
+       akeystroke.type = SPI_KEY_RELEASED;
+       break;
+      default:
+       akeystroke.type = 0;
+       break;
+    }
+  akeystroke.keyID     = keystroke->keyID;
+  akeystroke.keycode   = keystroke->keycode;
+  akeystroke.timestamp = keystroke->timestamp;
+  akeystroke.modifiers = keystroke->modifiers;
+
+  for (l = clistener->callbacks; l; l = l->next)
+    {
+      AccessibleKeystrokeListenerCB cb = l->data;
+      if ((handled = cb (&akeystroke)))
+        {
+         break;
+       }
+    }
+  
+  return handled;
+}
+
+static void
+cspi_keystroke_listener_init (CSpiKeystrokeListener *listener)
+{
+}
+
+static void
+cspi_keystroke_listener_class_init (CSpiKeystrokeListenerClass *klass)
+{
+  klass->key_event = cspi_key_event;
+}
+
+BONOBO_TYPE_FUNC (CSpiKeystrokeListener, 
+                 spi_keystroke_listener_get_type (),
+                 cspi_keystroke_listener);
+
+CSpiKeystrokeListener *
+cspi_keystroke_listener_new (void)
+{
+  return g_object_new (spi_keystroke_listener_get_type (), NULL);
+}
+
+void
+cspi_keystroke_listener_add_callback (CSpiKeystrokeListener        *listener,
+                                     AccessibleKeystrokeListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_prepend (listener->callbacks, callback);
+}
+
+void
+cspi_keystroke_listener_remove_callback (CSpiKeystrokeListener        *listener,
+                                        AccessibleKeystrokeListenerCB callback)
+{
+  g_return_if_fail (IS_CSPI_KEYSTROKE_LISTENER (listener));
+  listener->callbacks = g_slist_remove (listener->callbacks, callback);
+}
diff --git a/cspi/spi-listener-impl.h b/cspi/spi-listener-impl.h
new file mode 100644 (file)
index 0000000..2dbf7c0
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef __SPI_LISTENER_IMPL_H__
+#define __SPI_LISTENER_IMP_H__
+
+#include <libspi/Accessibility.h>
+#include <libspi/accessibleeventlistener.h>
+#include <libspi/keystrokelistener.h>
+#include <cspi/spi-impl.h>
+#include <cspi/spi-listener.h>
+
+G_BEGIN_DECLS
+
+#define CSPI_KEYSTROKE_LISTENER_TYPE        (cspi_keystroke_listener_get_type ())
+#define CSPI_KEYSTROKE_LISTENER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), CSPI_KEYSTROKE_LISTENER_TYPE, CSpiKeystrokeListener))
+#define CSPI_KEYSTROKE_LISTENER_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), CSPI_KEYSTROKE_LISTENER_TYPE, CSpiKeystrokeListenerClass))
+#define IS_CSPI_KEYSTROKE_LISTENER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), CSPI_KEYSTROKE_LISTENER_TYPE))
+#define IS_CSPI_KEYSTROKE_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CSPI_KEYSTROKE_LISTENER_TYPE))
+
+typedef struct _CSpiEventListener CSpiEventListener;
+struct _CSpiEventListener {
+       SpiEventListener parent;
+       GSList          *callbacks;
+};
+typedef SpiEventListenerClass CSpiEventListenerClass;
+
+GType              cspi_event_listener_get_type        (void);
+CSpiEventListener *cspi_event_listener_new             (void);
+void               cspi_event_listener_add_callback    (CSpiEventListener        *listener,
+                                                       AccessibleEventListenerCB callback);
+void               cspi_event_listener_remove_callback (CSpiEventListener        *listener,
+                                                       AccessibleEventListenerCB callback);
+
+typedef struct _CSpiKeystrokeListener CSpiKeystrokeListener;
+struct _CSpiKeystrokeListener {
+       SpiKeystrokeListener parent;
+       GSList              *callbacks;
+};
+typedef SpiKeystrokeListenerClass CSpiKeystrokeListenerClass;
+
+GType                  cspi_keystroke_listener_get_type        (void);
+CSpiKeystrokeListener *cspi_keystroke_listener_new             (void);
+void                   cspi_keystroke_listener_add_callback    (CSpiKeystrokeListener        *listener,
+                                                               AccessibleKeystrokeListenerCB callback);
+void                   cspi_keystroke_listener_remove_callback (CSpiKeystrokeListener        *listener,
+                                                               AccessibleKeystrokeListenerCB callback);
+
+G_END_DECLS
+
+#endif /* __SPI_LISTENER_IMPL_H__ */