diff --git a/src/g_editor.c b/src/g_editor.c index 77536a5ad9f1b1866a1e24ee35e2455ce403346a..03ca44e0314655fe160cb22988d4f643d8c3c344 100644 --- a/src/g_editor.c +++ b/src/g_editor.c @@ -63,6 +63,8 @@ extern void canvas_draw_gop_resize_hooks(t_canvas *x); static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg oldfont, t_floatarg resize, t_floatarg preview); // for updating preset_node locations in case of operations that alter glist object locations (tofront/back, cut, delete, undo/redo cut/delete) extern void glob_preset_node_list_check_loc_and_update(void); +// for preset_node +extern t_class *text_class; struct _outlet { @@ -2994,7 +2996,7 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) !obj_issignalinlet(ob2, closest2)) { if (doit) - error("can't connect signal outlet to control inlet"); + error("cannot connect signal outlet to control inlet"); // jsarlo if(x->gl_magic_glass) { magicGlass_unbind(x->gl_magic_glass); @@ -3024,7 +3026,8 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) pd_class(&y2->g_pd) != pdint_class && pd_class(&y2->g_pd) != pdfloat_class && pd_class(&y2->g_pd) != pdsymbol_class && - pd_class(&y2->g_pd) != print_class) { + pd_class(&y2->g_pd) != print_class && + pd_class(&y2->g_pd) != text_class) { // we need also text_class for interactively created objects error("preset node currently works only with gui objects, ints, floats, and symbols, plus a print object for node monitoring...\n"); return; } @@ -4571,8 +4574,6 @@ static void canvas_reselect(t_canvas *x) gobj_activate(x->gl_editor->e_selection->sel_what, x, 1); } -extern t_class *text_class; - void canvas_connect(t_canvas *x, t_floatarg fwhoout, t_floatarg foutno, t_floatarg fwhoin, t_floatarg finno) { @@ -4596,7 +4597,36 @@ void canvas_connect(t_canvas *x, t_floatarg fwhoout, t_floatarg foutno, if (!(objsrc = pd_checkobject(&src->g_pd)) || !(objsink = pd_checkobject(&sink->g_pd))) goto bad; - + + /* check signal outlets don't try to connect to non-signal inlets */ + if (obj_issignaloutlet(objsrc, outno) && !obj_issignalinlet(objsink, inno)) { + error("cannot connect signal outlet to control inlet"); + goto bad; + } + /* now check for illegal connections between preset_node object and other non-supported objects */ + if (pd_class(&src->g_pd) == preset_node_class) { + if (pd_class(&sink->g_pd) != gatom_class && + pd_class(&sink->g_pd) != bng_class && + pd_class(&sink->g_pd) != hradio_class && + pd_class(&sink->g_pd) != hradio_old_class && + pd_class(&sink->g_pd) != hslider_class && + pd_class(&sink->g_pd) != my_canvas_class && + pd_class(&sink->g_pd) != my_numbox_class && + pd_class(&sink->g_pd) != toggle_class && + pd_class(&sink->g_pd) != vradio_class && + pd_class(&sink->g_pd) != vradio_old_class && + pd_class(&sink->g_pd) != vslider_class && + pd_class(&sink->g_pd) != vu_class && + pd_class(&sink->g_pd) != pdint_class && + pd_class(&sink->g_pd) != pdfloat_class && + pd_class(&sink->g_pd) != pdsymbol_class && + pd_class(&sink->g_pd) != print_class && + pd_class(&sink->g_pd) != text_class) { + error("preset node currently works only with gui objects, ints, floats, and symbols, plus a print object for node monitoring...\n"); + goto bad; + } + } + /* if object creation failed, make dummy inlets or outlets as needed */ if (pd_class(&src->g_pd) == text_class && objsrc->te_type == T_OBJECT)