static void delete_text_cb (GtkEditable *editable,
gint start,
gint end);
-static void changed_cb (GtkEditable *editable);
static gboolean check_for_selection_change (GtkEntryAccessible *entry,
GtkEntry *gtk_entry);
/* Set up signal callbacks */
g_signal_connect (entry, "insert-text", G_CALLBACK (insert_text_cb), NULL);
g_signal_connect (entry, "delete-text", G_CALLBACK (delete_text_cb), NULL);
- g_signal_connect (entry, "changed", G_CALLBACK (changed_cb), NULL);
if (gtk_entry_get_visibility (entry))
obj->role = ATK_ROLE_TEXT;
static void
_gtk_entry_accessible_init (GtkEntryAccessible *entry)
{
- entry->length_insert = 0;
- entry->length_delete = 0;
entry->cursor_position = 0;
entry->selection_bound = 0;
}
return;
accessible = GTK_ENTRY_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable)));
- if (accessible->length_insert == 0)
- {
- accessible->position_insert = *position;
- accessible->length_insert = g_utf8_strlen (new_text, new_text_length);
- }
+
+ g_signal_emit_by_name (accessible,
+ "text-changed::insert",
+ *position,
+ g_utf8_strlen (new_text, new_text_length));
}
/* We connect to GtkEditable::delete-text, since it carries
{
GtkEntryAccessible *accessible;
+ accessible = GTK_ENTRY_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable)));
+
if (end < 0)
{
const gchar *text;
if (end == start)
return;
- accessible = GTK_ENTRY_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable)));
- if (accessible->length_delete == 0)
- {
- accessible->position_delete = start;
- accessible->length_delete = end - start;
- }
-}
-
-/* Note the assumption here: A single ::changed emission
- * will only collect a single deletion/insertion, and there
- * won't be multiple insertions or deletions in a single
- * change.
- */
-static void
-changed_cb (GtkEditable *editable)
-{
- GtkEntryAccessible *accessible;
-
- accessible = GTK_ENTRY_ACCESSIBLE (gtk_widget_get_accessible (GTK_WIDGET (editable)));
-
- if (accessible->length_delete > 0)
- {
- g_signal_emit_by_name (accessible,
- "text-changed::delete",
- accessible->position_delete,
- accessible->length_delete);
- accessible->length_delete = 0;
- }
- if (accessible->length_insert > 0)
- {
- g_signal_emit_by_name (accessible,
- "text-changed::insert",
- accessible->position_insert,
- accessible->length_insert);
- accessible->length_insert = 0;
- }
+ g_signal_emit_by_name (accessible,
+ "text-changed::delete",
+ start,
+ end);
}
static gboolean