[gnome-builder] cursors: clear highlight after pasting



commit 6a093300b3435193c6b10535e04d6411820daf11
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jan 15 14:10:55 2021 -0800

    cursors: clear highlight after pasting
    
    This fixes some issues when pasting with regards to highlights.
    
    Related #451

 src/libide/sourceview/ide-cursor.c      | 17 +++++++++++++++++
 src/libide/sourceview/ide-cursor.h      |  1 +
 src/libide/sourceview/ide-source-view.c |  3 +++
 3 files changed, 21 insertions(+)
---
diff --git a/src/libide/sourceview/ide-cursor.c b/src/libide/sourceview/ide-cursor.c
index faa7411ba..02bf39060 100644
--- a/src/libide/sourceview/ide-cursor.c
+++ b/src/libide/sourceview/ide-cursor.c
@@ -207,6 +207,7 @@ ide_cursor_remove_cursors (IdeCursor *self)
   if (self->cursors != NULL)
     {
       GtkTextBuffer *buffer;
+      GtkTextIter begin, end;
       VirtualCursor *vc;
 
       buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->source_view));
@@ -224,6 +225,9 @@ ide_cursor_remove_cursors (IdeCursor *self)
         }
 
       g_clear_pointer (&self->cursors, g_list_free);
+
+      gtk_text_buffer_get_bounds (buffer, &begin, &end);
+      gtk_text_buffer_remove_tag (buffer, self->highlight_tag, &begin, &end);
     }
 }
 
@@ -855,3 +859,16 @@ ide_cursor_is_enabled (IdeCursor *self)
 
   return (self->cursors != NULL);
 }
+
+void
+ide_cursor_clear_highlight (IdeCursor *self)
+{
+  GtkTextBuffer *buffer;
+  GtkTextIter begin, end;
+
+  g_return_if_fail (IDE_IS_CURSOR (self));
+
+  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->source_view));
+  gtk_text_buffer_get_bounds (buffer, &begin, &end);
+  gtk_text_buffer_remove_tag (buffer, self->highlight_tag, &begin, &end);
+}
diff --git a/src/libide/sourceview/ide-cursor.h b/src/libide/sourceview/ide-cursor.h
index 7c1e4e6dc..a8f7d5915 100644
--- a/src/libide/sourceview/ide-cursor.h
+++ b/src/libide/sourceview/ide-cursor.h
@@ -31,6 +31,7 @@ G_DECLARE_FINAL_TYPE (IdeCursor, ide_cursor, IDE, CURSOR, GObject)
 void         ide_cursor_add_cursor            (IdeCursor *self,
                                                guint      type);
 void         ide_cursor_remove_cursors        (IdeCursor *self);
+void         ide_cursor_clear_highlight       (IdeCursor *self);
 void         ide_cursor_insert_text           (IdeCursor *self,
                                                gchar     *text,
                                                gint       len);
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index bb681664a..f7f38febd 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -3156,6 +3156,9 @@ ide_source_view_real_paste_clipboard_extended (IdeSourceView *self,
 
   gtk_text_buffer_select_range (buffer, &iter, &iter);
   gtk_text_buffer_end_user_action (buffer);
+
+  if (priv->cursor != NULL)
+    ide_cursor_clear_highlight (priv->cursor);
 }
 
 static void


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