From 24e47b1d059cf68f776b57faf187e4e022ad2a13 Mon Sep 17 00:00:00 2001 From: fvogel Date: Fri, 19 Aug 2016 20:31:26 +0000 Subject: Fixed [fa32290898] - Can't dismiss ttk::menubutton menu until mouse has hovered over it --- library/menu.tcl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/menu.tcl b/library/menu.tcl index a7aaa3f..b5dd88e 100644 --- a/library/menu.tcl +++ b/library/menu.tcl @@ -607,6 +607,10 @@ proc ::tk::MenuButtonDown menu { if {![winfo viewable $menu]} { return } + if {[$menu index active] eq "none"} { + set Priv(window) {} + return + } $menu postcascade active if {$Priv(postedMb) ne "" && [winfo viewable $Priv(postedMb)]} { grab -global $Priv(postedMb) -- cgit v0.12 From 1e6f41e17ea6b546ea891d57ed147b09a8c2f7cd Mon Sep 17 00:00:00 2001 From: fvogel Date: Tue, 23 Aug 2016 19:30:19 +0000 Subject: Added non regression test case menu-38.1 --- tests/menu.test | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/menu.test b/tests/menu.test index aaadc86..a97aa25 100644 --- a/tests/menu.test +++ b/tests/menu.test @@ -3878,6 +3878,35 @@ test menu-37.1 {menubar menues cannot be posted - bug 2160206} -setup { destroy .m } -result {1 {a menubar menu cannot be posted}} +test menu-38.1 {Can't dismiss ttk::menubutton menu until mouse has hovered over it - bug fa32290898} -setup { +} -body { + toplevel .top + ttk::menubutton .top.mb -text "Some menu"; + menu .top.mb.m; + .top.mb.m add command -label "Item 1"; + .top.mb.m add command -label "Item 2"; + .top.mb configure -menu .top.mb.m; + pack .top.mb + update + # simulate mouse click on the menubutton, which posts its menu + event generate .top.mb -warp 1 + update + after 50 + event generate .top.mb + update + # simulate mouse click on the menu again, i.e. without + # entering/leaving the posted menu + event generate .top.mb + update + after 50 + event generate .top.mb + update + # the menu shall have been unposted by the second click + winfo ismapped .top.mb.m +} -cleanup { + destroy .top.mb.m .top.m .top +} -result {0} + # cleanup imageFinish -- cgit v0.12