textview: Reset press counter if double/triple clicking on a different line
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 12 Apr 2023 09:24:46 +0000 (11:24 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 12 Apr 2023 09:27:41 +0000 (11:27 +0200)
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

index de42ea674a9f0942bc75937bc47b0d975d9417c4..3c25b5fb5abca385db7656b3470bfd5acd074c72 100644 (file)
@@ -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: