Commit a1f206b8 authored by Samuel Thibault's avatar Samuel Thibault

gtktextviewaccessible: update cursor position after text suppression

delete_range_cb is set to be called before the text suppression done by
the gtktextlayout (otherwise it does not work properly). But at that
point the cursor position is not yet up to date.  We thus need to move
the accessibility cursor notification to after the actual text
suppression, by using another callback.

This fixes cursor position in brltty screen reading.

(cherry picked from commit fa6994d0)
parent 67360c9d
...@@ -48,6 +48,10 @@ static void delete_range_cb (GtkTextBuffer *buffer, ...@@ -48,6 +48,10 @@ static void delete_range_cb (GtkTextBuffer *buffer,
GtkTextIter *arg1, GtkTextIter *arg1,
GtkTextIter *arg2, GtkTextIter *arg2,
gpointer user_data); gpointer user_data);
static void delete_range_after_cb (GtkTextBuffer *buffer,
GtkTextIter *arg1,
GtkTextIter *arg2,
gpointer user_data);
static void mark_set_cb (GtkTextBuffer *buffer, static void mark_set_cb (GtkTextBuffer *buffer,
GtkTextIter *arg1, GtkTextIter *arg1,
GtkTextMark *arg2, GtkTextMark *arg2,
...@@ -132,6 +136,7 @@ gtk_text_view_accessible_change_buffer (GtkTextViewAccessible *accessible, ...@@ -132,6 +136,7 @@ gtk_text_view_accessible_change_buffer (GtkTextViewAccessible *accessible,
{ {
g_signal_connect_after (new_buffer, "insert-text", G_CALLBACK (insert_text_cb), accessible); g_signal_connect_after (new_buffer, "insert-text", G_CALLBACK (insert_text_cb), accessible);
g_signal_connect (new_buffer, "delete-range", G_CALLBACK (delete_range_cb), accessible); g_signal_connect (new_buffer, "delete-range", G_CALLBACK (delete_range_cb), accessible);
g_signal_connect_after (new_buffer, "delete-range", G_CALLBACK (delete_range_after_cb), accessible);
g_signal_connect_after (new_buffer, "mark-set", G_CALLBACK (mark_set_cb), accessible); g_signal_connect_after (new_buffer, "mark-set", G_CALLBACK (mark_set_cb), accessible);
g_signal_emit_by_name (accessible, g_signal_emit_by_name (accessible,
...@@ -1801,6 +1806,15 @@ delete_range_cb (GtkTextBuffer *buffer, ...@@ -1801,6 +1806,15 @@ delete_range_cb (GtkTextBuffer *buffer,
"text-changed::delete", "text-changed::delete",
offset, offset,
length); length);
}
static void
delete_range_after_cb (GtkTextBuffer *buffer,
GtkTextIter *start,
GtkTextIter *end,
gpointer data)
{
GtkTextViewAccessible *accessible = data;
gtk_text_view_accessible_update_cursor (accessible, buffer); gtk_text_view_accessible_update_cursor (accessible, buffer);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment