From 5ad98e3be1587d447c802f238f3f7be9846ce728 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Fri, 3 Jun 2016 23:09:52 -0400
Subject: [PATCH] port 9ab1b10476bca7e3998d5bf907296979dfc6e558 from Pd-l2ork:
 fixed regression where canvaslist was not properly stored

---
 pd/src/g_canvas.c    | 6 +++---
 pd/src/g_editor.c    | 8 ++++----
 pd/src/g_template.c  | 5 +++--
 pd/src/x_interface.c | 4 ++--
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index c08486193..aab3cb18c 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -45,7 +45,7 @@ t_class *canvas_class;
 int canvas_dspstate;                /* whether DSP is on or off */  
 t_canvas *canvas_editing;           /* last canvas to start text edting */ 
 t_canvas *canvas_whichfind;         /* last canvas we did a find in */ 
-t_canvas *canvas_list;              /* list of all root canvases */
+//t_canvas *canvas_list;              /* list of all root canvases */
 
 /* ------------------ forward function declarations --------------- */
 static void canvas_start_dsp(void);
@@ -76,7 +76,7 @@ void canvas_updatewindowlist( void)
         return;
     gui_start_vmess("gui_set_toplevel_window_list", "s", "dummy");
     gui_start_array();
-    for (x = canvas_list; x; x = x->gl_next)
+    for (x = pd_this->pd_canvaslist; x; x = x->gl_next)
     {
         if (!x->gl_owner)
         {
@@ -1673,7 +1673,7 @@ void canvas_redrawallfortemplate(t_template *template, int action)
 {
     t_canvas *x;
         /* find all root canvases */
-    for (x = canvas_list; x; x = x->gl_next)
+    for (x = pd_this->pd_canvaslist; x; x = x->gl_next)
         glist_redrawall(template, x, action);
 }
 
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 48f88b2af..af1cbbd16 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -1388,7 +1388,7 @@ void canvas_reload(t_symbol *name, t_symbol *dir, t_gobj *except)
     int dspwas = canvas_suspend_dsp();
     glist_amreloadingabstractions = 1;
         /* find all root canvases */
-    for (x = canvas_list; x; x = x->gl_next)
+    for (x = pd_this->pd_canvaslist; x; x = x->gl_next)
         glist_doreload(x, name, dir, except);
     glist_amreloadingabstractions = 0;
     canvas_resume_dsp(dspwas);
@@ -5352,7 +5352,7 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce);
 void glob_closeall(void*dummy, t_floatarg fforce)
 {
   t_canvas*x, *y;
-  for (x = canvas_list; x; )
+  for (x = pd_this->canvaslist; x; )
     {
       y=x->gl_next;
       canvas_menuclose(x, fforce); /* forced closing of this root canvas */
@@ -5367,7 +5367,7 @@ void glob_verifyquit(void *dummy, t_floatarg f)
     //fprintf(stderr, "glob_verifyquit %f\n", f);
     t_glist *g, *g2;
         /* find all root canvases */
-    for (g = canvas_list; g; g = g->gl_next)
+    for (g = pd_this->canvaslist; g; g = g->gl_next)
         if (g2 = glist_finddirty(g))
         {
             /* first open window */
@@ -5680,7 +5680,7 @@ void canvas_finderror(void *error_object)
 {
     t_canvas *x;
         /* find all root canvases */
-    for (x = canvas_list; x; x = x->gl_next)
+    for (x = pd_this->pd_canvaslist; x; x = x->gl_next)
     {
         if ((void *)x == error_object)
         {
diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index 63e50e128..d701012c1 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -8,6 +8,7 @@
 #include <math.h>  /* for path bbox calculations */
 
 #include "m_pd.h"
+#include "m_imp.h"
 #include "s_stuff.h"    /* for sys_hostfontsize */
 #include "g_canvas.h"
 
@@ -502,7 +503,7 @@ void template_conform(t_template *tfrom, t_template *tto)
             tfrom->t_sym->s_name);
         //for (i = 0; i < nto; i++)
         //    post("... %d", conformaction[i]);
-        for (gl = canvas_list; gl; gl = gl->gl_next)
+        for (gl = pd_this->pd_canvaslist; gl; gl = gl->gl_next)
             template_conformglist(tfrom, tto, gl, conformaction);
     }
     freebytes(conformaction, sizeof(int) * nto);
@@ -2040,7 +2041,7 @@ void svg_doupdate(t_svg *x, t_canvas *c, t_symbol *s)
 void svg_update(t_svg *x, t_symbol *s)
 {
     t_canvas *c;
-    for (c = canvas_list; c; c = c->gl_next)
+    for (c = pd_this->pd_canvaslist; c; c = c->gl_next)
         svg_doupdate(x, c, s);
 }
 
diff --git a/pd/src/x_interface.c b/pd/src/x_interface.c
index ea3cb71ad..b8e66c438 100644
--- a/pd/src/x_interface.c
+++ b/pd/src/x_interface.c
@@ -554,10 +554,10 @@ void pdinfo_canvaslist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
     int j, i = 0;
     t_binbuf *outbuf = binbuf_new();
     t_atom at[1];
-    for (c = canvas_list; c; c = c->gl_next)
+    for (c = pd_this->pd_canvaslist; c; c = c->gl_next)
         i++;
     t_gpointer *gp = (t_gpointer *)t_getbytes(i * sizeof(*gp));
-    for (c = canvas_list, i = 0; c; c = c->gl_next, i++)
+    for (c = pd_this->pd_canvaslist, i = 0; c; c = c->gl_next, i++)
     {
         gpointer_init(gp+i);
         gpointer_setglist(gp+i, c, 0);
-- 
GitLab