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 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;
int
main (int argc, char **argv)
{
- int i, j, c;
- int n_desktops;
- int n_apps;
- char *s;
- gdouble elapsed_time;
- Accessible *desktop;
- Accessible *application;
- const char *modules;
+ int c;
/* Parse Command-line */
if ( argc > 1 ) {
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_detail1_event, NULL);
SPI_registerGlobalEventListener (generic_listener,
- "focus:");
+ "focus:");
if ( report_mouse_events ) {
SPI_registerGlobalEventListener (specific_listener,
"mouse:rel");
NULL);
SPI_registerGlobalEventListener (specific_listener,
"keyboard:modifiers");
+
SPI_registerGlobalEventListener (generic_listener,
"object:property-change");
SPI_registerGlobalEventListener (name_changed_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:visible-data-changed");
SPI_registerGlobalEventListener (text_selection_listener,
"object:text-selection-changed");
-
- SPI_registerGlobalEventListener (generic_listener,
+ SPI_registerGlobalEventListener (caret_listener,
"object:text-caret-moved");
SPI_registerGlobalEventListener (text_listener,
"object:text-changed");
"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,
SPI_registerGlobalEventListener (window_listener,
"window:activate");
SPI_registerGlobalEventListener (window_listener,
+ "window:create");
+ SPI_registerGlobalEventListener (window_listener,
"window:deactivate");
SPI_registerGlobalEventListener (window_listener,
"window:close");
}
++count;
if ((count % 100) == 0) {
- g_print ("%d events received, %f events/sec\n",
+ 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 %d %d\n", event->type, s,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
if (s) SPI_freeString (s);
}
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,
+ 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 %d %d\n", event->type, s,
+ 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>");
- SPI_freeString (s);
+ 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 %d %d\n", event->type, s,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleTextSelectionChangedEvent_getSelectionString (event);
ao = AccessibleActiveDescendantChangedEvent_getActiveDescendant (event);
s1 = Accessible_getName (ao);
- fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ 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);
report_children_changed_event (const AccessibleEvent *event, void *user_data)
{
char *s = Accessible_getName (event->source);
- char *s1;
+ char *s1 = NULL, *s2, *s3 = NULL;
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>",
+ 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);
}
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleNameChangedEvent_getNameString (event);
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleDescriptionChangedEvent_getDescriptionString (event);
ao = AccessibleParentChangedEvent_getParentAccessible (event);
s1 = Accessible_getName (ao);
- fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ 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);
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleWindowEvent_getTitleString (event);
ao = AccessibleTableSummaryChangedEvent_getSummaryAccessible (event);
s1 = Accessible_getName (ao);
- fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ 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);
ao = AccessibleTableHeaderChangedEvent_getHeaderAccessible (event);
s1 = Accessible_getName (ao);
- fprintf (stderr, "(detail) %s parent: %s child: %s %d %d\n", event->type,
+ 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);
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleTableCaptionChangedEvent_getCaptionString (event);
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleTableRowDescriptionChangedEvent_getDescriptionString (event);
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,
+ fprintf (stderr, "(detail) %s %s %ld %ld\n", event->type, s,
event->detail1, event->detail2);
SPI_freeString (s);
s = AccessibleTableColumnDescriptionChangedEvent_getDescriptionString (event);
if (count == 0) g_timer_start (timer);
++count;
if ((count % 500) == 0) {
- g_print ("%d events received, %f events/sec\n",
+ g_print ("%ld events received, %f events/sec\n",
count,
count/g_timer_elapsed(timer, NULL));
}
}
void
-test_exit ()
+test_exit (void)
{
SPI_deregisterGlobalEventListenerAll (generic_listener);
AccessibleEventListener_unref (generic_listener);