There might be another similar bit in gtk_tree_model_get too. Failing
program below, getting
Bizarre copy of CODE in aassign at multi-get.pl line 79.
The case where you give explicit column numbers seems ok. I suppose the
sp global is already past where the local XPUSHs is writing. But do
both cases need an SPAGAIN in case the stack has been extended deep
within the get_value and/or get_n_columns? Or for that matter the
iter_n_children in the marshal too?
package MyModel;
use strict;
use warnings;
use Gtk2;
use Glib::Object::Subclass
Glib::Object::,
interfaces => [ Gtk2::TreeModel:: ];
use constant LEN => 2;
sub INIT_INSTANCE {
my ($self) = @_;
}
sub GET_FLAGS {
return [ 'list-only' ];
}
sub GET_N_COLUMNS {
return 10;
}
sub GET_COLUMN_TYPE {
return 'Glib::String';
}
sub GET_ITER {
my ($self, $path) = @_;
if ($path->get_depth != 1) { return undef; }
my ($index) = $path->get_indices;
if ($index >= LEN) { return undef; }
return [ 123, $index, undef, undef ];
}
sub GET_PATH {
my ($self, $iter) = @_;
return Gtk2::TreePath->new_from_indices ($iter->[1]);
}
sub ITER_N_CHILDREN {
print "ITER_N_CHILDREN\n";
return 2;
}
sub ITER_NTH_CHILD {
my ($self, $iter, $n) = @_;
if (defined $iter) { return undef; }
if ($n >= 2) { return undef; }
return [ 123, $n, undef, undef ];
}
sub ITER_HAS_CHILD {
my ($self, $iter) = @_;
if (defined $iter) {
return 0; # nothing under rows
} else {
return 1;
}
}
sub ITER_PARENT {
return undef;
}
my @row = (100,200,300,400,500,600,700,800,900,1000);
sub GET_VALUE {
my ($self, $iter, $col) = @_;
return $row[$col];
}
use strict;
use warnings;
use Gtk2 '-init';
use Data::Dumper;
my $model = MyModel->new;
# this one ok
if (0) {
my $iter = $model->get_iter_first;
my @a = $model->get($iter, 0,2,4,6,8);
print Dumper([EMAIL PROTECTED]);
}
# but this one gets "Bizarre copy of CODE in aassign" error
{
my $iter = $model->get_iter_first;
my @a = $model->get($iter);
print Dumper([EMAIL PROTECTED]);
}
exit 0;
--- GtkTreeModel.xs 07 Jul 2008 09:53:48 +1000 1.54
+++ GtkTreeModel.xs 11 Jul 2008 11:26:29 +1000
@@ -1106,12 +1106,17 @@
else
{
/* otherwise return all of the columns */
- for( i = 0; i < gtk_tree_model_get_n_columns(tree_model); i++ )
+ gint columns;
+ PUTBACK;
+ columns = gtk_tree_model_get_n_columns(tree_model);
+ for( i = 0; i < columns; i++ )
{
GValue gvalue = {0, };
gtk_tree_model_get_value (tree_model, iter,
i, &gvalue);
+ SPAGAIN;
XPUSHs (sv_2mortal (gperl_sv_from_value (&gvalue)));
+ PUTBACK;
g_value_unset (&gvalue);
}
}
_______________________________________________
gtk-perl-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-perl-list