| Ticket UUID: | 3324610 | |||
| Title: | ListBox bindImage is broken | |||
| Type: | Bug | Version: | None | |
| Submitter: | takatsuki | Created on: | 2011-06-22 17:09:35 | |
| Subsystem: | bwidget | Assigned To: | oehhar | |
| Priority: | 5 Medium | Severity: | ||
| Status: | Closed | Last Modified: | 2011-06-23 16:20:10 | |
| Resolution: | Accepted | Closed By: | oehhar | |
| Closed on: | 2011-06-23 08:30:58 | |||
| Description: |
The node name of the item returned when triggering the event is incorrectly constructed. To reproduce it:
# Taken from a snippet from FW in http://wiki.tcl.tk/1434,
proc generate_data {} {
set data [list]
for {set x 0} {$x < 5} {incr x} {
set row [list]
for {set y 0} {$y < 5} {incr y} {
lappend row [format "#%02x%02x%02x" [random_byte] [random_byte] [random_byte]]
}
lappend data $row
}
return $data
}
proc random_byte {} {
return [expr {int(rand() * 256)}]
}
set image [image create photo]
$image put [generate_data]
pack [ListBox .l -selectmode single]
.l insert end list:#auto -text 111 -image $image
.l insert end list:#auto -text 222 -image $image
.l insert end list:#auto -text 333 -image $image
.l configure -width 10
proc printNode {args} {
puts "Returned $args"
}
.l bindText <Button-1> [list printNode Text]
.l bindImage <Button-1> [list printNode Image]
vwait forever
Clicking on the text returns:
Returned Text list:0
Returned Text list:1
Returned Text list:2
But on the image, the result is:
Returned Image gbind
Returned Image gbind
Returned Image gbind
The problem is the code in listbox.tcl returns as the node:
[string range [lindex $t 1] 2 end]
Where $t (the tags) are:
img imgbind i:list:1 current
I believe the bug was introduced in Bug 3000293, adding the additional tag imgbind in the place where the code expects to find the node
Attached is a possible patch
| |||
| User Comments: |
oehhar added on 2011-06-23 16:20:10:
Ok, no problem, committed. Commodo syntax checker showed it too ;-) takatsuki added on 2011-06-23 16:04:27: Sorry, I just found a copy-paste error in my patch. In:
proc ListBox::_init_drag_cmd { path X Y top } {
set path [winfo parent $path]
set ltags [$path.c gettags current]
set item [lindex $ltags 0]
if { [string equal $item "item"] ||
[string equal $item "img"] ||
[string equal $item "win"] } {
set item [ListBox::_get_node_name $path $id]
$id is not defined, it should be
set item [ListBox::_get_node_name $path]
Or
set item [ListBox::_get_node_name $path current]
Sorry for that.
oehhar added on 2011-06-23 15:30:58: Good one - I introduced the issue and you fixed it. Committed. takatsuki added on 2011-06-23 00:09:41: File Added - 415641: listbox.patch | |||
Attachments:
- listbox.patch [download] added by takatsuki on 2011-06-23 00:09:41. [details]
