[gtksourceview/wip/chergert/vim: 175/363] create new mark for new visual




commit dc64c7124c66675b538fefe6a4de8f0806da6769
Author: Christian Hergert <chergert redhat com>
Date:   Sat Oct 30 15:57:06 2021 -0700

    create new mark for new visual
    
    that way we don't race on dispose

 gtksourceview/vim/gtk-source-vim-visual.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-visual.c b/gtksourceview/vim/gtk-source-vim-visual.c
index 90f540f3..fdd9ace5 100644
--- a/gtksourceview/vim/gtk-source-vim-visual.c
+++ b/gtksourceview/vim/gtk-source-vim-visual.c
@@ -376,12 +376,24 @@ GtkSourceVimState *
 gtk_source_vim_visual_clone (GtkSourceVimVisual *self)
 {
        GtkSourceVimState *ret;
+       GtkTextIter cursor;
+       GtkTextIter started_at;
 
        g_return_val_if_fail (GTK_SOURCE_IS_VIM_VISUAL (self), NULL);
 
        ret = gtk_source_vim_visual_new (self->mode);
-       g_set_weak_pointer (&GTK_SOURCE_VIM_VISUAL (ret)->cursor, self->cursor);
-       g_set_weak_pointer (&GTK_SOURCE_VIM_VISUAL (ret)->started_at, self->started_at);
+
+       if (gtk_source_vim_visual_get_bounds (self, &cursor, &started_at))
+       {
+               GtkSourceBuffer *buffer = gtk_source_vim_state_get_buffer (GTK_SOURCE_VIM_STATE (self), NULL, 
NULL);
+               GtkTextMark *mark;
+
+               mark = gtk_text_buffer_create_mark (GTK_TEXT_BUFFER (buffer), NULL, &cursor, FALSE);
+               g_set_weak_pointer (&GTK_SOURCE_VIM_VISUAL (ret)->cursor, mark);
+
+               mark = gtk_text_buffer_create_mark (GTK_TEXT_BUFFER (buffer), NULL, &started_at, TRUE);
+               g_set_weak_pointer (&GTK_SOURCE_VIM_VISUAL (ret)->started_at, mark);
+       }
 
        return ret;
 }


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