Ticket UUID: | 1165534 | |||
Title: | Listbox bug, a non-stop loop cause the shaking of the widge | |||
Type: | Bug | Version: | None | |
Submitter: | pharmatcl | Created on: | 2005-03-17 20:18:38 | |
Subsystem: | bwidget | Assigned To: | damonc | |
Priority: | 5 Medium | Severity: | ||
Status: | Closed | Last Modified: | 2009-06-30 21:22:59 | |
Resolution: | Out of Date | Closed By: | oehhar | |
Closed on: | 2009-06-30 14:22:59 | |||
Description: |
Following is a test code, please run it and your will see a ScrolledWindow shaking. Before you run it, please make sure that "CP: 555 * AAA-I am shaking wildly 10mm dia: 59.5 mm" is in a single line. The length of the list item name really matters. ######### test code starts ###################### set bwidget_path *YOUR BWIDGET PATH HERE* lappend auto_path $bwidget_path package require BWidget toplevel .shaking set f [frame .shaking.butF] set sw [ScrolledWindow $f.sw -auto both\ -relief sunken -borderwidth 2] set marksList [ListBox $f.lb -relief flat -borderwidth 0 \ -padx 0 -height 8 -width 40 -bg white] $sw setwidget $marksList grid $sw -row 0 -column 0 -columnspan 6 -pady 0 -padx 2m $marksList insert end 1 -text "1" $marksList insert end 2 -text "2" $marksList insert end 3 -text "3" $marksList insert end 4 -text "CP: 555 * AAA-I am shaking wildly 10mm dia: 59.5 mm" # make sure that "CP: 555 * AAA-I am shaking wildly 10mm dia: 59.5 mm" is a single line $marksList insert end 5 -text "5" $marksList insert end 6 -text "6" $marksList insert end 7 -text "7" $marksList insert end 8 -text "8" pack $f #### test code ends ################################# #### test environment ################################ If you run it by wish8.3, no problme at all, if you run it by wish8.4, you got a shaking widget. My testing environment: 1. Redhat Linux 2.4.21-9.ELsmp 2. BWidget-1.7.0, tcl 8.4, and tk 8.4 3. Default font #### Code analysis ################################## Bwidget induces an endless loop through a "bind" command. (In Bwidget-1.7.0), In line 105 of listbox.tcl: bind ListBox <Configure> [list ListBox::_resize %W] In proc ListBox::_resize, line 1139 of listbox.tcl: it call _update_scrollregion : } else { if {[Widget::cget $path -selectfill]} { _update_select_fill $path } _update_scrollregion $path # this line triggers an endless loop } In proc ListBox::_update_scrollregion, line 918 of listbox.tcl it call $path.c configure -scrollregion [list 0 0 $w $h] This triggers ListBox <Configure> event and call _resize again, forming a loop. If you put in "puts " commands in _resize and _update_scrollregion you will see _resize and _update_scrollregion called alternatively Removing line 1139, "_update_scrollregion $path", dismantles the shaking. | |||
User Comments: |
oehhar added on 2009-06-30 21:22:59:
It does not happen for me on current cvs on linux or windows for tk8.5.7. This might also be due to an improved locking in the widget. I close the bug, complain if it is still an issue. dev_null42a added on 2006-03-25 01:25:27: Logged In: YES user_id=1381097 After some analysis, it appears that too many configure and resize events are being generated, causing Tk's event ring buffer to overflow.[1] As an experiment, I ran the provided test program under differing window managers; the shaking behavior occurs when differing number of items are added to the ListBox. I see no clean way of resolving this problem. [1] This error was first reported as Bug 795608, "tk binding problem in Gnome and Ximian". My analysis to comp.lang.tcl may be found at http://tinyurl.com/l6dfd. pharmatcl added on 2005-03-18 03:18:39: File Added - 126128: shakingScrolledWindow.tcl |
Attachments:
- shakingScrolledWindow.tcl [download] added by pharmatcl on 2005-03-18 03:18:39. [details]