/* * Update the contents of the widget with the data from our contents array. */ static void update_contents(AtkObject *obj, GtkWidget *widget) { guint caret, i; GString *s; caret = (guint)atk_text_get_caret_offset(ATK_TEXT(obj)); s = g_string_new(NULL); for (i = 0; i < contents->len; i++) { if (i == caret) { s = g_string_append(s, "[CARET]"); } s = g_string_append_unichar(s, g_array_index(contents, gunichar, i)); } if (i == caret) { s = g_string_append(s, "[CARET]"); } if (GTK_IS_LABEL(widget)) { gtk_label_set_text(GTK_LABEL(widget), s->str); gtk_label_set_selectable(GTK_LABEL(widget), atk_text_get_n_selections(ATK_TEXT(obj)) > 0); if (gtk_label_get_selectable(GTK_LABEL(widget))) { int selection_start, selection_end; atk_text_get_selection(ATK_TEXT(obj), 0, &selection_start, &selection_end); gtk_label_select_region(GTK_LABEL(widget), selection_start, selection_end); } } g_string_free(s, TRUE); }
JSRetainPtr<JSStringRef> AccessibilityUIElement::selectedTextRange() { if (!ATK_IS_TEXT(m_element.get())) return JSStringCreateWithCharacters(0, 0); gint start, end; g_free(atk_text_get_selection(ATK_TEXT(m_element.get()), 0, &start, &end)); GOwnPtr<gchar> selection(g_strdup_printf("{%d, %d}", start, end - start)); return JSStringCreateWithUTF8CString(selection.get()); }