summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2016-05-18 10:14:33 (GMT)
committerfvogel <fvogelnew1@free.fr>2016-05-18 10:14:33 (GMT)
commit1c0858ce27408d641e6b3bb8f66e9b59cf630014 (patch)
treec0dc7bbe0c0f44ef9fe25376c27a5d029f49807e
parentac52dfb290b2def674a44dcdd9d2a5744f435ba8 (diff)
downloadtk-1c0858ce27408d641e6b3bb8f66e9b59cf630014.zip
tk-1c0858ce27408d641e6b3bb8f66e9b59cf630014.tar.gz
tk-1c0858ce27408d641e6b3bb8f66e9b59cf630014.tar.bz2
Fixed [011706ec42] for the scrollbar case.bug_011706ec42
-rw-r--r--library/scrlbar.tcl11
-rw-r--r--tests/scrollbar.test23
2 files changed, 29 insertions, 5 deletions
diff --git a/library/scrlbar.tcl b/library/scrlbar.tcl
index b7be014..6f1caa2 100644
--- a/library/scrlbar.tcl
+++ b/library/scrlbar.tcl
@@ -430,6 +430,9 @@ proc ::tk::ScrollTopBottom {w x y} {
proc ::tk::ScrollButton2Down {w x y} {
variable ::tk::Priv
+ if {![winfo exists $w]} {
+ return
+ }
set element [$w identify $x $y]
if {[string match {arrow[12]} $element]} {
ScrollButtonDown $w $x $y
@@ -443,7 +446,9 @@ proc ::tk::ScrollButton2Down {w x y} {
# slider drag.
update idletasks
- $w configure -activerelief sunken
- $w activate slider
- ScrollStartDrag $w $x $y
+ if {[winfo exists $w]} {
+ $w configure -activerelief sunken
+ $w activate slider
+ ScrollStartDrag $w $x $y
+ }
}
diff --git a/tests/scrollbar.test b/tests/scrollbar.test
index 8f967ea..bd14067 100644
--- a/tests/scrollbar.test
+++ b/tests/scrollbar.test
@@ -669,8 +669,8 @@ test scrollbar-11.1 {bug fix: [011706ec42] Scrollbar unsafe wrt widget destructi
}
}
toplevel .top
- scrollbar .top.s -command destroy_scrollbar
- bind .top.s <2> destroy_scrollbar
+ scrollbar .top.s
+ bind .top.s <2> {destroy_scrollbar}
pack .top.s
focus -force .top.s
update
@@ -679,6 +679,25 @@ test scrollbar-11.1 {bug fix: [011706ec42] Scrollbar unsafe wrt widget destructi
} -cleanup {
destroy .top.s .top
} -result {}
+test scrollbar-11.2 {bug fix: [011706ec42] Scrollbar unsafe wrt widget destruction} -body {
+ proc destroy_scrollbar {{y 0}} {
+ if {[winfo exists .top.s]} {
+ destroy .top.s
+ }
+ }
+ toplevel .top
+ wm minsize .top 50 400
+ update
+ scrollbar .top.s
+ bind .top.s <2> {after idle destroy_scrollbar}
+ pack .top.s -expand true -fill y
+ focus -force .top.s
+ update
+ event generate .top.s <2> -x 2 -y [expr {[winfo height .top.s] / 2}]
+ update ; # shall not trigger error invalid command name ".top.s"
+} -cleanup {
+ destroy .top.s .top
+} -result {}
catch {destroy .s}
catch {destroy .t}