From 7ecac2596346b5f98418c6c98a555d0b4d756cca Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@monsoon-hp.(none)>
Date: Fri, 2 Mar 2012 10:46:48 -0500
Subject: [PATCH] updated iemgui objects to support tooltips, improved text
 tooltip detection, minor code clean-ups.

---
 src/g_bang.c     | 10 +++++-----
 src/g_editor.c   | 33 ++++++++++++++++-----------------
 src/g_hdial.c    | 10 +++++-----
 src/g_hslider.c  | 10 +++++-----
 src/g_mycanvas.c |  6 +++---
 src/g_numbox.c   | 12 ++++++------
 src/g_toggle.c   | 12 ++++++------
 src/g_vdial.c    | 10 +++++-----
 src/g_vslider.c  | 10 +++++-----
 src/g_vumeter.c  | 22 +++++++++++-----------
 src/pd.tk        | 15 ++++++++++++---
 11 files changed, 79 insertions(+), 71 deletions(-)

diff --git a/src/g_bang.c b/src/g_bang.c
index 5d6e21f35..55fd91f15 100644
--- a/src/g_bang.c
+++ b/src/g_bang.c
@@ -72,29 +72,29 @@ void bng_draw_new(t_bng *x, t_glist *glist)
 		else nlet_tag = "bogus";
 
 
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxBNG}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxBNG text}\n",
 		         canvas, xpos, ypos,
 		         xpos + x->x_gui.x_w, ypos + x->x_gui.x_h,
 		         x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create oval %d %d %d %d -fill #%6.6x -tags {%lxBUT %lxBNG}\n",
+		sys_vgui(".x%lx.c create oval %d %d %d %d -fill #%6.6x -tags {%lxBUT %lxBNG text}\n",
 		         canvas, xpos+1, ypos+1,
 		         xpos + x->x_gui.x_w-1, ypos + x->x_gui.x_h-1,
 		         x->x_flashed?x->x_gui.x_fcol:x->x_gui.x_bcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxBNG}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxBNG text}\n",
 		         canvas, xpos+x->x_gui.x_ldx,
 		         ypos+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 				 x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able) {
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxBNG}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxBNG outlet}\n",
 		         canvas, xpos,
 		         ypos + x->x_gui.x_h-1, xpos + IOWIDTH,
 		         ypos + x->x_gui.x_h, nlet_tag, 0, x);
 		}
 		if(!x->x_gui.x_fsf.x_rcv_able) {
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxBNG}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxBNG inlet}\n",
 		         canvas, xpos, ypos,
 		         xpos + IOWIDTH, ypos+1, nlet_tag, 0, x);
 		}
diff --git a/src/g_editor.c b/src/g_editor.c
index c39bbad45..274cc752b 100644
--- a/src/g_editor.c
+++ b/src/g_editor.c
@@ -4808,18 +4808,17 @@ static void canvas_enterobj(t_canvas *x, t_symbol *item, t_floatarg xpos,
     t_floatarg ypos, t_floatarg xletno)
 {
 	if (x->gl_editor->e_onmotion == MA_MOVE) { return; }
-	//fprintf(stderr,"canvas_enterobj\n");
     t_symbol *name = 0, *helpname, *dir;
     int yoffset = 0, xoffset = 0;
     if (item == gensym("inlet"))
     {
-	yoffset = 1;
+		yoffset = 1;
         xoffset = xletno==0 ? 1 : -1;
     }
     else if (item == gensym("outlet"))
     {
-	yoffset = -1;
-	xoffset = xletno== 0 ? 1 : -1;
+		yoffset = -1;
+		xoffset = xletno== 0 ? 1 : -1;
     }
     int x1, y1, x2, y2;
     t_gobj *g;
@@ -4827,19 +4826,19 @@ static void canvas_enterobj(t_canvas *x, t_symbol *item, t_floatarg xpos,
 	&x1, &y1, &x2, &y2))
     {
         if (pd_class((t_pd *)g)==canvas_class ?
-	    canvas_isabstraction((t_canvas *)g) : 0)
-	{
-	    t_canvas *z = (t_canvas *)g;
-	    name = z->gl_name;
-	    helpname = z->gl_name;
-	    dir = canvas_getdir(z);
-	}
-	else
-	{
-	    name = g->g_pd->c_name;
-	    helpname = g->g_pd->c_helpname;
-	    dir = g->g_pd->c_externdir;
-	}
+	    	canvas_isabstraction((t_canvas *)g) : 0)
+		{
+			t_canvas *z = (t_canvas *)g;
+			name = z->gl_name;
+			helpname = z->gl_name;
+			dir = canvas_getdir(z);
+		}
+		else
+		{
+			name = g->g_pd->c_name;
+			helpname = g->g_pd->c_helpname;
+			dir = g->g_pd->c_externdir;
+		}
         sys_vgui("pdtk_gettip .x%lx.c %s %d \
 	    [list %s] [list %s] [list %s]\n",
 	    x, item->s_name, (int)xletno,
diff --git a/src/g_hdial.c b/src/g_hdial.c
index b0d29495c..332393241 100644
--- a/src/g_hdial.c
+++ b/src/g_hdial.c
@@ -86,10 +86,10 @@ void hradio_draw_new(t_hradio *x, t_glist *glist)
 
 		for(i=0; i<n; i++)
 		{
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE%d %lxHRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE%d %lxHRDO text}\n",
 		             canvas, xx11, yy11, xx11+dx, yy12,
 		             x->x_gui.x_bcol, x, i, x);
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxBUT%d %lxHRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxBUT%d %lxHRDO text}\n",
 		             canvas, xx21, yy21, xx22, yy22,
 		             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
 		             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, i, x);
@@ -99,16 +99,16 @@ void hradio_draw_new(t_hradio *x, t_glist *glist)
 		    x->x_drawn = x->x_on;
 		}
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxHRDO}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxHRDO text}\n",
 		         canvas, xx11b+x->x_gui.x_ldx, yy11+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		         x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxHRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxHRDO outlet}\n",
 		         canvas, xx11b, yy12-1, xx11b + IOWIDTH, yy12, nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxHRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxHRDO inlet}\n",
 		         canvas, xx11b, yy11, xx11b + IOWIDTH, yy11+1, nlet_tag, 0, x);
 	//}
 }
diff --git a/src/g_hslider.c b/src/g_hslider.c
index 9c13f940d..8826d837f 100644
--- a/src/g_hslider.c
+++ b/src/g_hslider.c
@@ -93,26 +93,26 @@ static void hslider_draw_new(t_hslider *x, t_glist *glist)
 		if (yyyy) nlet_tag = rtext_gettag(yyyy);
 		else nlet_tag = "bogus";
 
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxHSLDR}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxHSLDR text}\n",
 		         canvas, xpos-3, ypos,
 		         xpos + x->x_gui.x_w+2, ypos + x->x_gui.x_h,
 		         x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create line %d %d %d %d -width 3 -fill #%6.6x -tags {%lxKNOB %lxHSLDR}\n",
+		sys_vgui(".x%lx.c create line %d %d %d %d -width 3 -fill #%6.6x -tags {%lxKNOB %lxHSLDR text}\n",
 		         canvas, r, ypos+1, r,
 		         ypos + x->x_gui.x_h, x->x_gui.x_fcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxHSLDR}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxHSLDR text}\n",
 		         canvas, xpos+x->x_gui.x_ldx,
 		         ypos+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 				 x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxHSLDR}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxHSLDR outlet}\n",
 		         canvas, xpos-3, ypos + x->x_gui.x_h-1,
 		         xpos+4, ypos + x->x_gui.x_h, nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxHSLDR}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxHSLDR inlet}\n",
 		         canvas, xpos-3, ypos,
 		         xpos+4, ypos+1, nlet_tag, 0, x);
 	//}
diff --git a/src/g_mycanvas.c b/src/g_mycanvas.c
index 127b74fdb..16becf6ed 100644
--- a/src/g_mycanvas.c
+++ b/src/g_mycanvas.c
@@ -49,16 +49,16 @@ void my_canvas_draw_new(t_my_canvas *x, t_glist *glist)
 
 	//if (glist_isvisible(glist)) {
 
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxRECT %lxMYCNV}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxRECT %lxMYCNV text}\n",
 		         canvas, xpos, ypos,
 		         xpos + x->x_vis_w, ypos + x->x_vis_h,
 		         x->x_gui.x_bcol, x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -outline #%6.6x -tags {%lxBASE %lxMYCNV}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -outline #%6.6x -tags {%lxBASE %lxMYCNV text}\n",
 		         canvas, xpos, ypos,
 		         xpos + x->x_gui.x_w, ypos + x->x_gui.x_h,
 		         x->x_gui.x_bcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxMYCNV}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxMYCNV text}\n",
 		         canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
diff --git a/src/g_numbox.c b/src/g_numbox.c
index c2390526c..555d6f63d 100644
--- a/src/g_numbox.c
+++ b/src/g_numbox.c
@@ -215,7 +215,7 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
 
 		sys_vgui(
 	".x%lx.c create polygon %d %d %d %d %d %d %d %d %d %d -outline #%6.6x \
-	-fill #%6.6x -tags {%lxBASE1 %lxNUM}\n",
+	-fill #%6.6x -tags {%lxBASE1 %lxNUM text}\n",
 		         canvas, xpos, ypos,
 		         xpos + x->x_numwidth-4, ypos,
 		         xpos + x->x_numwidth, ypos+4,
@@ -223,31 +223,31 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
 		         xpos, ypos + x->x_gui.x_h,
 		         IEM_GUI_COLOR_NORMAL, x->x_gui.x_bcol, x, x);
 		sys_vgui(
-		    ".x%lx.c create line %d %d %d %d %d %d -fill #%6.6x -tags {%lxBASE2 %lxNUM}\n",
+		    ".x%lx.c create line %d %d %d %d %d %d -fill #%6.6x -tags {%lxBASE2 %lxNUM text}\n",
 		    canvas, xpos, ypos,
 		    xpos + half, ypos + half,
 		    xpos, ypos + x->x_gui.x_h,
 		    x->x_gui.x_fcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxNUM}\n",
+		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxNUM text}\n",
 		    canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
 		    strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		    x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		         x->x_gui.x_lcol, x, x);
 		my_numbox_ftoa(x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxNUMBER %lxNUM noscroll}\n",
+		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxNUMBER %lxNUM noscroll text}\n",
 		    canvas, xpos+half+2, ypos+half+d,
 		    x->x_buf, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		    x->x_gui.x_fcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxNUM}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxNUM outlet}\n",
 		         canvas,
 		         xpos, ypos + x->x_gui.x_h-1,
 		         xpos+IOWIDTH, ypos + x->x_gui.x_h,
 		         nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxNUM}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxNUM inlet}\n",
 		         canvas,
 		         xpos, ypos,
 		         xpos+IOWIDTH, ypos+1,
diff --git a/src/g_toggle.c b/src/g_toggle.c
index 9f541a0d5..ffc117864 100644
--- a/src/g_toggle.c
+++ b/src/g_toggle.c
@@ -79,27 +79,27 @@ void toggle_draw_new(t_toggle *x, t_glist *glist)
 		    w = 2;
 		if(x->x_gui.x_w >= 60)
 		    w = 3;
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxTGL}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxTGL text}\n",
 		         canvas, xx, yy, xx + x->x_gui.x_w, yy + x->x_gui.x_h,
 		         x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxX1 %lxTGL}\n",
+		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxX1 %lxTGL text}\n",
 		         canvas, xx+w+1, yy+w+1, xx + x->x_gui.x_w-w, yy + x->x_gui.x_h-w, w,
 		         (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxX2 %lxTGL}\n",
+		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxX2 %lxTGL text}\n",
 		         canvas, xx+w+1, yy + x->x_gui.x_h-w-1, xx + x->x_gui.x_w-w, yy+w, w,
 		         (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxTGL}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxTGL text}\n",
 		         canvas, xx+x->x_gui.x_ldx,
 		         yy+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		         x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxTGL}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxTGL outlet}\n",
 		         canvas, xx, yy + x->x_gui.x_h-1, xx + IOWIDTH, yy + x->x_gui.x_h, nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxTGL}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxTGL inlet}\n",
 		         canvas, xx, yy, xx + IOWIDTH, yy+1, nlet_tag, 0, x);
 	//}
 }
diff --git a/src/g_vdial.c b/src/g_vdial.c
index ba8e5b3ae..bcdcb5da6 100644
--- a/src/g_vdial.c
+++ b/src/g_vdial.c
@@ -84,10 +84,10 @@ void vradio_draw_new(t_vradio *x, t_glist *glist)
 
 		for(i=0; i<n; i++)
 		{
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE%d %lxVRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE%d %lxVRDO text}\n",
 		             canvas, xx11, yy11, xx12, yy12,
 		             x->x_gui.x_bcol, x, i, x);
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxBUT%d %lxVRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxBUT%d %lxVRDO text}\n",
 		             canvas, xx21, yy21, xx22, yy22,
 		             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
 		             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol, x, i, x);
@@ -98,16 +98,16 @@ void vradio_draw_new(t_vradio *x, t_glist *glist)
 		    x->x_drawn = x->x_on;
 		}
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVRDO}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVRDO text}\n",
 		         canvas, xx11+x->x_gui.x_ldx, yy11b+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		         x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVRDO outlet}\n",
 		         canvas, xx11, yy11-1, xx11 + IOWIDTH, yy11, nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVRDO}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVRDO inlet}\n",
 		         canvas, xx11, yy11b, xx11 + IOWIDTH, yy11b+1, nlet_tag, 0, x);
 	//}
 }
diff --git a/src/g_vslider.c b/src/g_vslider.c
index c8316fba1..1817d3b6b 100644
--- a/src/g_vslider.c
+++ b/src/g_vslider.c
@@ -76,27 +76,27 @@ static void vslider_draw_new(t_vslider *x, t_glist *glist)
 		if (yyyy) nlet_tag = rtext_gettag(yyyy);
 		else nlet_tag = "bogus";
 
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxVSLDR}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxVSLDR text}\n",
 		         canvas, xpos, ypos-2,
 		         xpos + x->x_gui.x_w, ypos + x->x_gui.x_h+3,
 		         x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create line %d %d %d %d -width 3 -fill #%6.6x -tags {%lxKNOB %lxVSLDR}\n",
+		sys_vgui(".x%lx.c create line %d %d %d %d -width 3 -fill #%6.6x -tags {%lxKNOB %lxVSLDR text}\n",
 		         canvas, xpos+1, r,
 		         xpos + x->x_gui.x_w, r, x->x_gui.x_fcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVSLDR}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVSLDR text}\n",
 		         canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight, 
 		         x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVSLDR}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVSLDR outlet}\n",
 		         canvas,
 		         xpos, ypos + x->x_gui.x_h+2,
 		         xpos+7, ypos + x->x_gui.x_h+3,
 		         nlet_tag, 0, x);
 		if(!x->x_gui.x_fsf.x_rcv_able)
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVSLDR}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVSLDR inlet}\n",
 		         canvas,
 		         xpos, ypos-2,
 		         xpos+7, ypos-1,
diff --git a/src/g_vumeter.c b/src/g_vumeter.c
index 412193046..1df8a5436 100644
--- a/src/g_vumeter.c
+++ b/src/g_vumeter.c
@@ -131,7 +131,7 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
 		if (yyyy) nlet_tag = rtext_gettag(yyyy);
 		else nlet_tag = "bogus";
 
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxVU}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -tags {%lxBASE %lxVU text}\n",
 		         canvas, xpos-1, ypos-2,
 		         xpos+x->x_gui.x_w+1,
 		         ypos+x->x_gui.x_h+2, x->x_gui.x_bcol, x, x);
@@ -139,11 +139,11 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
 		{
 		    led_col = iemgui_vu_col[i];
 		    yyy = k4 + k1*(k2-i);
-		    sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxRLED%d %lxVU}\n",
+		    sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxRLED%d %lxVU text}\n",
 		             canvas, quad1, yyy, quad3, yyy, x->x_led_size, iemgui_color_hex[led_col], x, i, x);
 		    if(((i+2)&3) && (x->x_scale))
 		        sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		                 -font {{%s} %d %s} -fill #%6.6x -tags {%lxSCALE%d %lxVU}\n",
+		                 -font {{%s} %d %s} -fill #%6.6x -tags {%lxSCALE%d %lxVU text}\n",
 		                 canvas, end, yyy+k3, iemgui_vu_scale_str[i], 
 						 x->x_gui.x_font, x->x_gui.x_fontsize,
 		                 sys_fontweight, x->x_gui.x_lcol, x, i, x);
@@ -153,31 +153,31 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
 		    i=IEM_VU_STEPS+1;
 		    yyy = k4 + k1*(k2-i);
 		    sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		             -font {{%s} %d %s} -fill #%6.6x -tags {%lxSCALE%d %lxVU}\n",
+		             -font {{%s} %d %s} -fill #%6.6x -tags {%lxSCALE%d %lxVU text}\n",
 		             canvas, end, yyy+k3, iemgui_vu_scale_str[i], x->x_gui.x_font, 
 					 x->x_gui.x_fontsize, sys_fontweight,
 		             x->x_gui.x_lcol, x, i, x);
 		}
-		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxRCOVER %lxVU}\n",
+		sys_vgui(".x%lx.c create rectangle %d %d %d %d -fill #%6.6x -outline #%6.6x -tags {%lxRCOVER %lxVU text}\n",
 		         canvas, quad1, ypos-1, quad3-1,
 		         ypos-1 + k1*IEM_VU_STEPS, x->x_gui.x_bcol, x->x_gui.x_bcol, x, x);
-		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxPLED %lxVU}\n",
+		sys_vgui(".x%lx.c create line %d %d %d %d -width %d -fill #%6.6x -tags {%lxPLED %lxVU text}\n",
 		         canvas, mid, ypos+10,
 		         mid, ypos+10, x->x_led_size, x->x_gui.x_bcol, x, x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVU}\n",
+		         -font {{%s} %d %s} -fill #%6.6x -tags {%lxLABEL %lxVU text}\n",
 		         canvas, xpos+x->x_gui.x_ldx, ypos+x->x_gui.x_ldy,
 		         strcmp(x->x_gui.x_lab->s_name, "empty")?x->x_gui.x_lab->s_name:"",
 		         x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		         x->x_gui.x_lcol, x, x);
 		if(!x->x_gui.x_fsf.x_snd_able)
 		{
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVU}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVU outlet}\n",
 		         canvas,
 		         xpos-1, ypos + x->x_gui.x_h+1,
 		         xpos + IOWIDTH-1, ypos + x->x_gui.x_h+2,
 		         nlet_tag, 0, x);
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVU}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%so%d %lxVU outlet}\n",
 		         canvas,
 		         xpos+x->x_gui.x_w+1-IOWIDTH, ypos + x->x_gui.x_h+1,
 		         xpos+x->x_gui.x_w+1, ypos + x->x_gui.x_h+2,
@@ -185,12 +185,12 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
 		}
 		if(!x->x_gui.x_fsf.x_rcv_able)
 		{
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVU}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVU inlet}\n",
 		         canvas,
 		         xpos-1, ypos-2,
 		         xpos + IOWIDTH-1, ypos-1,
 		         nlet_tag, 0, x);
-		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVU}\n",
+		    sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags {%si%d %lxVU inlet}\n",
 		         canvas,
 		         xpos+x->x_gui.x_w+1-IOWIDTH, ypos-2,
 		         xpos+x->x_gui.x_w+1, ypos-1,
diff --git a/src/pd.tk b/src/pd.tk
index 68b9627d7..c8762631c 100644
--- a/src/pd.tk
+++ b/src/pd.tk
@@ -342,6 +342,7 @@ variable duplicate_tags -1
 variable current_window 0
 variable nlet_color 0
 variable autotips 0
+variable tooltip_visible 0
 
 # x:y location tooltip during dragging
 set tooltip [toplevel .tooltip -bd 1 -bg black]
@@ -2083,6 +2084,7 @@ proc pdtk_canvas_new {name width height geometry editable} {
         -yscrollcommand "$name.scrollvert set" \
         -xscrollcommand "$name.scrollhort set" \
         -scrollregion [concat 0 0 $width $height]
+	$name.c configure -closeenough 0.0
 
 	#pdtk_standardkeybindings $name.c
 
@@ -3306,7 +3308,7 @@ proc pdtk_canvas_scroll {canvas xy distance} {
 }
 
 proc pdtk_canvas_motion {name x y mods} {
-	global pointer_x_local pointer_y_local pointer_x_global pointer_y_global
+	global pointer_x_local pointer_y_local pointer_x_global pointer_y_global tooltip_visible
 	set pointer_x_local $x
 	set pointer_y_local $y
 	set pointer_x_global [expr $pointer_x_local + [winfo rootx $name]]
@@ -7111,7 +7113,8 @@ if { [info tclversion] >= 8.5 && $pd_nt == 0 } {
 }
 
  
-proc pdtk_canvas_enteritem_gettags {tkcanvas x y item enterid} {
+proc pdtk_canvas_enteritem_gettags {tkcanvas x y item} {
+	#puts stderr "gettags $tkcanvas $x $y $item"
 	variable nlet_color
 	variable select_color
     if {[winfo exists $tkcanvas]} {
@@ -7142,6 +7145,7 @@ proc pdtk_canvas_enteritem_gettags {tkcanvas x y item enterid} {
 }
 
 proc pdtk_canvas_enteritem {tkcanvas x y item enterid} {
+	#puts stderr "enteritem $tkcanvas $x $y $item $enterid"
     variable afterid
     variable duplicate_tags
     variable current_window
@@ -7158,8 +7162,9 @@ proc pdtk_canvas_enteritem {tkcanvas x y item enterid} {
 			after cancel $afterid
 		}
 		set current_window $tkcanvas
+		
 		set afterid [after 250 pdtk_canvas_enteritem_gettags \
-			$tkcanvas $x $y $item $enterid]
+			$tkcanvas $x $y $item]
 	}
 }
 
@@ -7189,12 +7194,15 @@ proc pdtk_canvas_leaveitem {w item} {
 proc pdtk_tip {w fromc show args} {
 	variable select_color
 	variable nlet_color
+	variable tooltip_visible
 	set exists [winfo exists $w.tiplabel]
     if {$show == 0} {
         catch {destroy $w.tiplabel}
         catch {$w delete $w.tipwindow}
 		catch {$w delete tiparrow}
+		set tooltip_visible 0
     } else {
+		set tooltip_visible 1
 		if { $nlet_color == 0 } { set nlet_color $select_color }
 		if { $nlet_color ne $select_color } {
 			set fg "#ffffff"
@@ -7304,6 +7312,7 @@ proc pdtk_tip_mouseover {w} {
 }
 
 proc pdtk_gettip { w item xletno name helpname dir } {
+	#puts stderr "pdtk_gettip $w $item $xletno $name $helpname $dir"
     if {$dir eq {}} {
 		set dir $::sys_libdir/doc/5.reference
     }
-- 
GitLab