From 2d6d54e8eddb42bb1f0ea1d7e8f2a36f07b93cc8 Mon Sep 17 00:00:00 2001 From: patthoyts Date: Sat, 19 Mar 2011 02:00:40 +0000 Subject: [Bug 3223850] - button remains stuck when disabled as depressed on XP If a button is disabled while the state is pressed, then the release event handler did not remove the pressed state. Modified the handler to always remove the pressed state while only calling invoke if !disabled. Reported-by: Thomas MENEZ Signed-off-by: Pat Thoyts --- library/ttk/button.tcl | 2 +- tests/ttk/ttk.test | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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 <> { ttk::button::activate %W } bind TButton \ { %W instate !disabled { ttk::clickToFocus %W; %W state pressed } } bind TButton \ - { %W instate {pressed !disabled} { %W state !pressed; %W invoke } } + { %W instate pressed { %W state !pressed; %W instate !disabled { %W invoke } } } bind TButton \ { %W state !pressed } bind TButton \ 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 {after 0 {.b configure -state disabled}} + after 1 {event generate .b } + after 20 {event generate .b } + 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 -- cgit v0.12