From: Carlos Garnacho Date: Sun, 27 Nov 2022 12:18:18 +0000 (+0100) Subject: gtktextview: Claim drag gesture after an actual selection change X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~65^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ed81c265ac1a27c6ab247f5a022b97450729e785;p=gtk4.git gtktextview: Claim drag gesture after an actual selection change This way, the drag gesture lets the click gesture ::release handler happen if there was no actual changes to the selected text (i.e. too short drags). This matches the ::release handler behavior match the situations in which the OSK was being invoked by the wayland GtkIMContext. --- diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 8679d8b264..7181993c4c 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -7418,6 +7418,9 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture, SelectionData *data; GdkDevice *device; GtkTextIter cursor; + GtkTextIter orig_start, orig_end; + GtkTextIter start, end; + GtkTextBuffer *buffer; data = g_object_get_qdata (G_OBJECT (gesture), quark_text_selection_data); sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)); @@ -7477,22 +7480,19 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture, g_assert (data != NULL); + buffer = get_buffer (text_view); + + gtk_text_buffer_get_iter_at_mark (buffer, &orig_start, data->orig_start); + gtk_text_buffer_get_iter_at_mark (buffer, &orig_end, data->orig_end); + /* Text selection */ if (data->granularity == SELECT_CHARACTERS) { move_mark_to_pointer_and_scroll (text_view, "insert"); + gtk_text_buffer_get_selection_bounds (buffer, &start, &end); } else { - GtkTextIter start, end; - GtkTextIter orig_start, orig_end; - GtkTextBuffer *buffer; - - buffer = get_buffer (text_view); - - gtk_text_buffer_get_iter_at_mark (buffer, &orig_start, data->orig_start); - gtk_text_buffer_get_iter_at_mark (buffer, &orig_end, data->orig_end); - get_iter_from_gesture (text_view, text_view->priv->drag_gesture, &cursor, NULL, NULL); @@ -7509,6 +7509,10 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture, gtk_text_buffer_get_insert (buffer)); } + if (gtk_text_iter_compare (&orig_start, &start) != 0 || + gtk_text_iter_compare (&orig_end, &end) != 0) + gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); + /* If we had to scroll offscreen, insert a timeout to do so * again. Note that in the timeout, even if the mouse doesn't * move, due to this scroll xoffset/yoffset will have changed