[gtksourceview/wip/chergert/indenter: 1/2] buffer: track number of insertions into buffer




commit 18bcab2f976a4931085aac7be6cac46237bb5c3c
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         | 16 ++++++++++++++++
 2 files changed, 18 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..b7f8ce53 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,8 @@ gtk_source_buffer_real_insert_text (GtkTextBuffer *buffer,
         */
        GTK_TEXT_BUFFER_CLASS (gtk_source_buffer_parent_class)->insert_text (buffer, iter, text, len);
 
+       priv->insertion_count++;
+
        gtk_source_buffer_content_inserted (buffer,
                                            start_offset,
                                            gtk_text_iter_get_offset (iter));
@@ -3051,3 +3057,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]