From 2ac3d0a59dce1656f6a46781797e270e54f88531 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 12 Apr 2023 11:24:46 +0200 Subject: [PATCH] textview: Reset press counter if double/triple clicking on a different line If we click close enough between lines, and with the maximum distances applied by GtkGestureClick we could jump between lines when handling double/triple click for word/line selection. Ensure that the whole operation stays in the same line and reset the gesture/counter if we do move between lines, so we start from scratch in the new line. --- gtk/gtktextview.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index c384002f76..04924ca829 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -5640,6 +5640,26 @@ gtk_text_view_click_gesture_pressed (GtkGestureClick *gesture, if (state & GDK_SHIFT_MASK) extends = TRUE; + if (n_press > 1) + { + GtkTextBuffer *buffer; + GtkTextIter cur, ins; + + buffer = get_buffer (text_view); + get_iter_from_gesture (text_view, GTK_GESTURE (gesture), + &cur, NULL, NULL); + gtk_text_buffer_get_iter_at_mark (buffer, &ins, + gtk_text_buffer_get_insert (buffer)); + + /* Reset count if double/triple clicking on a different line */ + if (gtk_text_iter_get_line (&cur) != + gtk_text_iter_get_line (&ins)) + { + gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture)); + n_press = 1; + } + } + switch (n_press) { case 1: -- 2.30.2