]> uap-core.de Git - note.git/commitdiff
ref GtkTextChildAnchor in EmbeddedWidget
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 20 Mar 2025 20:14:03 +0000 (21:14 +0100)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Thu, 20 Mar 2025 20:14:03 +0000 (21:14 +0100)
application/gtk-text.c

index 1c2ef4ae1e779d7bdcd46b30882ba5bff94a6a47..f95ab26b2ee5c880122705de66fb39dd3211b41f 100644 (file)
@@ -200,7 +200,9 @@ static void editor_set_buffer_cb(
     
     CxIterator i = cxListIterator(embedded_objects->objects);
     cx_foreach(EmbeddedWidget *, w, i) {
-        gtk_text_view_add_child_at_anchor(textview, w->widget, w->anchor);
+        if(!gtk_text_child_anchor_get_deleted(w->anchor)) {
+            gtk_text_view_add_child_at_anchor(textview, w->widget, w->anchor);
+        }
     }
 }
 
@@ -224,19 +226,7 @@ static void editor_delete_range_cb(
         const GtkTextIter *end,
         NoteEditor *editor)
 {
-    BufferEmbeddedObjects *em = g_object_get_data(G_OBJECT(buffer), "embedded");
-    if(!em) {
-        return;
-    }
     
-    GtkTextIter iter = *start;
-    while (!gtk_text_iter_equal(&iter, end)) {
-        GtkTextChildAnchor *anchor = gtk_text_iter_get_child_anchor(&iter);
-        if(anchor) {
-            em_remove_anchor(em, anchor);
-        }
-        gtk_text_iter_forward_cursor_position(&iter);
-    }
 }
 
 static gboolean path_is_image_file(cxstring path) {
@@ -296,6 +286,7 @@ static void editor_attach_image(NoteEditor *editor, GdkPixbuf *pixbuf) {
     em->anchor = anchor;
     em->restore = NULL;
     g_object_ref(image);
+    g_object_ref(anchor);
     
     BufferEmbeddedObjects *embedded_objects = g_object_get_data(G_OBJECT(buffer), "embedded");
     cxListAdd(embedded_objects->objects, em);
@@ -448,6 +439,7 @@ static void buffer_embedded_objects_free(BufferEmbeddedObjects *em) {
 
 static void embedded_widget_free(EmbeddedWidget *w) {
     g_object_unref(w->widget);
+    g_object_unref(w->anchor);
     free(w);
 }