On 09.01.2010 16:08, Emmanuel Rodriguez wrote:
What I've noticed is that the data stored in the Gtk2::TreeIter is really volatile and that it doesn't survive too long after a method returns. Furthermore, only the 2 first elements of the TreeIter make it back to the TreeModel methods intact. I also noticed that setting references into the last 2 fields can yield strange situations.
As Kevin said, tree iters don't keep stuff you put into them alive for you. If you want to put any non-integer thing into an iter, you need to keep it alive some other way, for example by also storing it in a cache inside the tree model. This is also shortly explained in perldoc Gtk2::TreeModel / CREATING A CUSTOM TREE MODEL.
Here's a patch against your program that implements this. It also fixes an unrelated typo.
Is the Perl sample code wrong? Maybe I missed something.. Would it make sense to add it to the Gtk2-Perl examples, perhaps someone could find it useful.
The customlist.pl example does this in GET_ITER: my $record = $self->{rows}[$n]; ... return [ $self->{stamp}, $n, $record, undef ]; So the reference it puts into the iter is kept alive by $self->{rows}.I guess a better explanation in the example and maybe also in the Gtk2::TreeModel docs would be useful. Care to write something up?
Attachment:
dom.pl.patch
Description: Text Data