]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextbuffer.c
Add some documentation comments, fix some missing statics
[~andy/gtk] / gtk / gtktextbuffer.c
index 3271a557369cd6525e24cfc32be221dcc8fc6cd1..ec50c419cfbf9b49c84592e6a18ebf66a892ea9a 100644 (file)
@@ -336,7 +336,7 @@ set_table (GtkTextBuffer *buffer, GtkTextTagTable *table)
   if (table)
     {
       buffer->tag_table = table;
-      g_object_ref (G_OBJECT (buffer->tag_table));
+      g_object_ref (buffer->tag_table);
       _gtk_text_tag_table_add_buffer (table, buffer);
     }
 }
@@ -2009,17 +2009,42 @@ void
 gtk_text_buffer_place_cursor (GtkTextBuffer     *buffer,
                               const GtkTextIter *where)
 {
-  GtkTextIter real;
+  gtk_text_buffer_select_range (buffer, where, where);
+}
+
+
+/**
+ * gtk_text_buffer_select_range:
+ * @buffer: a #GtkTextBuffer
+ * @ins: where to put the "insert" mark
+ * @bound: where to put the "selection_bound" mark
+ *
+ * This function moves the "insert" and "selection_bound" marks
+ * simultaneously.  If you move them in two steps
+ * with gtk_text_buffer_move_mark(), you will temporarily select a
+ * region in between their old and new locations, which can be pretty
+ * inefficient since the temporarily-selected region will force stuff
+ * to be recalculated. This function moves them as a unit, which can
+ * be optimized.
+ **/
+void
+gtk_text_buffer_select_range (GtkTextBuffer     *buffer,
+                             const GtkTextIter *ins,
+                              const GtkTextIter *bound)
+{
+  GtkTextIter real_ins;
+  GtkTextIter real_bound;
 
   g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
 
-  real = *where;
+  real_ins = *ins;
+  real_bound = *bound;
 
-  _gtk_text_btree_place_cursor (get_btree (buffer), &real);
-  gtk_text_buffer_mark_set (buffer, &real,
+  _gtk_text_btree_select_range (get_btree (buffer), &real_ins, &real_bound);
+  gtk_text_buffer_mark_set (buffer, &real_ins,
                             gtk_text_buffer_get_mark (buffer,
                                                       "insert"));
-  gtk_text_buffer_mark_set (buffer, &real,
+  gtk_text_buffer_mark_set (buffer, &real_bound,
                             gtk_text_buffer_get_mark (buffer,
                                                       "selection_bound"));
 }
@@ -2930,17 +2955,23 @@ clipboard_text_received (GtkClipboard *clipboard,
   if (str)
     {
       GtkTextIter insert_point;
+      
+      if (request_data->interactive) 
+       gtk_text_buffer_begin_user_action (buffer);
 
       pre_paste_prep (request_data, &insert_point);
       
-      if (request_data->interactive)
-        gtk_text_buffer_insert_interactive (buffer, &insert_point,
-                                            str, -1, request_data->default_editable);
+      if (request_data->interactive) 
+       gtk_text_buffer_insert_interactive (buffer, &insert_point,
+                                           str, -1, request_data->default_editable);
       else
         gtk_text_buffer_insert (buffer, &insert_point,
                                 str, -1);
 
       post_paste_cleanup (request_data);
+      
+      if (request_data->interactive) 
+       gtk_text_buffer_end_user_action (buffer);
     }
 
   g_object_unref (buffer);
@@ -3018,18 +3049,22 @@ paste_from_buffer (ClipboardRequest    *request_data,
                    const GtkTextIter   *end)
 {
   GtkTextIter insert_point;
+  GtkTextBuffer *buffer = request_data->buffer;
   
   /* We're about to emit a bunch of signals, so be safe */
   g_object_ref (src_buffer);
   
   pre_paste_prep (request_data, &insert_point);
   
+  if (request_data->interactive) 
+    gtk_text_buffer_begin_user_action (buffer);
+
   if (!gtk_text_iter_equal (start, end))
     {
       if (!request_data->interactive ||
           (gtk_text_iter_can_insert (&insert_point,
                                      request_data->default_editable)))
-        gtk_text_buffer_real_insert_range (request_data->buffer,
+        gtk_text_buffer_real_insert_range (buffer,
                                            &insert_point,
                                            start,
                                            end,
@@ -3038,6 +3073,9 @@ paste_from_buffer (ClipboardRequest    *request_data,
 
   post_paste_cleanup (request_data);
       
+  if (request_data->interactive) 
+    gtk_text_buffer_end_user_action (buffer);
+
   g_object_unref (src_buffer);
   g_free (request_data);
 }