From 5b9a7863cf63644ca0b5651cc79dbf9d90543caf 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 de42ea674a..3c25b5fb5a 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: