static void log_object_text_caret_moved (EventLog *log, const AccessibleEvent *event) { AccessibleText *text; long int start, end, offset, text_length; if (!log_sanity_check_text (log, event)) return; offset = event->detail1; log_message (log, "caret moved (%s) to %d on ", event->type, offset); log_accessible (log, event->source); text = Accessible_getText (event->source); offset = event->detail1; text_length = AccessibleText_getCharacterCount (text); if (offset < 0 || offset > text_length) { log_error (log, TRUE, "caret moved beyond end of text %d characters long", text_length); return; } AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_SENTENCE_START, &start, &end); log_message (log, "offsets: sentance_start %d->%d, ", start, end); AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_SENTENCE_END, &start, &end); log_message (log, "sentance_end %d->%d, ", start, end); AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_LINE_START, &start, &end); log_message (log, "line_start %d->%d, ", start, end); AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_LINE_END, &start, &end); log_message (log, "line_end %d->%d, ", start, end); AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_WORD_START, &start, &end); log_message (log, "word_start %d->%d, ", start, end); AccessibleText_getTextAtOffset (text, offset, SPI_TEXT_BOUNDARY_WORD_END, &start, &end); log_message (log, "word_end %d->%d, ", start, end); log_message (log, "\n"); }
static void test_text (AccessibleText *text) { char *str; fprintf (stderr, "Testing text ...\n"); g_assert (AccessibleText_getCharacterCount (text) == strlen (TEST_STRING_A)); str = AccessibleText_getText (text, 0, WHOLE_STRING); g_assert (!strcmp (str, TEST_STRING_A)); SPI_freeString (str); str = AccessibleText_getText (text, 0, 5); g_assert (!strncmp (str, TEST_STRING_A, 5)); SPI_freeString (str); AccessibleText_setCaretOffset (text, 7); g_assert (AccessibleText_getCaretOffset (text) == 7); /* FIXME: lots more tests - selections etc. etc. */ }
char * windows_text ( SQByteArray * _pointer ) { char * text = NULL; Accessible * accessibleObject = windows_to_accessible(_pointer); if ( Accessible_isText(accessibleObject) == SPI_TRUE ) { AccessibleText * textObj = Accessible_getText(accessibleObject); long count = AccessibleText_getCharacterCount ( textObj ); text = AccessibleText_getText ( textObj, 0, count ); AccessibleText_unref ( textObj ); return windows_string(text); } else if ( Accessible_isValue(accessibleObject) == SPI_TRUE ) { AccessibleValue * valueObj = Accessible_getValue(accessibleObject); double current = AccessibleValue_getCurrentValue ( valueObj ); text = malloc(SQ_MAX_VALUE_LENGTH); SNPRINTF_FUNCTION ( text, SQ_MAX_VALUE_LENGTH, "%f", current ); return text; } return SQ_STRDUP_FUNCTION(""); }