static void gtk_label_accessible_notify_gtk (GObject *obj, GParamSpec *pspec) { GtkWidget *widget = GTK_WIDGET (obj); AtkObject* atk_obj = gtk_widget_get_accessible (widget); GtkLabelAccessible *accessible; gint length; accessible = GTK_LABEL_ACCESSIBLE (atk_obj); if (g_strcmp0 (pspec->name, "label") == 0) { const gchar *text; text = gtk_label_get_text (GTK_LABEL (widget)); if (g_strcmp0 (accessible->text, text) == 0) return; /* Create a delete text and an insert text signal */ length = g_utf8_strlen (accessible->text, -1); if (length > 0) g_signal_emit_by_name (atk_obj, "text-changed::delete", 0, length); g_free (accessible->text); accessible->text = g_strdup (text); length = g_utf8_strlen (accessible->text, -1); if (length > 0) g_signal_emit_by_name (atk_obj, "text-changed::insert", 0, length); if (atk_obj->name == NULL) /* The label has changed so notify a change in accessible-name */ g_object_notify (G_OBJECT (atk_obj), "accessible-name"); g_signal_emit_by_name (atk_obj, "visible-data-changed"); } else if (g_strcmp0 (pspec->name, "cursor-position") == 0) { g_signal_emit_by_name (atk_obj, "text-caret-moved", _gtk_label_get_cursor_position (GTK_LABEL (widget))); if (check_for_selection_change (accessible, GTK_LABEL (widget))) g_signal_emit_by_name (atk_obj, "text-selection-changed"); } else if (g_strcmp0 (pspec->name, "selection-bound") == 0) { if (check_for_selection_change (accessible, GTK_LABEL (widget))) g_signal_emit_by_name (atk_obj, "text-selection-changed"); } else GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_label_accessible_parent_class)->notify_gtk (obj, pspec); }
static void gtk_entry_accessible_notify_gtk (GObject *obj, GParamSpec *pspec) { GtkWidget *widget; AtkObject* atk_obj; GtkEntry* gtk_entry; GtkEntryAccessible* entry; widget = GTK_WIDGET (obj); atk_obj = gtk_widget_get_accessible (widget); gtk_entry = GTK_ENTRY (widget); entry = GTK_ENTRY_ACCESSIBLE (atk_obj); if (g_strcmp0 (pspec->name, "cursor-position") == 0) { if (check_for_selection_change (entry, gtk_entry)) g_signal_emit_by_name (atk_obj, "text-selection-changed"); /* * The entry cursor position has moved so generate the signal. */ g_signal_emit_by_name (atk_obj, "text-caret-moved", entry->cursor_position); } else if (g_strcmp0 (pspec->name, "selection-bound") == 0) { if (check_for_selection_change (entry, gtk_entry)) g_signal_emit_by_name (atk_obj, "text-selection-changed"); } else if (g_strcmp0 (pspec->name, "editable") == 0) { gboolean value; g_object_get (obj, "editable", &value, NULL); atk_object_notify_state_change (atk_obj, ATK_STATE_EDITABLE, value); } else if (g_strcmp0 (pspec->name, "visibility") == 0) { gboolean visibility; AtkRole new_role; visibility = gtk_entry_get_visibility (gtk_entry); new_role = visibility ? ATK_ROLE_TEXT : ATK_ROLE_PASSWORD_TEXT; atk_object_set_role (atk_obj, new_role); } else GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_entry_accessible_parent_class)->notify_gtk (obj, pspec); }