diff options
-rw-r--r-- | library/ttk/button.tcl | 2 | ||||
-rw-r--r-- | tests/ttk/ttk.test | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/library/ttk/button.tcl b/library/ttk/button.tcl index fc9c1bb..8ccdb91 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 |