--- libgtk2-perl-1.014-ORIG/xs/GtkTreeModel.xs 2003-12-04 03:13:17.000000000 +0100 +++ libgtk2-perl-1.014/xs/GtkTreeModel.xs 2003-12-10 22:57:27.000000000 +0100 @@ -20,6 +20,7 @@ */ #include "gtk2perl.h" +#include /* this is just an interface */ @@ -40,6 +41,65 @@ return retval; } +static void +gtk2perl_tree_model_rows_reordered_marshal (GClosure * closure, + GValue * return_value, + guint n_param_values, + const GValue * param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + gint * new_order; + GtkTreeModel * model; + GtkTreeIter * iter; + int n_children, i; + dGPERL_CLOSURE_MARSHAL_ARGS; + + GPERL_CLOSURE_MARSHAL_INIT (closure, marshal_data); + + PERL_UNUSED_VAR (return_value); + PERL_UNUSED_VAR (n_param_values); + PERL_UNUSED_VAR (invocation_hint); + + ENTER; + SAVETMPS; + + PUSHMARK (SP); + + /* instance */ + GPERL_CLOSURE_MARSHAL_PUSH_INSTANCE (param_values); + model = SvGtkTreeModel(instance); + + /* treepath */ + XPUSHs (sv_2mortal (gperl_sv_from_value (param_values+1))); + + /* treeiter */ + XPUSHs (sv_2mortal (gperl_sv_from_value (param_values+2))); + iter = g_value_get_boxed (param_values+2); + + /* gint * new_order */ + new_order = g_value_get_pointer (param_values+3); + n_children = gtk_tree_model_iter_n_children (model, iter); + AV* av = (AV*)sv_2mortal((SV*)newAV()); + av_extend(av, n_children-1); + for (i = 0; i < n_children; i++) + av_store(av, i, newSViv(new_order[i])); + XPUSHs(newRV((SV*)av)); + + GPERL_CLOSURE_MARSHAL_PUSH_DATA; + + PUTBACK; + + GPERL_CLOSURE_MARSHAL_CALL (G_DISCARD); + + /* + * clean up + */ + + FREETMPS; + LEAVE; +} + MODULE = Gtk2::TreeModel PACKAGE = Gtk2::TreePath PREFIX = gtk_tree_path_ @@ -237,6 +297,10 @@ MODULE = Gtk2::TreeModel PACKAGE = Gtk2::TreeModel PREFIX = gtk_tree_model_ +BOOT: + gperl_signal_set_marshaller_for (GTK_TYPE_TREE_MODEL, "rows_reordered", + gtk2perl_tree_model_rows_reordered_marshal); + =for flags GtkTreeModelFlags =cut