[gtksourceview/wip/chergert/indenter: 5/6] buffer: track number of insertions into buffer




commit 4739c20d913f6d7cbf98cda7c30cb0844ffcf43d
Author: Christian Hergert <chergert redhat com>
Date:   Thu Mar 11 09:36:19 2021 -0800

    buffer: track number of insertions into buffer
    
    This can be used in other places to see if an operation caused an
    insertion into the buffer. We may want to also check deletions in the
    future but that should be done separately from this.

 gtksourceview/gtksourcebuffer-private.h |  2 ++
 gtksourceview/gtksourcebuffer.c         | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+)
---
diff --git a/gtksourceview/gtksourcebuffer-private.h b/gtksourceview/gtksourcebuffer-private.h
index 15073c08..96558894 100644
--- a/gtksourceview/gtksourcebuffer-private.h
+++ b/gtksourceview/gtksourcebuffer-private.h
@@ -73,5 +73,7 @@ GTK_SOURCE_INTERNAL
 gboolean                  _gtk_source_buffer_has_spaces_tag              (GtkSourceBuffer        *buffer);
 GTK_SOURCE_INTERNAL
 GtkTextTag               *_gtk_source_buffer_get_snippet_focus_tag       (GtkSourceBuffer        *buffer);
+GTK_SOURCE_INTERNAL
+gint64                    _gtk_source_buffer_get_insertion_count         (GtkSourceBuffer        *buffer);
 
 G_END_DECLS
diff --git a/gtksourceview/gtksourcebuffer.c b/gtksourceview/gtksourcebuffer.c
index d5751870..4870c8ec 100644
--- a/gtksourceview/gtksourcebuffer.c
+++ b/gtksourceview/gtksourcebuffer.c
@@ -160,6 +160,8 @@ typedef struct
 
        GtkTextTag *invalid_char_tag;
 
+       gint64 insertion_count;
+
        guint has_draw_spaces_tag : 1;
        guint highlight_syntax : 1;
        guint highlight_brackets : 1;
@@ -1054,6 +1056,8 @@ gtk_source_buffer_real_insert_text (GtkTextBuffer *buffer,
                                    const gchar   *text,
                                    gint           len)
 {
+       GtkSourceBuffer *source_buffer = (GtkSourceBuffer *)buffer;
+       GtkSourceBufferPrivate *priv = gtk_source_buffer_get_instance_private (source_buffer);
        gint start_offset;
 
        g_return_if_fail (GTK_SOURCE_IS_BUFFER (buffer));
@@ -1070,6 +1074,11 @@ gtk_source_buffer_real_insert_text (GtkTextBuffer *buffer,
         */
        GTK_TEXT_BUFFER_CLASS (gtk_source_buffer_parent_class)->insert_text (buffer, iter, text, len);
 
+       if (len > 0)
+       {
+               priv->insertion_count++;
+       }
+
        gtk_source_buffer_content_inserted (buffer,
                                            start_offset,
                                            gtk_text_iter_get_offset (iter));
@@ -3051,3 +3060,13 @@ _gtk_source_buffer_has_spaces_tag (GtkSourceBuffer *buffer)
 
        return priv->has_draw_spaces_tag;
 }
+
+gint64
+_gtk_source_buffer_get_insertion_count (GtkSourceBuffer *buffer)
+{
+       GtkSourceBufferPrivate *priv = gtk_source_buffer_get_instance_private (buffer);
+
+       g_return_val_if_fail (GTK_SOURCE_IS_BUFFER (buffer), FALSE);
+
+       return priv->insertion_count;
+}


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