diff --git a/src/g_canvas.c b/src/g_canvas.c index 3384ece3e6fcafb9fb0dd4ade7741c8a0ed322d2..972580d067ac83070e9483fbd582b55e4fd4bb3a 100644 --- a/src/g_canvas.c +++ b/src/g_canvas.c @@ -875,7 +875,11 @@ void glist_menu_open(t_glist *x) /* redraw ourself in parent window (blanked out this time) */ gobj_vis(&x->gl_gobj, gl2, 1); } - } + } else { + if (x->gl_editor) + canvas_destroy_editor(x); + x->gl_havewindow = 1; + } canvas_vis(x, 1); } @@ -987,7 +991,7 @@ void canvas_deletelinesfor(t_canvas *x, t_text *text) { if (t.tr_ob == text || t.tr_ob2 == text) { - if (x->gl_editor) + if (x->gl_editor && glist_isvisible(glist_getcanvas(x))) { sys_vgui(".x%lx.c delete l%lx\n", glist_getcanvas(x), oc); diff --git a/src/g_editor.c b/src/g_editor.c index da73d6881811b30fac9977b852f3b022a813fd39..0469067937ca02e1120ce4c8e0742d453f0f0d00 100644 --- a/src/g_editor.c +++ b/src/g_editor.c @@ -3455,7 +3455,14 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce) g = glist_finddirty(x); if (g) { - vmess(&g->gl_pd, gensym("menu-open"), ""); + if (!glist_istoplevel(g) && g->gl_env) { + /* if this is an abstraction */ + vmess(&g->gl_pd, gensym("menu-open"), ""); + } else { + /* is this even necessary? */ + canvas_vis(g, 1); + } + //vmess(&g->gl_pd, gensym("menu-open"), ""); if (!glist_istoplevel(g) && g->gl_env) { /* if this is an abstraction */ sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",