diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 7a4b02814e6566ccb1db9dc2668c03c8e244f6e8..e5c2865520bc7f3662a0943f54cc2bb73b0d5d41 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -872,11 +872,14 @@ int glist_getfont(t_glist *x) void canvas_free(t_canvas *x) { + //fprintf(stderr,"canvas_free %lx\n", x); t_gobj *y; int dspstate = canvas_suspend_dsp(); - if (x->gl_magic_glass) - magicGlass_free(x->gl_magic_glass); + if (x->gl_magic_glass) { + //magicGlass_free(x->gl_magic_glass); + pd_free(&x->gl_magic_glass->x_obj.te_g.g_pd); + } //canvas_noundo(x); canvas_undo_free(x); diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c index 105528fcdec54fe1ddaf0c8853ee36d2acca53a9..a995e5f571bfe78a382a16d8a8eabc1967802164 100644 --- a/pd/src/g_graph.c +++ b/pd/src/g_graph.c @@ -11,6 +11,7 @@ to this file... */ #include "m_imp.h" #include "t_tk.h" #include "g_canvas.h" +#include "g_all_guis.h" /* for canvas handle freeing */ #include "s_stuff.h" /* for sys_hostfontsize */ #include <stdio.h> #include <string.h> @@ -83,8 +84,9 @@ void canvas_closebang(t_canvas *x); /* delete an object from a glist and free it */ void glist_delete(t_glist *x, t_gobj *y) { + //fprintf(stderr,"glist_delete?\n"); if (x->gl_list) { - + //fprintf(stderr,"glist_delete YES\n"); t_gobj *g; t_object *ob; t_gotfn chkdsp = zgetfn(&y->g_pd, gensym("dsp")); @@ -337,13 +339,23 @@ void glist_sort(t_glist *x) void glist_cleanup(t_glist *x) { + //fprintf(stderr,"glist_cleanup =============\n"); freebytes(x->gl_xlabel, x->gl_nxlabels * sizeof(*(x->gl_xlabel))); freebytes(x->gl_ylabel, x->gl_nylabels * sizeof(*(x->gl_ylabel))); + if (x->x_handle) { + pd_unbind(x->x_handle, ((t_scalehandle *)x->x_handle)->h_bindsym); + pd_free(x->x_handle); + } + if (x->x_mhandle) { + pd_unbind(x->x_mhandle, ((t_scalehandle *)x->x_mhandle)->h_bindsym); + pd_free(x->x_mhandle); + } gstub_cutoff(x->gl_stub); } void glist_free(t_glist *x) { + //fprintf(stderr,"glist_free =============\n"); glist_cleanup(x); freebytes(x, sizeof(*x)); } @@ -1219,6 +1231,7 @@ static void graph_delete(t_gobj *z, t_glist *glist) static void graph_delete(t_gobj *z, t_glist *glist) { + //fprintf(stderr,"graph_delete\n"); t_glist *x = (t_glist *)z; t_gobj *y; text_widgetbehavior.w_deletefn(z, glist); diff --git a/pd/src/g_magicglass.c b/pd/src/g_magicglass.c index 362b2a5241c01f1ca2569b04ff4ec296ae2fa05d..8c0714866cac2666c8d0991e790505cf7dc65e87 100644 --- a/pd/src/g_magicglass.c +++ b/pd/src/g_magicglass.c @@ -398,9 +398,11 @@ void *magicGlass_new(t_glist *c) void magicGlass_free(t_magicGlass *x) { //fprintf(stderr,"magicglass_free\n"); + magicGlass_unbind(x); x->x_dspOn = 0; clock_free(x->x_clearClock); clock_free(x->x_flashClock); + x = NULL; } void magicGlass_setup(void)