]> Pileus Git - ~andy/gtk/commitdiff
extend selection if shift is down, bug #50939
authorHavoc Pennington <hp@pobox.com>
Mon, 31 Dec 2001 17:58:04 +0000 (17:58 +0000)
committerHavoc Pennington <hp@src.gnome.org>
Mon, 31 Dec 2001 17:58:04 +0000 (17:58 +0000)
2001-12-31  Havoc Pennington  <hp@pobox.com>

* gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
selection if shift is down, bug #50939
(gtk_text_view_button_press_event): add double/triple click
selection to the current selection if shift is down

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktextview.c

index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 7cc0af0eaf88632b283481b0d6a7e46c0658cdd0..04e2b898c6c9689b57b878168bd211ee1822673f 100644 (file)
@@ -1,3 +1,10 @@
+2001-12-31  Havoc Pennington  <hp@pobox.com>
+
+       * gtk/gtktextview.c (gtk_text_view_start_selection_drag): extend
+       selection if shift is down, bug #50939
+       (gtk_text_view_button_press_event): add double/triple click
+       selection to the current selection if shift is down
+
 2001-12-31  Havoc Pennington  <hp@pobox.com>
 
        * gtk/gtktextiter.c (gtk_text_iter_get_visible_line_index): fix 
index 8297329f660a1841a412716d605b04ea21e1a67f..9d46cd092c99075ef2e08b537717431f0de1d38a 100644 (file)
@@ -3513,8 +3513,8 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
             event->type == GDK_3BUTTON_PRESS) &&
            event->button == 1)
     {
-      GtkTextIter start, end;
-
+      GtkTextIter start, end;      
+      
       /* End the selection drag, otherwise we'd clear the new
        * word/line selection on button release
        */
@@ -3560,12 +3560,28 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
             }
         }
 
-      gtk_text_buffer_move_mark (get_buffer (text_view),
-                                 gtk_text_buffer_get_selection_bound (get_buffer (text_view)),
-                                 &start);
-      gtk_text_buffer_move_mark (get_buffer (text_view),
-                                 gtk_text_buffer_get_insert (get_buffer (text_view)),
-                                 &end);
+      if (event->state & GDK_SHIFT_MASK)
+        {
+          /* Take union of old and new selection */
+          GtkTextIter old_start, old_end;
+          
+          gtk_text_buffer_get_selection_bounds (get_buffer (text_view),
+                                                &old_start, &old_end);
+
+          gtk_text_iter_order (&start, &old_start);
+          gtk_text_iter_order (&old_end, &end);
+
+          /* Now start is the first of the starts, and end is the
+           * last of the ends
+           */
+        }
+      
+      gtk_text_buffer_move_mark_by_name (get_buffer (text_view),
+                                         "selection_bound",
+                                         &start);
+      gtk_text_buffer_move_mark_by_name (get_buffer (text_view),
+                                         "insert",
+                                         &end);
 
       text_view->just_selected_element = TRUE;
       
@@ -4590,14 +4606,45 @@ gtk_text_view_start_selection_drag (GtkTextView       *text_view,
                                     GdkEventButton    *button)
 {
   GtkTextIter newplace;
-
+  GtkTextBuffer *buffer;
+  
   g_return_if_fail (text_view->selection_drag_handler == 0);
 
   gtk_grab_add (GTK_WIDGET (text_view));
 
+  buffer = get_buffer (text_view);
+  
   newplace = *iter;
 
-  gtk_text_buffer_place_cursor (get_buffer (text_view), &newplace);
+  if (button->state & GDK_SHIFT_MASK)
+    {
+      /* Extend selection */
+      GtkTextIter start, end;
+
+      gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+
+      if (gtk_text_iter_compare (&newplace, &start) <= 0)
+        {
+          gtk_text_buffer_move_mark_by_name (buffer, "insert",
+                                             &newplace);
+
+          gtk_text_buffer_move_mark_by_name (buffer, "selection_bound",
+                                             &end);
+        }
+      else if (gtk_text_iter_compare (&newplace, &end) >= 0)
+        {
+          gtk_text_buffer_move_mark_by_name (buffer, "insert",
+                                             &newplace);
+
+          gtk_text_buffer_move_mark_by_name (buffer, "selection_bound",
+                                             &start);
+        }
+    }
+  else
+    {
+      /* Replace selection */
+      gtk_text_buffer_place_cursor (buffer, &newplace);
+    }
 
   text_view->selection_drag_handler = gtk_signal_connect (GTK_OBJECT (text_view),
                                                           "motion_notify_event",