Hi all, I'm having some trouble understanding how reordering TreeView rows works with drag and drop. I tried searching through the list archives, but didn't find anything that answered my question; if it's been answered before and I missed it, just point me towards that answer :o) We've got a TreeView (using TreeStore as the model), and we've enabled reordering with $treeview->set_reorderable(1). This works just fine: it allows us to drag the rows around wherever we want. We'd like to execute a callback whenever this happens to update the tree structure on disk so that the rows will stay in the same order between executions of the program. In order to do this, we've connected to the 'row-inserted' signal. Our callback gets called at the right time, but it doesn't do what we expect. Here's a small example that has the same problem: sub row_moved { my ($model, $path, $iter) = @_; my $name = $model->get($iter, 0); # $name is undefined! print "Updated location of row $name!\n"; } If I run an example program (attached) with this callback and reorder a row, the following is printed: [zb laptop][0]$ perl treeview_test.pl Use of uninitialized value in concatenation (.) or string at treeview_test.pl line 48. Updated location of row ! [zb laptop][0]$ It behaves sort of like $iter is invalid, but $model->iter_is_valid($iter) returns true. $model->get_string_from_iter($iter) returns a string pointing to the new location of the row. Any help you guys could give would be great. If you need any more information, just ask. Thanks, Zach Bean
Attachment:
treeview_test.pl
Description: Perl program