diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 04c2e6c7cf4189826514c8e1e898039097f8359b..a4f50730f21e833d31f30c81dca6f0894e609a90 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -2624,12 +2624,30 @@ static void abdefs_bang(t_abdefs *x) static void abdefs_get(t_abdefs *x) { - t_canvas *r = canvas_getrootfor_ab(x->x_canvas); + t_canvas *c = canvas_getrootfor_ab(x->x_canvas), + *r = canvas_getrootfor(x->x_canvas); t_binbuf *out = binbuf_new(); t_ab_definition *abdef; - for(abdef = r->gl_abdefs; abdef; abdef = abdef->ad_next) + for(abdef = c->gl_abdefs; abdef; abdef = abdef->ad_next) { - binbuf_addv(out, "si", abdef->ad_name, abdef->ad_numinstances); + char *hash = strrchr(abdef->ad_name->s_name, '#'); + if(!hash) + { + if(abdef->ad_name->s_name[0] != '@' || !r->gl_isab) + { + binbuf_addv(out, "si", abdef->ad_name, abdef->ad_numinstances); + } + } + else + { + *hash = '\0'; + if(r->gl_isab && + gensym(abdef->ad_name->s_name) == r->gl_absource->ad_name) + { + binbuf_addv(out, "si", gensym(hash+1), abdef->ad_numinstances); + } + *hash = '#'; + } } outlet_list(x->x_obj.ob_outlet, &s_list, binbuf_getnatom(out), binbuf_getvec(out)); @@ -2649,33 +2667,6 @@ static void abdefs_instances(t_abdefs *x, t_symbol *s) error("abdefs: couldn't find definition for '%s'", s->s_name); } -static void abdefs_menuopen(t_abdefs *x) -{ - char buf[MAXPDSTRING]; - t_canvas *c = canvas_getrootfor_ab(x->x_canvas); - t_ab_definition *abdef; - char *gfx_tag = gfxstub_new2(&x->x_obj.ob_pd, x); - gui_start_vmess("gui_external_dialog", "s", gfx_tag); - gui_s("[ab] definitions"); - gui_start_array(); - if(!c->gl_abdefs) - { - gui_s("Ø_hidden"); gui_i(0); - } - for(abdef = c->gl_abdefs; abdef; abdef = abdef->ad_next) - { - sprintf(buf, "%s (%d)_hidden", abdef->ad_name->s_name, abdef->ad_numinstances); - gui_s(buf); gui_i(0); - } - gui_end_array(); - gui_end_vmess(); -} - -static void abdefs_dialog(t_abdefs *x, t_symbol *s, int argc, t_atom *argv) -{ - gfxstub_deleteforkey(x); -} - /* --------- */ static void canvas_showdirty(t_canvas *x) @@ -3539,8 +3530,6 @@ void g_canvas_setup(void) class_addbang(abdefs_class, (t_method)abdefs_bang); class_addmethod(abdefs_class, (t_method)abdefs_get, gensym("get"), 0); class_addmethod(abdefs_class, (t_method)abdefs_instances, gensym("instances"), A_SYMBOL, 0); - class_addmethod(abdefs_class, (t_method)abdefs_menuopen, gensym("menu-open"), 0); - class_addmethod(abdefs_class, (t_method)abdefs_dialog, gensym("dialog"), A_GIMME, 0); class_addmethod(canvas_class, (t_method)canvas_showdirty, gensym("showdirty"), 0);