Re: menuitem confusion
- From: Dave M <dave nerd gmail com>
- To: gtk-perl mailing list <gtk-perl-list gnome org>
- Subject: Re: menuitem confusion
- Date: Sun, 1 Jul 2012 07:35:29 -0500
On Sun, Jul 1, 2012 at 6:10 AM, Torsten Schoenfeld <kaffeetisch gmx de> wrote:
On 30.06.2012 21:53, Dave M wrote:
sub Gtk3::RadioMenuItem::new {
my ($class, $group) = @_;
return Glib::Object::new( $class, group => $group );
}
This returns
(radiomenuitem.pl:29742): Gtk-CRITICAL **:
gtk_radio_menu_item_get_group: assertion `GTK_IS_RADIO_MENU_ITEM
(radio_menu_item)' failed
Note that the assertion refers to gtk_radio_menu_item_get_group. It is due
to the "group" property officially being of type GtkRadioMenuItem. So in the
Glib::Object::new call above, Glib will create a GValue of this type
containing NULL. But under the hood, GtkRadioMenuItem actually accepts a
list for the "group" property. Here's the relevant code:
if (G_VALUE_HOLDS_OBJECT (value))
slist = gtk_radio_menu_item_get_group ((GtkRadioMenuItem*)
g_value_get_object (value));
else
slist = NULL;
gtk_radio_menu_item_set_group (radio_menu_item, slist);
So it uses G_VALUE_HOLDS_OBJECT, which is always true when Glib constructed
the value, to decide whether the value is a single item or a list. In the
former case, it doesn't handle NULL/undef gracefully -- this is where the
assertion occurs.
I think the following would work better, given the above constraints:
sub Gtk3::RadioMenuItem::new {
my ($class, $group) = @_;
$group = [] unless defined $group;
return $class->new ($group);
Thanks for the explanation. However, when I do things like this,
there are recursion warnings. Isn't that calling itself? Happened
when I did something similarly with "new_with_label" too recently.
Thanks,
Dave M
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]