summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--library/ttk/button.tcl2
-rw-r--r--tests/ttk/ttk.test17
2 files changed, 18 insertions, 1 deletions
diff --git a/library/ttk/button.tcl b/library/ttk/button.tcl
index 3baefe2..22032e4 100644
--- a/library/ttk/button.tcl
+++ b/library/ttk/button.tcl
@@ -28,7 +28,7 @@ bind TButton <<Invoke>> { ttk::button::activate %W }
bind TButton <ButtonPress-1> \
{ %W instate !disabled { ttk::clickToFocus %W; %W state pressed } }
bind TButton <ButtonRelease-1> \
- { %W instate {pressed !disabled} { %W state !pressed; %W invoke } }
+ { %W instate pressed { %W state !pressed; %W instate !disabled { %W invoke } } }
bind TButton <Button1-Leave> \
{ %W state !pressed }
bind TButton <Button1-Enter> \
diff --git a/tests/ttk/ttk.test b/tests/ttk/ttk.test
index 9732f46..ddfaf84 100644
--- a/tests/ttk/ttk.test
+++ b/tests/ttk/ttk.test
@@ -197,6 +197,23 @@ test ttk-2.7 "instate scripts, true" -body {
set x
} -result 1
+test ttk-2.8 "bug 3223850: button state disabled during click" -setup {
+ destroy .b
+ set ttk28 {}
+ pack [ttk::button .b -command {set ::ttk28 failed}]
+} -body {
+ bind .b <ButtonPress-1> {after 0 {.b configure -state disabled}}
+ after 1 {event generate .b <ButtonPress-1>}
+ after 20 {event generate .b <ButtonRelease-1>}
+ set aid [after 100 {set ::ttk28 [.b instate {disabled !pressed}]}]
+ vwait ::ttk28
+ after cancel $aid
+ set ttk28
+} -cleanup {
+ destroy .b
+ unset -nocomplain ttk28 aid
+} -result 1
+
# misc. error detection
test ttk-3.0 "Bad option" -body {
ttk::button .bad -badoption foo