static gboolean gail_label_remove_selection (AtkText *text, gint selection_num) { GtkWidget *widget; GtkLabel *label; gint start, end; widget = GTK_ACCESSIBLE (text)->widget; if (widget == NULL) /* State is defunct */ return FALSE; if (selection_num != 0) return FALSE; label = GTK_LABEL (widget); if (!gtk_label_get_selectable (label)) return FALSE; if (gtk_label_get_selection_bounds (label, &start, &end)) { gtk_label_select_region (label, 0, 0); return TRUE; } else return FALSE; }
static gboolean gail_label_set_selection (AtkText *text, gint selection_num, gint start_pos, gint end_pos) { GtkWidget *widget; GtkLabel *label; gint start, end; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); if (widget == NULL) /* State is defunct */ return FALSE; if (selection_num != 0) return FALSE; label = GTK_LABEL (widget); if (!gtk_label_get_selectable (label)) return FALSE; if (gtk_label_get_selection_bounds (label, &start, &end)) { gtk_label_select_region (label, start_pos, end_pos); return TRUE; } else return FALSE; }
static gboolean gtk_label_accessible_remove_selection (AtkText *text, gint selection_num) { GtkWidget *widget; GtkLabel *label; gint start, end; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); if (widget == NULL) return FALSE; if (selection_num != 0) return FALSE; label = GTK_LABEL (widget); if (!gtk_label_get_selectable (label)) return FALSE; if (gtk_label_get_selection_bounds (label, &start, &end)) { gtk_label_select_region (label, end, end); return TRUE; } else return FALSE; }
/* * 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); }
/* Edit->Select All */ void action_select_all(GtkAction *action, I7Document *document) { GtkWidget *widget = gtk_window_get_focus(GTK_WINDOW(document)); /* What actually happens depends on the type of widget that is focused */ if(WEBKIT_IS_WEB_VIEW(widget)) webkit_web_view_select_all(WEBKIT_WEB_VIEW(widget)); else if(GTK_IS_LABEL(widget) && gtk_label_get_selectable(GTK_LABEL(widget))) gtk_label_select_region(GTK_LABEL(widget), 0, -1); else if(GTK_IS_EDITABLE(widget)) gtk_editable_select_region(GTK_EDITABLE(widget), 0, -1); else if(GTK_IS_TEXT_VIEW(widget)) g_signal_emit_by_name(widget, "select-all", TRUE, NULL); else /* If we don't know how to select it, just select all in the source */ g_signal_emit_by_name(i7_document_get_default_view(document), "select-all", TRUE, NULL); }
static gboolean gtk_label_accessible_set_caret_offset (AtkText *text, gint offset) { GtkWidget *widget; GtkLabel *label; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); if (widget == NULL) return FALSE; label = GTK_LABEL (widget); if (!gtk_label_get_selectable (label)) return FALSE; gtk_label_select_region (label, offset, offset); return TRUE; }
static gboolean gail_label_set_caret_offset (AtkText *text, gint offset) { GtkWidget *widget; GtkLabel *label; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); if (widget == NULL) /* State is defunct */ return 0; label = GTK_LABEL (widget); if (gtk_label_get_selectable (label) && offset >= 0 && offset <= g_utf8_strlen (gtk_label_get_text (label), -1)) { gtk_label_select_region (label, offset, offset); return TRUE; } else return FALSE; }
static VALUE label_select_region(VALUE self, VALUE start_offset, VALUE end_offset) { gtk_label_select_region(_SELF(self), NUM2INT(start_offset), NUM2INT(end_offset)); return self; }