From f92a829bcae2597efdf70198e5ed5ddcfda92e59 Mon Sep 17 00:00:00 2001
From: Guillem <guillembartrina@gmail.com>
Date: Fri, 14 Aug 2020 15:24:36 +0200
Subject: [PATCH] open instance canvas when first (empty) ab instance is
 created, dinamically created objects dont activate dirty flag, trigger
 initbang when saving current canvas

---
 pd/src/g_canvas.c    | 3 +++
 pd/src/g_editor.c    | 2 ++
 pd/src/g_readwrite.c | 6 ++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 4f484772f..f2c717241 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1926,6 +1926,9 @@ static t_pd *do_create_ab(t_ab_definition *abdef, int argc, t_atom *argv)
     canvas_popabstraction((t_canvas *)(s__X.s_thing));
     canvas_setargs(0, 0);
 
+    canvas_vis((t_canvas *)newest, !glist_amreloadingabstractions 
+                                    && binbuf_getnatom(abdef->ad_source) == 3);
+
     return(newest);
 }
 
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index fb6cf7345..c78cc7b14 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -1426,6 +1426,8 @@ void canvas_reload_ab_rec(t_canvas *x, t_ab_definition *a, t_gobj *e)
             }
             glist_select(x, g);
         }
+        else if(g == e)
+            canvas_initbang((t_canvas *)g);
         g = g->g_next;
     }
     if (found)
diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c
index 2a37cedf7..9c591dbf8 100644
--- a/pd/src/g_readwrite.c
+++ b/pd/src/g_readwrite.c
@@ -1011,7 +1011,8 @@ static void canvas_menusaveas(t_canvas *x, t_floatarg fdestroy)
                 x2->gl_name->s_name : "title"),
             canvas_getdir(x2)->s_name,
             fdestroy != 0);
-    else canvas_save_ab(x2, fdestroy);
+    else if(x->gl_dirty)
+        canvas_save_ab(x2, fdestroy);
 }
 
 static void canvas_menusave(t_canvas *x, t_floatarg fdestroy)
@@ -1026,7 +1027,8 @@ static void canvas_menusave(t_canvas *x, t_floatarg fdestroy)
                 canvas_savetofile(x2, x2->gl_name, canvas_getdir(x2), fdestroy);
         else canvas_menusaveas(x2, fdestroy);
     }
-    else canvas_save_ab(x2, fdestroy);
+    else if(x->gl_dirty)
+        canvas_save_ab(x2, fdestroy);
 }
 
 static void canvas_menuprint(t_canvas *x)
-- 
GitLab