diff --git a/src/pd.tk b/src/pd.tk
index 25f4ad3f8b26d63f544cc87a377988d55e0504b1..bc434e3ff65e5a744228f26a7039d75d81dd28b0 100644
--- a/src/pd.tk
+++ b/src/pd.tk
@@ -3511,19 +3511,15 @@ proc pdtk_canvas_getscroll {name} {
 		#puts stderr "$winwidth ? $canvaswidth   $winheight ? $canvasheight"
 
 		if {$::scroll($parentname) == 1} {
-			if {$winwidth >= $canvaswidth} {
+			if {$winwidth >= $canvaswidth || $::xscrollable($parentname) && [expr $winwidth + 14] >= $canvaswidth} {
 				pack forget $parentname.scrollhort
 				set ::xscrollable($parentname) 0
-				update
-				if {![winfo exists $name]} {return}
 				set winwidth [winfo width $parentname.c]
 				set winheight [winfo height $parentname.c]
 			}
-			if {$winheight >= $canvasheight} {
+			if {$winheight >= $canvasheight || $::yscrollable($parentname) && [expr $winheight + 14] >= $canvasheight} {
 				pack forget $parentname.scrollvert
 				set ::yscrollable($parentname) 0
-				update
-				if {![winfo exists $name]} {return}
 				set winwidth [winfo width $parentname.c]
 				set winheight [winfo height $parentname.c]
 			}