diff --git a/src/g_mycanvas.c b/src/g_mycanvas.c
index 19fe019b33c115062a07bd8757b32debf2749af2..d5c0b817b238d27250ce7ca417fca3cd16ddcfcc 100644
--- a/src/g_mycanvas.c
+++ b/src/g_mycanvas.c
@@ -420,8 +420,17 @@ static void my_canvas_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int
     
     *xp1 = text_xpix(&x->x_gui.x_obj, glist);
     *yp1 = text_ypix(&x->x_gui.x_obj, glist);
-    *xp2 = *xp1 + x->x_vis_w;
-    *yp2 = *yp1 + x->x_vis_h;
+	if (!glist_istoplevel(glist))
+	{
+		//if we are trying to calculate visibility of a widget inside a GOP
+	    *xp2 = *xp1 + x->x_vis_w;
+	    *yp2 = *yp1 + x->x_vis_h;
+	}
+	else
+	{
+	    *xp2 = *xp1 + x->x_gui.x_w;
+	    *yp2 = *yp1 + x->x_gui.x_h;
+	}
 }
 
 static void my_canvas_save(t_gobj *z, t_binbuf *b)