* AT-SPI - Assistive Technology Service Provider Interface
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
*
- * Copyright 2001 Sun Microsystems Inc.
+ * Copyright 2001, 2002, 2003 Sun Microsystems Inc.,
+ * Copyright 2001, 2002, 2003 Ximian, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* Boston, MA 02111-1307, USA.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "../cspi/spi-private.h" /* A hack for now */
static void report_event (const AccessibleEvent *event, void *user_data);
static void report_detail_event (const AccessibleEvent *event, void *user_data);
+static void report_detail1_event (const AccessibleEvent *event, void *user_data);
+static void report_text_event (const AccessibleEvent *event, void *user_data);
+static void report_text_selection_event (const AccessibleEvent *event, void *user_data);
+static void report_active_descendant_event (const AccessibleEvent *event, void *user_data);
+static void report_children_changed_event (const AccessibleEvent *event, void *user_data);
+static void report_name_changed_event (const AccessibleEvent *event, void *user_data);
+static void report_description_changed_event (const AccessibleEvent *event, void *user_data);
+static void report_parent_changed_event (const AccessibleEvent *event, void *user_data);
+static void report_window_event (const AccessibleEvent *event, void *user_data);
+static void report_table_summary_event (const AccessibleEvent *event, void *user_data);
+static void report_table_header_event (const AccessibleEvent *event, void *user_data);
+static void report_table_caption_event (const AccessibleEvent *event, void *user_data);
+static void report_table_row_description_event (const AccessibleEvent *event, void *user_data);
+static void report_table_column_description_event (const AccessibleEvent *event, void *user_data);
static void timing_test_event (const AccessibleEvent *event, void *user_data);
+static SPIBoolean report_mouse_event (const AccessibleDeviceEvent *event, void *user_data);
static AccessibleEventListener *generic_listener;
static AccessibleEventListener *specific_listener;
+static AccessibleEventListener *detail1_listener;
static AccessibleEventListener *test_listener;
+static AccessibleEventListener *text_listener;
+static AccessibleEventListener *text_selection_listener;
+static AccessibleEventListener *active_descendant_listener;
+static AccessibleEventListener *children_changed_listener;
+static AccessibleEventListener *name_changed_listener;
+static AccessibleEventListener *description_changed_listener;
+static AccessibleEventListener *parent_changed_listener;
+static AccessibleEventListener *window_listener;
+static AccessibleEventListener *table_summary_listener;
+static AccessibleEventListener *table_header_listener;
+static AccessibleEventListener *table_caption_listener;
+static AccessibleEventListener *table_row_description_listener;
+static AccessibleEventListener *table_column_description_listener;
+static AccessibleDeviceListener *mouse_device_listener;
static gint n_elements_traversed = 0;
static GTimer *timer;
}
}
+ fprintf (stderr, "RUNNING\n");
+
SPI_init ();
generic_listener = SPI_createAccessibleEventListener (
report_event, NULL);
specific_listener = SPI_createAccessibleEventListener (
report_detail_event, NULL);
+ text_listener = SPI_createAccessibleEventListener (
+ report_text_event, NULL);
+ text_selection_listener = SPI_createAccessibleEventListener (
+ report_text_selection_event, NULL);
+ active_descendant_listener = SPI_createAccessibleEventListener (
+ report_active_descendant_event, NULL);
+ children_changed_listener = SPI_createAccessibleEventListener (
+ report_children_changed_event, NULL);
+ name_changed_listener = SPI_createAccessibleEventListener (
+ report_name_changed_event, NULL);
+ description_changed_listener = SPI_createAccessibleEventListener (
+ report_description_changed_event, NULL);
+ parent_changed_listener = SPI_createAccessibleEventListener (
+ report_parent_changed_event, NULL);
+ window_listener = SPI_createAccessibleEventListener (
+ report_window_event, NULL);
+ table_summary_listener = SPI_createAccessibleEventListener (
+ report_table_summary_event, NULL);
+ table_header_listener = SPI_createAccessibleEventListener (
+ report_table_header_event, NULL);
+ table_caption_listener = SPI_createAccessibleEventListener (
+ report_table_caption_event, NULL);
+ table_row_description_listener = SPI_createAccessibleEventListener (
+ report_table_row_description_event, NULL);
+ table_column_description_listener = SPI_createAccessibleEventListener (
+ report_table_column_description_event, NULL);
test_listener = SPI_createAccessibleEventListener (
timing_test_event, NULL);
+ mouse_device_listener = SPI_createAccessibleDeviceListener (
+ report_mouse_event, NULL);
+ detail1_listener = SPI_createAccessibleEventListener (
+ report_detail1_event, NULL);
SPI_registerGlobalEventListener (generic_listener,
"focus:");
SPI_registerGlobalEventListener (specific_listener,
"mouse:abs");
}
+ SPI_registerDeviceEventListener (mouse_device_listener,
+ SPI_BUTTON_PRESSED | SPI_BUTTON_RELEASED,
+ NULL);
+ SPI_registerGlobalEventListener (specific_listener,
+ "keyboard:modifiers");
SPI_registerGlobalEventListener (generic_listener,
"object:property-change");
- SPI_registerGlobalEventListener (specific_listener,
+ SPI_registerGlobalEventListener (name_changed_listener,
"object:property-change:accessible-name");
+ SPI_registerGlobalEventListener (description_changed_listener,
+ "object:property-change:accessible-description");
+ SPI_registerGlobalEventListener (parent_changed_listener,
+ "object:property-change:accessible-parent");
SPI_registerGlobalEventListener (generic_listener,
"object:state-changed");
- SPI_registerGlobalEventListener (specific_listener,
- "object:state-changed:focused");
+/* SPI_registerGlobalEventListener (specific_listener,
+ "object:state-changed:focused"); */
SPI_registerGlobalEventListener (generic_listener,
"object:selection-changed");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (children_changed_listener,
"object:children-changed");
- SPI_registerGlobalEventListener (specific_listener,
- "object:children-changed:add");
+ SPI_registerGlobalEventListener (active_descendant_listener,
+ "object:active-descendant");
SPI_registerGlobalEventListener (generic_listener,
"object:visible-data-changed");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (text_selection_listener,
"object:text-selection-changed");
SPI_registerGlobalEventListener (generic_listener,
"object:text-caret-moved");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (text_listener,
"object:text-changed");
SPI_registerGlobalEventListener (generic_listener,
"object:column-inserted");
"object:row-deleted");
SPI_registerGlobalEventListener (generic_listener,
"object:model-changed");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (detail1_listener,
+ "object:link-selected");
+ SPI_registerGlobalEventListener (window_listener,
"window:minimize");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:maximize");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:restore");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:activate");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:deactivate");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:close");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:lower");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:raise");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:resize");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:shade");
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (window_listener,
"window:unshade");
+ SPI_registerGlobalEventListener (table_summary_listener,
+ "object:property-change:accessible-table-summary");
+ SPI_registerGlobalEventListener (table_header_listener,
+ "object:property-change:accessible-table-row-header");
+ SPI_registerGlobalEventListener (table_header_listener,
+ "object:property-change:accessible-table-column-header");
+ SPI_registerGlobalEventListener (table_summary_listener,
+ "object:property-change:accessible-table-summary");
+ SPI_registerGlobalEventListener (table_row_description_listener,
+ "object:property-change:accessible-table-row-description");
+ SPI_registerGlobalEventListener (table_column_description_listener,
+ "object:property-change:accessible-table-column-description");
SPI_registerGlobalEventListener (test_listener,
"object:test");
#ifdef NOT_YET_IMPLEMENTED
}
void
+report_detail1_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d\n", event->type, s,
+ event->detail1);
+ if (s) SPI_freeString (s);
+}
+
+void
+report_text_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleTextChangedEvent_getChangeString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_text_selection_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleTextSelectionChangedEvent_getSelectionString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_active_descendant_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ char *s1;
+ Accessible *ao;
+
+ ao = AccessibleActiveDescendantChangedEvent_getActiveDescendant (event);
+ s1 = Accessible_getName (ao);
+ fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ s ? s : "<null>", s1 ? s1 : "<null>",
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ SPI_freeString (s1);
+ Accessible_unref (ao);
+}
+void
+report_children_changed_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ char *s1;
+ Accessible *ao;
+
+ ao = AccessibleChildChangedEvent_getChildAccessible (event);
+ s1 = Accessible_getName (ao);
+ fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ s ? s : "<null>", s1 ? s1 : "<null>",
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ SPI_freeString (s1);
+ Accessible_unref (ao);
+}
+
+void
+report_name_changed_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleNameChangedEvent_getNameString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_description_changed_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleDescriptionChangedEvent_getDescriptionString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_parent_changed_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ char *s1;
+ Accessible *ao;
+
+ ao = AccessibleParentChangedEvent_getParentAccessible (event);
+ s1 = Accessible_getName (ao);
+ fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ s ? s : "<null>", s1 ? s1 : "<null>",
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ SPI_freeString (s1);
+ Accessible_unref (ao);
+}
+
+void
+report_window_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleWindowEvent_getTitleString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_table_summary_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ char *s1;
+ Accessible *ao;
+
+ ao = AccessibleTableSummaryChangedEvent_getSummaryAccessible (event);
+ s1 = Accessible_getName (ao);
+ fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ s ? s : "<null>", s1 ? s1 : "<null>",
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ SPI_freeString (s1);
+ Accessible_unref (ao);
+}
+
+void
+report_table_header_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ char *s1;
+ Accessible *ao;
+
+ ao = AccessibleTableHeaderChangedEvent_getHeaderAccessible (event);
+ s1 = Accessible_getName (ao);
+ fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ s ? s : "<null>", s1 ? s1 : "<null>",
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ SPI_freeString (s1);
+ Accessible_unref (ao);
+}
+
+void
+report_table_caption_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleTableCaptionChangedEvent_getCaptionString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_table_row_description_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleTableRowDescriptionChangedEvent_getDescriptionString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+void
+report_table_column_description_event (const AccessibleEvent *event, void *user_data)
+{
+ char *s = Accessible_getName (event->source);
+ fprintf (stderr, "(detail) %s %s %d %d\n", event->type, s,
+ event->detail1, event->detail2);
+ SPI_freeString (s);
+ s = AccessibleTableColumnDescriptionChangedEvent_getDescriptionString (event);
+ fprintf (stderr, "context string %s\n", (s) ? s : "<nil>");
+ SPI_freeString (s);
+}
+
+SPIBoolean
+report_mouse_event (const AccessibleDeviceEvent *event, void *user_data)
+{
+ fprintf (stderr, "mouse event %ld %d %x %x\n",
+ event->keyID,
+ (int) event->keycode,
+ (unsigned) event->type,
+ (unsigned) event->modifiers);
+ return FALSE;
+}
+
+void
timing_test_event (const AccessibleEvent *event, void *user_data)
{
static long count = 0;