[gtk+/touch-selection-improvements: 7/9] textview: Make "extend selection" only extend



commit 5fa7ddae32cf3370ea0df60a7caba0ff67aa0716
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Nov 20 14:03:07 2014 +0100

    textview: Make "extend selection" only extend
    
    This mode could also shrink the selection, plus the starting point would
    seem somewhat arbitrary (actually dependent on the dragging direction of
    the last selection).
    
    Made this mode more consistent by only allowing it to extend the selection,
    only in one direction for each operation, and so it keeps the current
    selection as a minimum.

 gtk/gtktextview.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 5b1e353..6eb70d4 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -7068,10 +7068,11 @@ gtk_text_view_drag_gesture_update (GtkGestureDrag *gesture,
       extend_selection (text_view, data->granularity, &start, &end);
 
       /* either the selection extends to the front, or end (or not) */
-      if (gtk_text_iter_compare (&cursor, &orig_start) < 0)
-        gtk_text_buffer_select_range (buffer, &start, &orig_end);
-      else
-        gtk_text_buffer_select_range (buffer, &end, &orig_start);
+      if (gtk_text_iter_compare (&orig_start, &start) < 0)
+        start = orig_start;
+      if (gtk_text_iter_compare (&orig_end, &end) > 0)
+        end = orig_end;
+      gtk_text_buffer_select_range (buffer, &start, &end);
 
       gtk_text_view_scroll_mark_onscreen (text_view,
                                          gtk_text_buffer_get_insert (buffer));
@@ -7221,15 +7222,18 @@ gtk_text_view_start_selection_drag (GtkTextView          *text_view,
            gtk_text_iter_compare (&old_ins, &old_bound) <= 0))
         {
           bound = old_end;
-          orig_start = old_end;
-          orig_end = old_end;
         }
       else
         {
           ins = bound;
           bound = old_start;
-          orig_end = bound;
-          orig_start = bound;
+        }
+
+      /* Store any previous selection */
+      if (gtk_text_iter_compare (&old_start, &old_end) != 0)
+        {
+          orig_start = old_ins;
+          orig_end = old_bound;
         }
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]