From f88c9709a088d6d659da0df1082067d4579bf115 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Sat, 22 Aug 2015 21:46:29 -0400
Subject: [PATCH] open canvas field when popup menu is selected on a scalar

---
 pd/src/g_editor.c    | 4 ++--
 pd/src/g_scalar.c    | 8 +++++---
 pd/src/g_traversal.c | 1 -
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 306376237..794f75897 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -2307,7 +2307,7 @@ t_gobj *canvas_findhitbox(t_canvas *x, int xpos, int ypos,
     return (rval);
 }
 
-extern int scalar_hascanvasfield(t_scalar *x);
+extern int scalar_getcanvasfield(t_scalar *x);
 
     /* right-clicking on a canvas object pops up a menu. */
 static void canvas_rightclick(t_canvas *x, int xpos, int ypos, t_gobj *y_sel)
@@ -2350,7 +2350,7 @@ static void canvas_rightclick(t_canvas *x, int xpos, int ypos, t_gobj *y_sel)
        if they happen to have a canvas field inside them. */
     if (pd_class(&y->g_pd) == scalar_class)
     {
-        if (scalar_hascanvasfield((t_scalar *)y))
+        if (scalar_getcanvasfield((t_scalar *)y))
             scalar_has_canvas = 1;
         canopen = scalar_has_canvas;
     }
diff --git a/pd/src/g_scalar.c b/pd/src/g_scalar.c
index cbb4355f8..141b7f252 100644
--- a/pd/src/g_scalar.c
+++ b/pd/src/g_scalar.c
@@ -255,7 +255,8 @@ int template_cancreate(t_template *template)
     return (template_check_array_fields(0, template) == 1);
 }
 
-int scalar_hascanvasfield(t_scalar *x)
+    /* get the first canvas field for a scalar */
+t_canvas *scalar_getcanvasfield(t_scalar *x)
 {
     t_template *template = template_findbyname(x->sc_template);
     if (template)
@@ -265,7 +266,7 @@ int scalar_hascanvasfield(t_scalar *x)
         for (i = 0; i < nitems; i++, datatypes++)
         {
             if (datatypes->ds_type == DT_LIST)
-                return 1;
+                return x->sc_vec[i].w_list;
         }
     }
     return 0;
@@ -1227,7 +1228,8 @@ static void scalar_save(t_gobj *z, t_binbuf *b)
 
 static void scalar_menuopen(t_scalar *x)
 {
-    post("tried to open a thing");
+    t_canvas *c = scalar_getcanvasfield(x);
+    canvas_vis(c, 1);
 }
 
 static void scalar_properties(t_gobj *z, struct _glist *owner)
diff --git a/pd/src/g_traversal.c b/pd/src/g_traversal.c
index 10c1709a5..2d5ee264f 100644
--- a/pd/src/g_traversal.c
+++ b/pd/src/g_traversal.c
@@ -1336,7 +1336,6 @@ static void field_set(t_field *x, t_symbol *s)
 
 static void field_bang(t_field *x)
 {
-    post("sanity is %d", x->x_canvas->sanity);
     t_word *vec = x->x_canvas->gl_vec;
     t_template *template = x->x_template;
     t_symbol *fieldsym = x->x_s;
-- 
GitLab