Posted to tcl by GPS at Sat Aug 04 07:56:09 GMT 2007view pretty

proc set-scroll-region {canvas id} {
 set subwin [$canvas itemcget $id -window]
 set w [max [winfo reqwidth $subwin] [winfo width $canvas]]
 set h [max [winfo reqheight $subwin] [winfo height $canvas]]
 $canvas itemconfigure $id -width $w -height $h

 set whalf [expr {$w / 2}]
 set hhalf [expr {$h / 2}]
 $canvas configure -scrollregion [list -$whalf -$hhalf $whalf $hhalf]
}


In proc ui I have this:
 grid [canvas $t.v.bottom.canvas \
        -xscrollcommand [list $t.v.bottom.xview set] \
        -yscrollcommand [list $t.v.bottom.yview set]] -row 0 -column 1 -sticky nesw
 
 set subwin [frame $t.v.bottom.canvas.area]

 set id [$t.v.bottom.canvas create window 0 0 -window $subwin]
 bind $subwin <Configure> [list set-scroll-region $t.v.bottom.canvas $id]


Do you have any idea what I'm doing wrong?  It seems to work some of the time, but other times (seemingly randomly) it doesn't.  I assume it's some sort of idle callback issue with geometry management, but I'm not sure how to fix it.