Index: GType.xs =================================================================== RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/GType.xs,v retrieving revision 1.84 diff -u -d -p -r1.84 GType.xs --- GType.xs 9 Jan 2008 06:10:34 -0000 1.84 +++ GType.xs 16 Jan 2008 18:27:53 -0000 @@ -2566,7 +2566,12 @@ hasn't been registered with the bindings this function will croak. Returns the values as a list of hashes, one hash for each value, containing -that value's name and nickname. +the value, name and nickname, eg. for Glib::SignalFlags + + { value => 8, + name => 'G_SIGNAL_NO_RECURSE', + nick => 'no-recurse' + } =cut void @@ -2581,15 +2586,15 @@ list_values (class, const char * package croak ("%s is not registered with either GPerl or GLib", package); /* - * unfortunately, GFlagsValue and GEnumValue different structures - * that happen to have identical definitions, so even though it - * is very inviting to use the same code for them, it's not - * technically a good idea. + * GFlagsValue and GEnumValue are nearly the same, but differ in + * that GFlagsValue is a guint for the value, but GEnumValue is gint + * (and some enums do indeed use negatives, eg. GtkResponseType). */ if (G_TYPE_IS_ENUM (type)) { GEnumValue * v = gperl_type_enum_get_values (type); for ( ; v && v->value_nick && v->value_name ; v++) { HV * hv = newHV (); + hv_store (hv, "value",5, newSViv (v->value), 0); hv_store (hv, "nick", 4, newSVpv (v->value_nick, 0), 0); hv_store (hv, "name", 4, newSVpv (v->value_name, 0), 0); XPUSHs (sv_2mortal (newRV_noinc ((SV*)hv))); @@ -2598,6 +2603,7 @@ list_values (class, const char * package GFlagsValue * v = gperl_type_flags_get_values (type); for ( ; v && v->value_nick && v->value_name ; v++) { HV * hv = newHV (); + hv_store (hv, "value",5, newSVuv (v->value), 0); hv_store (hv, "nick", 4, newSVpv (v->value_nick, 0), 0); hv_store (hv, "name", 4, newSVpv (v->value_name, 0), 0); XPUSHs (sv_2mortal (newRV_noinc ((SV*)hv))); Index: t/c.t =================================================================== RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/t/c.t,v retrieving revision 1.7 diff -u -d -p -r1.7 c.t --- t/c.t 5 Oct 2005 19:03:39 -0000 1.7 +++ t/c.t 16 Jan 2008 18:27:53 -0000 @@ -11,7 +11,7 @@ use warnings; ######################### -use Test::More tests => 14; +use Test::More tests => 15; BEGIN { use_ok('Glib') }; ######################### @@ -70,6 +70,41 @@ eval { }; ok ($@, 'failed register_flag with undef'); +my @actual_values = Glib::Type->list_values ('TestEnum'); +my @expected_values = ( + { + value => 1, + name => 'value-one', + nick => 'value-one', + }, + { + value => 2, + name => 'value-two', + nick => 'value-two', + }, + { + value => 3, + name => 'value-three', + nick => 'value-three', + }, + { + value => 42, + name => 'value-four', + nick => 'value-four', + }, + { + value => 5, + name => 'value-five', + nick => 'value-five', + }, + { + value => 6, + name => 'value-six', + nick => 'value-six', + }, +); +is_deeply (\ actual_values, \ expected_values, 'list_interfaces'); + package Tester; use Test::More;