Thanks.  Fixed in CVS.

A Sáb, 2004-07-03 às 23:36, Thomas Mills Hinkle escreveu:
> > Have you tried reproducing it on other Unstable boxes?
> 
> I've now reproduced it on another unstable box (powerpc 
> 
> > Do you have a minimal (20-line) testcase so others can run 
> > and verify if the problem exists?
> 
> To reproduce the problem, I tried creating a version of the basictreeview example 
> from the tutorial that allowed you to delete the selected rows. Removing the last 
> row doesn't crash the program. However, hitting "delete" once the view is empty does 
> segfault on my debian unstable box.
> 
> I'm guessing my original app somehow calls this when deleting the last row -- I'll 
> check later to make sure. In the mean time, this example (slightly modified from the 
> tutorial example) does seem to point to a bug somewhere. 
> 
> The culprit is treeview.get_selection().get_selected_rows() called with an empty 
> treeview. Running the attached tvsegfault.py (which does nothing more than set up an 
> empty treeview and call get_selected_rows) will quickly confirm if the segfault is 
> reproducible on other systems.
> 
> Tom
> 
> (p.s. apologies for messing up threading with this message -- my regular computer is 
> temporarily out of commission so I don't have access to the original e-mail to reply 
> to).
> 
>  ----
> Please contribute to my online collaborative literature at
> http://tommyrot.arrr.net/qwiki/
>  ----
> 
> ______________________________________________________________________
> #!/usr/bin/env python
> 
> # example basictreeview.py
> 
> import pygtk
> pygtk.require('2.0')
> import gtk
> 
> class BasicTreeViewExample:
> 
>     # Close the window and quit
>     def delete_event(self, widget, event, data=None):
>         gtk.main_quit()
>         return gtk.FALSE
> 
>     def __init__(self):
>         # Create a new window
>         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
> 
>         self.window.set_title("Basic TreeView Example")
> 
>         self.window.set_size_request(200, 200)
> 
>         self.window.connect("delete_event", self.delete_event)
> 
>         # create a TreeStore with one string column to use as the model
>         self.treestore = gtk.TreeStore(str)
> 
>         # we'll add some data now - 4 rows with 3 child rows each
>         for parent in range(4):
>             piter = self.treestore.append(None, ['parent %i' % parent])
>             for child in range(3):
>                 self.treestore.append(piter, ['child %i of parent %i' %
>                                               (child, parent)])
> 
>         # create the TreeView using treestore
>         self.treeview = gtk.TreeView(self.treestore)
> 
>         # allow multiple selections
>         self.treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
> 
>         # create the TreeViewColumn to display the data
>         self.tvcolumn = gtk.TreeViewColumn('Column 0')
> 
>         # add tvcolumn to treeview
>         self.treeview.append_column(self.tvcolumn)
> 
>         # create a CellRendererText to render the data
>         self.cell = gtk.CellRendererText()
> 
>         # add the cell to the tvcolumn and allow it to expand
>         self.tvcolumn.pack_start(self.cell, True)
> 
>         # set the cell "text" attribute to column 0 - retrieve text
>         # from that column in treestore
>         self.tvcolumn.add_attribute(self.cell, 'text', 0)
> 
>         # make it searchable
>         self.treeview.set_search_column(0)
> 
>         # Allow sorting on the column
>         self.tvcolumn.set_sort_column_id(0)
> 
>         # Allow drag and drop reordering of rows
>         self.treeview.set_reorderable(True)
> 
>         # Create delete button
>         self.deleteB = gtk.Button("Delete Selected Rows")
>         self.deleteB.connect('clicked',self.delete_rows)
>         
>         self.vbox = gtk.VBox()
>         
>         self.vbox.add(self.treeview)
>         self.vbox.add(self.deleteB)
>         self.window.add(self.vbox)
>         
>         self.window.show_all()
> 
>     def delete_rows (self, *args):
>         print 'delete_rows called'
>         treestore,paths=self.treeview.get_selection().get_selected_rows()
>         print 'got selected rows...'
>         paths.reverse()
>         for path in paths:
>             print 'removing iter@',path
>             iter = treestore.get_iter(path)
>             treestore.remove(iter)
> 
> def main():
>     gtk.main()
> 
> if __name__ == "__main__":
>     tvexample = BasicTreeViewExample()
>     main()
> 
> ______________________________________________________________________
> #!/usr/bin/env python
> 
> # segfaulting example, quickndirty
> 
> import pygtk
> pygtk.require('2.0')
> import gtk
> 
> # create a TreeStore with one string column to use as the model
> treestore = gtk.TreeStore(str)
> treeview = gtk.TreeView(treestore)
> treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
> treestore,paths=treeview.get_selection().get_selected_rows()
> 
> ______________________________________________________________________
> _______________________________________________
> pygtk mailing list   [EMAIL PROTECTED]
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
-- 
Gustavo J. A. M. Carneiro
<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
The universe is always one step beyond logic

_______________________________________________
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to