diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2019-04-22 15:46:20 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2019-04-22 15:46:20 (GMT) |
commit | 7e8909a08b8e425eeaa69085cbe86e848f2f5650 (patch) | |
tree | f26e5e21fe28674bab321d6453ea32b5a4a491e2 /tk8.6/library/ttk/menubutton.tcl | |
parent | 346eeb31d1c0a2ee959ecfade3cd66e3dc07cf4b (diff) | |
download | blt-7e8909a08b8e425eeaa69085cbe86e848f2f5650.zip blt-7e8909a08b8e425eeaa69085cbe86e848f2f5650.tar.gz blt-7e8909a08b8e425eeaa69085cbe86e848f2f5650.tar.bz2 |
backout tcl/tk 8.6.9
Diffstat (limited to 'tk8.6/library/ttk/menubutton.tcl')
-rw-r--r-- | tk8.6/library/ttk/menubutton.tcl | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/tk8.6/library/ttk/menubutton.tcl b/tk8.6/library/ttk/menubutton.tcl deleted file mode 100644 index 2be064c..0000000 --- a/tk8.6/library/ttk/menubutton.tcl +++ /dev/null @@ -1,169 +0,0 @@ -# -# Bindings for Menubuttons. -# -# Menubuttons have three interaction modes: -# -# Pulldown: Press menubutton, drag over menu, release to activate menu entry -# Popdown: Click menubutton to post menu -# Keyboard: <Key-space> or accelerator key to post menu -# -# (In addition, when menu system is active, "dropdown" -- menu posts -# on mouse-over. Ttk menubuttons don't implement this). -# -# For keyboard and popdown mode, we hand off to tk_popup and let -# the built-in Tk bindings handle the rest of the interaction. -# -# ON X11: -# -# Standard Tk menubuttons use a global grab on the menubutton. -# This won't work for Ttk menubuttons in pulldown mode, -# since we need to process the final <ButtonRelease> event, -# and this might be delivered to the menu. So instead we -# rely on the passive grab that occurs on <ButtonPress> events, -# and transition to popdown mode when the mouse is released -# or dragged outside the menubutton. -# -# ON WINDOWS: -# -# I'm not sure what the hell is going on here. [$menu post] apparently -# sets up some kind of internal grab for native menus. -# On this platform, just use [tk_popup] for all menu actions. -# -# ON MACOS: -# -# Same probably applies here. -# - -namespace eval ttk { - namespace eval menubutton { - variable State - array set State { - pulldown 0 - oldcursor {} - } - } -} - -bind TMenubutton <Enter> { %W instate !disabled {%W state active } } -bind TMenubutton <Leave> { %W state !active } -bind TMenubutton <Key-space> { ttk::menubutton::Popdown %W } -bind TMenubutton <<Invoke>> { ttk::menubutton::Popdown %W } - -if {[tk windowingsystem] eq "x11"} { - bind TMenubutton <ButtonPress-1> { ttk::menubutton::Pulldown %W } - bind TMenubutton <ButtonRelease-1> { ttk::menubutton::TransferGrab %W } - bind TMenubutton <B1-Leave> { ttk::menubutton::TransferGrab %W } -} else { - bind TMenubutton <ButtonPress-1> \ - { %W state pressed ; ttk::menubutton::Popdown %W } - bind TMenubutton <ButtonRelease-1> \ - { if {[winfo exists %W]} { %W state !pressed } } -} - -# PostPosition -- -# Returns the x and y coordinates where the menu -# should be posted, based on the menubutton and menu size -# and -direction option. -# -# TODO: adjust menu width to be at least as wide as the button -# for -direction above, below. -# -proc ttk::menubutton::PostPosition {mb menu} { - set x [winfo rootx $mb] - set y [winfo rooty $mb] - set dir [$mb cget -direction] - - set bw [winfo width $mb] - set bh [winfo height $mb] - set mw [winfo reqwidth $menu] - set mh [winfo reqheight $menu] - set sw [expr {[winfo screenwidth $menu] - $bw - $mw}] - set sh [expr {[winfo screenheight $menu] - $bh - $mh}] - - switch -- $dir { - above { if {$y >= $mh} { incr y -$mh } { incr y $bh } } - below { if {$y <= $sh} { incr y $bh } { incr y -$mh } } - left { if {$x >= $mw} { incr x -$mw } { incr x $bw } } - right { if {$x <= $sw} { incr x $bw } { incr x -$mw } } - flush { - # post menu atop menubutton. - # If there's a menu entry whose label matches the - # menubutton -text, assume this is an optionmenu - # and place that entry over the menubutton. - set index [FindMenuEntry $menu [$mb cget -text]] - if {$index ne ""} { - incr y -[$menu yposition $index] - } - } - } - - return [list $x $y] -} - -# Popdown -- -# Post the menu and set a grab on the menu. -# -proc ttk::menubutton::Popdown {mb} { - if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { - return - } - foreach {x y} [PostPosition $mb $menu] { break } - tk_popup $menu $x $y -} - -# Pulldown (X11 only) -- -# Called when Button1 is pressed on a menubutton. -# Posts the menu; a subsequent ButtonRelease -# or Leave event will set a grab on the menu. -# -proc ttk::menubutton::Pulldown {mb} { - variable State - if {[$mb instate disabled] || [set menu [$mb cget -menu]] eq ""} { - return - } - foreach {x y} [PostPosition $mb $menu] { break } - set State(pulldown) 1 - set State(oldcursor) [$mb cget -cursor] - - $mb state pressed - $mb configure -cursor [$menu cget -cursor] - $menu post $x $y - tk_menuSetFocus $menu -} - -# TransferGrab (X11 only) -- -# Switch from pulldown mode (menubutton has an implicit grab) -# to popdown mode (menu has an explicit grab). -# -proc ttk::menubutton::TransferGrab {mb} { - variable State - if {$State(pulldown)} { - $mb configure -cursor $State(oldcursor) - $mb state {!pressed !active} - set State(pulldown) 0 - - set menu [$mb cget -menu] - tk_popup $menu [winfo rootx $menu] [winfo rooty $menu] - } -} - -# FindMenuEntry -- -# Hack to support tk_optionMenus. -# Returns the index of the menu entry with a matching -label, -# -1 if not found. -# -proc ttk::menubutton::FindMenuEntry {menu s} { - set last [$menu index last] - if {$last eq "none"} { - return "" - } - for {set i 0} {$i <= $last} {incr i} { - if {![catch {$menu entrycget $i -label} label] - && ($label eq $s)} { - return $i - } - } - return "" -} - -#*EOF* |