diff options
Diffstat (limited to 'test/event-listener-test.c')
-rw-r--r-- | test/event-listener-test.c | 646 |
1 files changed, 0 insertions, 646 deletions
diff --git a/test/event-listener-test.c b/test/event-listener-test.c deleted file mode 100644 index 1571d40..0000000 --- a/test/event-listener-test.c +++ /dev/null @@ -1,646 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * 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 - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * 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 traverse_accessible_tree (Accessible *accessible); - -static void report_event (const AccessibleEvent *event, void *user_data); -static void report_caret_event (const AccessibleEvent *event, void *user_data); -static void report_bounds_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_changed_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 *bounds_listener; -static AccessibleEventListener *detail1_listener; -static AccessibleEventListener *test_listener; -static AccessibleEventListener *text_listener; -static AccessibleEventListener *caret_listener; -static AccessibleEventListener *text_selection_listener; -static AccessibleEventListener *active_descendant_changed_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; - -static gboolean report_mouse_events = TRUE; - -void -usage_and_exit( void ) -{ - g_print("\nUsage: event-listener-test [-h] [-m]\n"); - g_print(" -h : prints this usage message.\n"); - g_print(" -m : disable mouse event reporting.\n\n"); - - exit( 1 ); -} - -int -main (int argc, char **argv) -{ - int c; - - /* Parse Command-line */ - if ( argc > 1 ) { - while ( ( c = getopt( argc, argv, "hm")) != EOF ) { - switch( c ) { - case 'm': - report_mouse_events = FALSE; - break; - default: - usage_and_exit(); - break; - } - } - if ( optind < argc ) { - usage_and_exit(); - } - } - - fprintf (stderr, "RUNNING\n"); - - SPI_init (); - - generic_listener = SPI_createAccessibleEventListener ( - report_event, NULL); - specific_listener = SPI_createAccessibleEventListener ( - report_detail_event, NULL); - bounds_listener = SPI_createAccessibleEventListener ( - report_bounds_event, NULL); - text_listener = SPI_createAccessibleEventListener ( - report_text_event, NULL); - caret_listener = SPI_createAccessibleEventListener ( - report_caret_event, NULL); - text_selection_listener = SPI_createAccessibleEventListener ( - report_text_selection_event, NULL); - active_descendant_changed_listener = SPI_createAccessibleEventListener ( - report_active_descendant_changed_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:"); - if ( report_mouse_events ) { - SPI_registerGlobalEventListener (specific_listener, - "mouse:rel"); - SPI_registerGlobalEventListener (specific_listener, - "mouse:button"); - 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 (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 (generic_listener, - "object:selection-changed"); - - SPI_registerGlobalEventListener (children_changed_listener, - "object:children-changed"); - SPI_registerGlobalEventListener (active_descendant_changed_listener, - "object:active-descendant-changed"); - SPI_registerGlobalEventListener (generic_listener, - "object:visible-data-changed"); - SPI_registerGlobalEventListener (text_selection_listener, - "object:text-selection-changed"); - SPI_registerGlobalEventListener (caret_listener, - "object:text-caret-moved"); - SPI_registerGlobalEventListener (text_listener, - "object:text-changed"); - SPI_registerGlobalEventListener (generic_listener, - "object:column-inserted"); - SPI_registerGlobalEventListener (generic_listener, - "object:row-inserted"); - SPI_registerGlobalEventListener (generic_listener, - "object:column-reordered"); - SPI_registerGlobalEventListener (generic_listener, - "object:row-reordered"); - SPI_registerGlobalEventListener (generic_listener, - "object:column-deleted"); - SPI_registerGlobalEventListener (generic_listener, - "object:row-deleted"); - SPI_registerGlobalEventListener (generic_listener, - "object:model-changed"); - SPI_registerGlobalEventListener (detail1_listener, - "object:link-selected"); -#if 0 - SPI_registerGlobalEventListener (bounds_listener, - "object:bounds-changed"); -#endif - SPI_registerGlobalEventListener (window_listener, - "window:minimize"); - SPI_registerGlobalEventListener (window_listener, - "window:maximize"); - SPI_registerGlobalEventListener (window_listener, - "window:restore"); - SPI_registerGlobalEventListener (window_listener, - "window:activate"); - SPI_registerGlobalEventListener (window_listener, - "window:create"); - SPI_registerGlobalEventListener (window_listener, - "window:deactivate"); - SPI_registerGlobalEventListener (window_listener, - "window:close"); - SPI_registerGlobalEventListener (window_listener, - "window:lower"); - SPI_registerGlobalEventListener (window_listener, - "window:raise"); - SPI_registerGlobalEventListener (window_listener, - "window:resize"); - SPI_registerGlobalEventListener (window_listener, - "window:shade"); - 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 - /* event below possibly should just be property change? */ - SPI_registerGlobalEventListener (generic_listener, - "window:restyle"); - SPI_registerGlobalEventListener (generic_listener, - "window:desktop-create"); - SPI_registerGlobalEventListener (generic_listener, - "window:desktop-destroy"); -#endif - - timer = g_timer_new (); - traverse_accessible_tree (SPI_getDesktop (0)); - g_print ("Time for first traversal of %d elements: %lf\n", - n_elements_traversed, - g_timer_elapsed (timer, NULL)); - g_timer_start (timer); - traverse_accessible_tree (SPI_getDesktop (0)); - g_timer_stop (timer); - g_print ("Time for subsequent traversal %f\n", g_timer_elapsed (timer, NULL)); - g_print ("[%f elements/sec, %f SPI calls/sec]\n", - n_elements_traversed/g_timer_elapsed(timer, NULL), - (n_elements_traversed*8+1)/g_timer_elapsed(timer, NULL)); - g_timer_reset (timer); - SPI_event_main (); - - putenv ("AT_BRIDGE_SHUTDOWN=1"); - - /* - * TODO: Add a key event listener that calls test_exit, to - * deregister and cleanup appropriately. - */ - - return SPI_exit (); -} - -static void -traverse_accessible_tree (Accessible *accessible) -{ - int n_children; - int i; - char *name; - char *role_name; - Accessible *child; - - n_elements_traversed++; - name = Accessible_getName (accessible); - role_name = Accessible_getRoleName (accessible); -#ifdef VERBOSE - fprintf (stdout, "[%s] \"%s\"\n", - role_name, name); -#endif - SPI_freeString (name); - SPI_freeString (role_name); - n_children = Accessible_getChildCount (accessible); - if (!Accessible_isTable (accessible)) - { - for (i = 0; i < n_children; ++i) - { - child = Accessible_getChildAtIndex (accessible, i); - traverse_accessible_tree (child); - Accessible_unref (child); - } - } -} - -void -report_event (const AccessibleEvent *event, void *user_data) -{ - static long count = 0; - char *s = Accessible_getName (event->source); - fprintf (stderr, "%s %s\n", event->type, s); - if (s) SPI_freeString (s); - if (count == 0) { - g_timer_reset (timer); - g_timer_start (timer); - } - ++count; - if ((count % 100) == 0) { - g_print ("%ld events received, %f events/sec\n", - count, - count/g_timer_elapsed(timer, NULL)); - } - - /* check for Table interface - if present, query selections */ - if (Accessible_isTable (event->source)) - { - gint n_selected_rows = 0; - gint n_selected_cols = 0; - long int *rows, *cols; - AccessibleTable *table = Accessible_getTable (event->source); - - n_selected_rows = AccessibleTable_getSelectedRows (table, &rows); - n_selected_cols = AccessibleTable_getSelectedColumns (table, &cols); - - g_print ("TABLE interface: selectedRows=%d, selectedCols = %d\n", - n_selected_rows, n_selected_cols); - } -} - -void -report_caret_event (const AccessibleEvent *event, void *user_data) -{ - char *s = Accessible_getName (event->source); - long int start, end, offset, line_start_begin; - long int line_start_end, line_end_begin, line_end_end; - - AccessibleText *text = Accessible_getText (event->source); - offset = event->detail1; - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_SENTENCE_START, - &start, &end); - fprintf (stderr, - "caret event from %s %s: offset %ld, SENTENCE_START offsets start=%ld, end=%ld\n", - event->type, s, offset, start, end); - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_SENTENCE_END, - &start, &end); - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_LINE_START, - &line_start_begin, &line_start_end); - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_LINE_END, - &line_end_begin, &line_end_end); - fprintf (stderr, - "SENTENCE_END: %ld - %ld; LINE_START: %ld - %ld; LINE_END: %ld - %ld\n", - start, end, line_start_begin, line_start_end, - line_end_begin, line_end_end); - - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_WORD_START, - &line_start_begin, &line_start_end); - AccessibleText_getTextAtOffset (text, offset, - SPI_TEXT_BOUNDARY_WORD_END, - &line_end_begin, &line_end_end); - fprintf (stderr, - "WORD_START: %ld - %ld; WORD_END: %ld - %ld\n", - line_start_begin, line_start_end, - line_end_begin, line_end_end); - - if (s) SPI_freeString (s); -} - -void -report_detail_event (const AccessibleEvent *event, void *user_data) -{ - char *s = Accessible_getName (event->source); - fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s, - event->detail1, event->detail2); - if (s) SPI_freeString (s); -} - -void -report_detail1_event (const AccessibleEvent *event, void *user_data) -{ - char *s = Accessible_getName (event->source); - fprintf (stderr, "(detail) %s %s %ld\n", event->type, s, - event->detail1); - if (s) SPI_freeString (s); -} - -void -report_bounds_event (const AccessibleEvent *event, void *user_data) -{ - char *s = Accessible_getName (event->source); - SPIRect *bounds = AccessibleBoundsChangedEvent_getNewBounds (event); - if (!bounds) fprintf (stderr, "bounds-changed event with no bounds?\n"); - fprintf (stderr, "(bounds-changed) %s %s %ld,%ld - %ld,%ld\n", event->type, s, - bounds->x, bounds->y, bounds->x + bounds->width, bounds->y + bounds->height); - SPI_freeRect (bounds); - 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 %ld %ld\n", event->type, s, - event->detail1, event->detail2); - SPI_freeString (s); - s = AccessibleTextChangedEvent_getChangeString (event); - fprintf (stderr, "context string %s\n", (s) ? s : "<nil>"); - if (s) 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 %ld %ld\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_changed_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 %ld %ld\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 = NULL, *s2, *s3 = NULL; - Accessible *ao; - - ao = AccessibleChildChangedEvent_getChildAccessible (event); - if (ao) s1 = Accessible_getName (ao); - s2 = Accessible_getRoleName (event->source); - if (ao) s3 = Accessible_getRoleName (ao); - fprintf (stderr, "(detail) %s parent: %s [%s] child: %s [%s] %ld %ld\n", - event->type, - s ? s : "<null>", - s2, - s1 ? s1 : "<null>", - s3 ? s3 : "<null>", - event->detail1, event->detail2); - SPI_freeString (s); - SPI_freeString (s1); - SPI_freeString (s2); - SPI_freeString (s3); - 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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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 %ld %ld\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; - if (count == 0) g_timer_start (timer); - ++count; - if ((count % 500) == 0) { - g_print ("%ld events received, %f events/sec\n", - count, - count/g_timer_elapsed(timer, NULL)); - } -} - -void -test_exit (void) -{ - SPI_deregisterGlobalEventListenerAll (generic_listener); - AccessibleEventListener_unref (generic_listener); - SPI_deregisterGlobalEventListenerAll (specific_listener); - AccessibleEventListener_unref (specific_listener); -} |