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 1; } 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; } use strict; use warnings; use Gtk2 '-init'; use Data::Dumper; my $model = MyModel->new; $model->signal_connect (rows_reordered => sub { print "reordered signal:\n"; print Dumper(\ _); }); $model->rows_reordered (Gtk2::TreePath->new_from_indices(99,88,77), undef, 1, 0); exit 0;