Spaces:
Runtime error
Runtime error
| # button.tcl -- | |
| # | |
| # This file defines the default bindings for Tk label, button, | |
| # checkbutton, and radiobutton widgets and provides procedures | |
| # that help in implementing those bindings. | |
| # | |
| # Copyright (c) 1992-1994 The Regents of the University of California. | |
| # Copyright (c) 1994-1996 Sun Microsystems, Inc. | |
| # Copyright (c) 2002 ActiveState Corporation. | |
| # | |
| # See the file "license.terms" for information on usage and redistribution | |
| # of this file, and for a DISCLAIMER OF ALL WARRANTIES. | |
| # | |
| #------------------------------------------------------------------------- | |
| # The code below creates the default class bindings for buttons. | |
| #------------------------------------------------------------------------- | |
| if {[tk windowingsystem] eq "aqua"} { | |
| bind Radiobutton <Enter> { | |
| tk::ButtonEnter %W | |
| } | |
| bind Radiobutton <1> { | |
| tk::ButtonDown %W | |
| } | |
| bind Radiobutton <ButtonRelease-1> { | |
| tk::ButtonUp %W | |
| } | |
| bind Checkbutton <Enter> { | |
| tk::ButtonEnter %W | |
| } | |
| bind Checkbutton <1> { | |
| tk::ButtonDown %W | |
| } | |
| bind Checkbutton <ButtonRelease-1> { | |
| tk::ButtonUp %W | |
| } | |
| bind Checkbutton <Leave> { | |
| tk::ButtonLeave %W | |
| } | |
| } | |
| if {"win32" eq [tk windowingsystem]} { | |
| bind Checkbutton <equal> { | |
| tk::CheckRadioInvoke %W select | |
| } | |
| bind Checkbutton <plus> { | |
| tk::CheckRadioInvoke %W select | |
| } | |
| bind Checkbutton <minus> { | |
| tk::CheckRadioInvoke %W deselect | |
| } | |
| bind Checkbutton <1> { | |
| tk::CheckRadioDown %W | |
| } | |
| bind Checkbutton <ButtonRelease-1> { | |
| tk::ButtonUp %W | |
| } | |
| bind Checkbutton <Enter> { | |
| tk::CheckRadioEnter %W | |
| } | |
| bind Checkbutton <Leave> { | |
| tk::ButtonLeave %W | |
| } | |
| bind Radiobutton <1> { | |
| tk::CheckRadioDown %W | |
| } | |
| bind Radiobutton <ButtonRelease-1> { | |
| tk::ButtonUp %W | |
| } | |
| bind Radiobutton <Enter> { | |
| tk::CheckRadioEnter %W | |
| } | |
| } | |
| if {"x11" eq [tk windowingsystem]} { | |
| bind Checkbutton <Return> { | |
| if {!$tk_strictMotif} { | |
| tk::CheckInvoke %W | |
| } | |
| } | |
| bind Radiobutton <Return> { | |
| if {!$tk_strictMotif} { | |
| tk::CheckRadioInvoke %W | |
| } | |
| } | |
| bind Checkbutton <1> { | |
| tk::CheckInvoke %W | |
| } | |
| bind Radiobutton <1> { | |
| tk::CheckRadioInvoke %W | |
| } | |
| bind Checkbutton <Enter> { | |
| tk::CheckEnter %W | |
| } | |
| bind Radiobutton <Enter> { | |
| tk::ButtonEnter %W | |
| } | |
| bind Checkbutton <Leave> { | |
| tk::CheckLeave %W | |
| } | |
| } | |
| bind Button <space> { | |
| tk::ButtonInvoke %W | |
| } | |
| bind Checkbutton <space> { | |
| tk::CheckRadioInvoke %W | |
| } | |
| bind Radiobutton <space> { | |
| tk::CheckRadioInvoke %W | |
| } | |
| bind Button <<Invoke>> { | |
| tk::ButtonInvoke %W | |
| } | |
| bind Checkbutton <<Invoke>> { | |
| tk::CheckRadioInvoke %W | |
| } | |
| bind Radiobutton <<Invoke>> { | |
| tk::CheckRadioInvoke %W | |
| } | |
| bind Button <FocusIn> {} | |
| bind Button <Enter> { | |
| tk::ButtonEnter %W | |
| } | |
| bind Button <Leave> { | |
| tk::ButtonLeave %W | |
| } | |
| bind Button <1> { | |
| tk::ButtonDown %W | |
| } | |
| bind Button <ButtonRelease-1> { | |
| tk::ButtonUp %W | |
| } | |
| bind Checkbutton <FocusIn> {} | |
| bind Radiobutton <FocusIn> {} | |
| bind Radiobutton <Leave> { | |
| tk::ButtonLeave %W | |
| } | |
| if {"win32" eq [tk windowingsystem]} { | |
| ######################### | |
| # Windows implementation | |
| ######################### | |
| # ::tk::ButtonEnter -- | |
| # The procedure below is invoked when the mouse pointer enters a | |
| # button widget. It records the button we're in and changes the | |
| # state of the button to active unless the button is disabled. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonEnter w { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| # If the mouse button is down, set the relief to sunken on entry. | |
| # Overwise, if there's an -overrelief value, set the relief to that. | |
| set Priv($w,relief) [$w cget -relief] | |
| if {$Priv(buttonWindow) eq $w} { | |
| $w configure -relief sunken -state active | |
| set Priv($w,prelief) sunken | |
| } elseif {[set over [$w cget -overrelief]] ne ""} { | |
| $w configure -relief $over | |
| set Priv($w,prelief) $over | |
| } | |
| } | |
| set Priv(window) $w | |
| } | |
| # ::tk::ButtonLeave -- | |
| # The procedure below is invoked when the mouse pointer leaves a | |
| # button widget. It changes the state of the button back to inactive. | |
| # Restore any modified relief too. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonLeave w { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| $w configure -state normal | |
| } | |
| # Restore the original button relief if it was changed by Tk. | |
| # That is signaled by the existence of Priv($w,prelief). | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| set Priv(window) "" | |
| } | |
| # ::tk::ButtonDown -- | |
| # The procedure below is invoked when the mouse button is pressed in | |
| # a button widget. It records the fact that the mouse is in the button, | |
| # saves the button's relief so it can be restored later, and changes | |
| # the relief to sunken. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonDown w { | |
| variable ::tk::Priv | |
| # Only save the button's relief if it does not yet exist. If there | |
| # is an overrelief setting, Priv($w,relief) will already have been set, | |
| # and the current value of the -relief option will be incorrect. | |
| if {![info exists Priv($w,relief)]} { | |
| set Priv($w,relief) [$w cget -relief] | |
| } | |
| if {[$w cget -state] ne "disabled"} { | |
| set Priv(buttonWindow) $w | |
| $w configure -relief sunken -state active | |
| set Priv($w,prelief) sunken | |
| # If this button has a repeatdelay set up, get it going with an after | |
| after cancel $Priv(afterId) | |
| set delay [$w cget -repeatdelay] | |
| set Priv(repeated) 0 | |
| if {$delay > 0} { | |
| set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] | |
| } | |
| } | |
| } | |
| # ::tk::ButtonUp -- | |
| # The procedure below is invoked when the mouse button is released | |
| # in a button widget. It restores the button's relief and invokes | |
| # the command as long as the mouse hasn't left the button. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonUp w { | |
| variable ::tk::Priv | |
| if {$Priv(buttonWindow) eq $w} { | |
| set Priv(buttonWindow) "" | |
| # Restore the button's relief if it was cached. | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| # Clean up the after event from the auto-repeater | |
| after cancel $Priv(afterId) | |
| if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { | |
| $w configure -state normal | |
| # Only invoke the command if it wasn't already invoked by the | |
| # auto-repeater functionality | |
| if { $Priv(repeated) == 0 } { | |
| uplevel #0 [list $w invoke] | |
| } | |
| } | |
| } | |
| } | |
| # ::tk::CheckRadioEnter -- | |
| # The procedure below is invoked when the mouse pointer enters a | |
| # checkbutton or radiobutton widget. It records the button we're in | |
| # and changes the state of the button to active unless the button is | |
| # disabled. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::CheckRadioEnter w { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| if {$Priv(buttonWindow) eq $w} { | |
| $w configure -state active | |
| } | |
| if {[set over [$w cget -overrelief]] ne ""} { | |
| set Priv($w,relief) [$w cget -relief] | |
| set Priv($w,prelief) $over | |
| $w configure -relief $over | |
| } | |
| } | |
| set Priv(window) $w | |
| } | |
| # ::tk::CheckRadioDown -- | |
| # The procedure below is invoked when the mouse button is pressed in | |
| # a button widget. It records the fact that the mouse is in the button, | |
| # saves the button's relief so it can be restored later, and changes | |
| # the relief to sunken. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::CheckRadioDown w { | |
| variable ::tk::Priv | |
| if {![info exists Priv($w,relief)]} { | |
| set Priv($w,relief) [$w cget -relief] | |
| } | |
| if {[$w cget -state] ne "disabled"} { | |
| set Priv(buttonWindow) $w | |
| set Priv(repeated) 0 | |
| $w configure -state active | |
| } | |
| } | |
| } | |
| if {"x11" eq [tk windowingsystem]} { | |
| ##################### | |
| # Unix implementation | |
| ##################### | |
| # ::tk::ButtonEnter -- | |
| # The procedure below is invoked when the mouse pointer enters a | |
| # button widget. It records the button we're in and changes the | |
| # state of the button to active unless the button is disabled. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonEnter {w} { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| # On unix the state is active just with mouse-over | |
| $w configure -state active | |
| # If the mouse button is down, set the relief to sunken on entry. | |
| # Overwise, if there's an -overrelief value, set the relief to that. | |
| set Priv($w,relief) [$w cget -relief] | |
| if {$Priv(buttonWindow) eq $w} { | |
| $w configure -relief sunken | |
| set Priv($w,prelief) sunken | |
| } elseif {[set over [$w cget -overrelief]] ne ""} { | |
| $w configure -relief $over | |
| set Priv($w,prelief) $over | |
| } | |
| } | |
| set Priv(window) $w | |
| } | |
| # ::tk::ButtonLeave -- | |
| # The procedure below is invoked when the mouse pointer leaves a | |
| # button widget. It changes the state of the button back to inactive. | |
| # Restore any modified relief too. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonLeave w { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| $w configure -state normal | |
| } | |
| # Restore the original button relief if it was changed by Tk. | |
| # That is signaled by the existence of Priv($w,prelief). | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| set Priv(window) "" | |
| } | |
| # ::tk::ButtonDown -- | |
| # The procedure below is invoked when the mouse button is pressed in | |
| # a button widget. It records the fact that the mouse is in the button, | |
| # saves the button's relief so it can be restored later, and changes | |
| # the relief to sunken. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonDown w { | |
| variable ::tk::Priv | |
| # Only save the button's relief if it does not yet exist. If there | |
| # is an overrelief setting, Priv($w,relief) will already have been set, | |
| # and the current value of the -relief option will be incorrect. | |
| if {![info exists Priv($w,relief)]} { | |
| set Priv($w,relief) [$w cget -relief] | |
| } | |
| if {[$w cget -state] ne "disabled"} { | |
| set Priv(buttonWindow) $w | |
| $w configure -relief sunken | |
| set Priv($w,prelief) sunken | |
| # If this button has a repeatdelay set up, get it going with an after | |
| after cancel $Priv(afterId) | |
| set delay [$w cget -repeatdelay] | |
| set Priv(repeated) 0 | |
| if {$delay > 0} { | |
| set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] | |
| } | |
| } | |
| } | |
| # ::tk::ButtonUp -- | |
| # The procedure below is invoked when the mouse button is released | |
| # in a button widget. It restores the button's relief and invokes | |
| # the command as long as the mouse hasn't left the button. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonUp w { | |
| variable ::tk::Priv | |
| if {$w eq $Priv(buttonWindow)} { | |
| set Priv(buttonWindow) "" | |
| # Restore the button's relief if it was cached. | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| # Clean up the after event from the auto-repeater | |
| after cancel $Priv(afterId) | |
| if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { | |
| # Only invoke the command if it wasn't already invoked by the | |
| # auto-repeater functionality | |
| if { $Priv(repeated) == 0 } { | |
| uplevel #0 [list $w invoke] | |
| } | |
| } | |
| } | |
| } | |
| } | |
| if {[tk windowingsystem] eq "aqua"} { | |
| #################### | |
| # Mac implementation | |
| #################### | |
| # ::tk::ButtonEnter -- | |
| # The procedure below is invoked when the mouse pointer enters a | |
| # button widget. It records the button we're in and changes the | |
| # state of the button to active unless the button is disabled. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonEnter {w} { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| # If there's an -overrelief value, set the relief to that. | |
| if {$Priv(buttonWindow) eq $w} { | |
| $w configure -state active | |
| } elseif {[set over [$w cget -overrelief]] ne ""} { | |
| set Priv($w,relief) [$w cget -relief] | |
| set Priv($w,prelief) $over | |
| $w configure -relief $over | |
| } | |
| } | |
| set Priv(window) $w | |
| } | |
| # ::tk::ButtonLeave -- | |
| # The procedure below is invoked when the mouse pointer leaves a | |
| # button widget. It changes the state of the button back to | |
| # inactive. If we're leaving the button window with a mouse button | |
| # pressed (Priv(buttonWindow) == $w), restore the relief of the | |
| # button too. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonLeave w { | |
| variable ::tk::Priv | |
| if {$w eq $Priv(buttonWindow)} { | |
| $w configure -state normal | |
| } | |
| # Restore the original button relief if it was changed by Tk. | |
| # That is signaled by the existence of Priv($w,prelief). | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| set Priv(window) "" | |
| } | |
| # ::tk::ButtonDown -- | |
| # The procedure below is invoked when the mouse button is pressed in | |
| # a button widget. It records the fact that the mouse is in the button, | |
| # saves the button's relief so it can be restored later, and changes | |
| # the relief to sunken. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonDown w { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| set Priv(buttonWindow) $w | |
| $w configure -state active | |
| # If this button has a repeatdelay set up, get it going with an after | |
| after cancel $Priv(afterId) | |
| set Priv(repeated) 0 | |
| if { ![catch {$w cget -repeatdelay} delay] } { | |
| if {$delay > 0} { | |
| set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] | |
| } | |
| } | |
| } | |
| } | |
| # ::tk::ButtonUp -- | |
| # The procedure below is invoked when the mouse button is released | |
| # in a button widget. It restores the button's relief and invokes | |
| # the command as long as the mouse hasn't left the button. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonUp w { | |
| variable ::tk::Priv | |
| if {$Priv(buttonWindow) eq $w} { | |
| set Priv(buttonWindow) "" | |
| $w configure -state normal | |
| # Restore the button's relief if it was cached. | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| # Clean up the after event from the auto-repeater | |
| after cancel $Priv(afterId) | |
| if {$Priv(window) eq $w && [$w cget -state] ne "disabled"} { | |
| # Only invoke the command if it wasn't already invoked by the | |
| # auto-repeater functionality | |
| if { $Priv(repeated) == 0 } { | |
| uplevel #0 [list $w invoke] | |
| } | |
| } | |
| } | |
| } | |
| } | |
| ################## | |
| # Shared routines | |
| ################## | |
| # ::tk::ButtonInvoke -- | |
| # The procedure below is called when a button is invoked through | |
| # the keyboard. It simulate a press of the button via the mouse. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::ButtonInvoke w { | |
| if {[winfo exists $w] && [$w cget -state] ne "disabled"} { | |
| set oldRelief [$w cget -relief] | |
| set oldState [$w cget -state] | |
| $w configure -state active -relief sunken | |
| after 100 [list ::tk::ButtonInvokeEnd $w $oldState $oldRelief] | |
| } | |
| } | |
| # ::tk::ButtonInvokeEnd -- | |
| # The procedure below is called after a button is invoked through | |
| # the keyboard. It simulate a release of the button via the mouse. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| # oldState - Old state to be set back. | |
| # oldRelief - Old relief to be set back. | |
| proc ::tk::ButtonInvokeEnd {w oldState oldRelief} { | |
| if {[winfo exists $w]} { | |
| $w configure -state $oldState -relief $oldRelief | |
| uplevel #0 [list $w invoke] | |
| } | |
| } | |
| # ::tk::ButtonAutoInvoke -- | |
| # | |
| # Invoke an auto-repeating button, and set it up to continue to repeat. | |
| # | |
| # Arguments: | |
| # w button to invoke. | |
| # | |
| # Results: | |
| # None. | |
| # | |
| # Side effects: | |
| # May create an after event to call ::tk::ButtonAutoInvoke. | |
| proc ::tk::ButtonAutoInvoke {w} { | |
| variable ::tk::Priv | |
| after cancel $Priv(afterId) | |
| set delay [$w cget -repeatinterval] | |
| if {$Priv(window) eq $w} { | |
| incr Priv(repeated) | |
| uplevel #0 [list $w invoke] | |
| } | |
| if {$delay > 0} { | |
| set Priv(afterId) [after $delay [list tk::ButtonAutoInvoke $w]] | |
| } | |
| } | |
| # ::tk::CheckRadioInvoke -- | |
| # The procedure below is invoked when the mouse button is pressed in | |
| # a checkbutton or radiobutton widget, or when the widget is invoked | |
| # through the keyboard. It invokes the widget if it | |
| # isn't disabled. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| # cmd - The subcommand to invoke (one of invoke, select, or deselect). | |
| proc ::tk::CheckRadioInvoke {w {cmd invoke}} { | |
| if {[$w cget -state] ne "disabled"} { | |
| uplevel #0 [list $w $cmd] | |
| } | |
| } | |
| # Special versions of the handlers for checkbuttons on Unix that do the magic | |
| # to make things work right when the checkbutton indicator is hidden; | |
| # radiobuttons don't need this complexity. | |
| # ::tk::CheckInvoke -- | |
| # The procedure below invokes the checkbutton, like ButtonInvoke, but handles | |
| # what to do when the checkbutton indicator is missing. Only used on Unix. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::CheckInvoke {w} { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| # Additional logic to switch the "selected" colors around if necessary | |
| # (when we're indicator-less). | |
| if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { | |
| if {[$w cget -selectcolor] eq $Priv($w,aselectcolor)} { | |
| $w configure -selectcolor $Priv($w,selectcolor) | |
| } else { | |
| $w configure -selectcolor $Priv($w,aselectcolor) | |
| } | |
| } | |
| uplevel #0 [list $w invoke] | |
| } | |
| } | |
| # ::tk::CheckEnter -- | |
| # The procedure below enters the checkbutton, like ButtonEnter, but handles | |
| # what to do when the checkbutton indicator is missing. Only used on Unix. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::CheckEnter {w} { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| # On unix the state is active just with mouse-over | |
| $w configure -state active | |
| # If the mouse button is down, set the relief to sunken on entry. | |
| # Overwise, if there's an -overrelief value, set the relief to that. | |
| set Priv($w,relief) [$w cget -relief] | |
| if {$Priv(buttonWindow) eq $w} { | |
| $w configure -relief sunken | |
| set Priv($w,prelief) sunken | |
| } elseif {[set over [$w cget -overrelief]] ne ""} { | |
| $w configure -relief $over | |
| set Priv($w,prelief) $over | |
| } | |
| # Compute what the "selected and active" color should be. | |
| if {![$w cget -indicatoron] && [$w cget -selectcolor] ne ""} { | |
| set Priv($w,selectcolor) [$w cget -selectcolor] | |
| lassign [winfo rgb $w [$w cget -selectcolor]] r1 g1 b1 | |
| lassign [winfo rgb $w [$w cget -activebackground]] r2 g2 b2 | |
| set Priv($w,aselectcolor) \ | |
| [format "#%04x%04x%04x" [expr {($r1+$r2)/2}] \ | |
| [expr {($g1+$g2)/2}] [expr {($b1+$b2)/2}]] | |
| # use uplevel to work with other var resolvers | |
| if {[uplevel #0 [list set [$w cget -variable]]] | |
| eq [$w cget -onvalue]} { | |
| $w configure -selectcolor $Priv($w,aselectcolor) | |
| } | |
| } | |
| } | |
| set Priv(window) $w | |
| } | |
| # ::tk::CheckLeave -- | |
| # The procedure below leaves the checkbutton, like ButtonLeave, but handles | |
| # what to do when the checkbutton indicator is missing. Only used on Unix. | |
| # | |
| # Arguments: | |
| # w - The name of the widget. | |
| proc ::tk::CheckLeave {w} { | |
| variable ::tk::Priv | |
| if {[$w cget -state] ne "disabled"} { | |
| $w configure -state normal | |
| } | |
| # Restore the original button "selected" color; but only if the user | |
| # has not changed it in the meantime. | |
| if {![$w cget -indicatoron] && [info exist Priv($w,selectcolor)]} { | |
| if {[$w cget -selectcolor] eq $Priv($w,selectcolor) | |
| || ([info exist Priv($w,aselectcolor)] && | |
| [$w cget -selectcolor] eq $Priv($w,aselectcolor))} { | |
| $w configure -selectcolor $Priv($w,selectcolor) | |
| } | |
| } | |
| unset -nocomplain Priv($w,selectcolor) Priv($w,aselectcolor) | |
| # Restore the original button relief if it was changed by Tk. That is | |
| # signaled by the existence of Priv($w,prelief). | |
| if {[info exists Priv($w,relief)]} { | |
| if {[info exists Priv($w,prelief)] && \ | |
| $Priv($w,prelief) eq [$w cget -relief]} { | |
| $w configure -relief $Priv($w,relief) | |
| } | |
| unset -nocomplain Priv($w,relief) Priv($w,prelief) | |
| } | |
| set Priv(window) "" | |
| } | |
| return | |
| # Local Variables: | |
| # mode: tcl | |
| # fill-column: 78 | |
| # End: | |