Ticket UUID: | 1288433 | |||
Title: | LisboxSelect event triggers when listbox state is disabled | |||
Type: | Bug | Version: | obsolete: 8.4.11 | |
Submitter: | treincke | Created on: | 2005-09-12 08:22:09 | |
Subsystem: | 09. [listbox] | Assigned To: | fvogel | |
Priority: | 6 | Severity: | Minor | |
Status: | Closed | Last Modified: | 2016-01-06 20:20:27 | |
Resolution: | Fixed | Closed By: | fvogel | |
Closed on: | 2016-01-06 20:20:27 | |||
Description: |
This code pack [listbox .l] .l insert end 1 2 3 bind .l <<ListboxSelect>> {puts click!} .l configure -state disabled shows that the ListBoxSelect event will be triggered regardless of the state of the listbox. Although the listbox is "disabled" so no selection can be made, the event fires, indicating a selection has been made. Jeff Hobbs writes on this subject: (http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/ b63e43a981b6a698/93341e895ba0c054) "Hmm, I would cal that a low priority bug. It appears that the ListboxSelect is merely triggering unnecessarily. The items are not actually being selected, so functionally it is all OK, but we could avoid the ListboxSelect, so we should." A workaround on script level is to check for the listbox state in the code for the binding: bind .l <<ListboxSelect>> { # abort, if disabled: if {[%W cget -state]=="disabled"} {break} # else do the normal action: # ... } | |||
User Comments: |
fvogel added on 2016-01-06 20:20:27:
Fix pushed in core-8-5-branch and trunk. fvogel added on 2015-12-30 22:14:07: Fix now proposed in branch bug-1288433fff to prevent <<ListboxSelect>> from firing when the listbox is in disabled state. Precisions on when the <<ListboxSelect>> event fires are added in the listbox documentation. Corresponding testcase listbox-31.1 added. treincke added on 2006-03-13 16:10:11: Logged In: YES user_id=370915 I think, to fix the problem, the only changes necessary are in the library file 'listbox.tcl' in the procs - ::tk::ListboxBeginSelect - ::tk::ListboxBeginToggle - ::tk::ListboxMotion where the line if {[$w cget -state]=="disabled"} {return} should be added at the top of the body. I don't want to submit this as patch though, because I have not tested all possible cases on all platforms, but on Linux, this fixes all troubles and works nicely. |