diff --git a/ChangeLog b/ChangeLog index f1b8b07f8a..8c31ca34fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-08-07 Michael Natterer + + Bug 546756 – gnome-panel crashed with SIGSEGV in + g_type_check_instance_cast() + + * gtk/gtkimagemenuitem.c: add GtkObject::destroy() implementation + and remove the image now that it's an internal child and isn't + destroyed by gtk_container_destroy() any longer. Thanks to tml for + helping bisecting this down. + 2008-08-07 Sven Neumann Bug 546771 - Add writable property "visited" to GtkLinkButton diff --git a/gtk/gtkimagemenuitem.c b/gtk/gtkimagemenuitem.c index 6c8e4ed547..d0f296284f 100644 --- a/gtk/gtkimagemenuitem.c +++ b/gtk/gtkimagemenuitem.c @@ -37,6 +37,7 @@ #include "gtkprivate.h" #include "gtkalias.h" +static void gtk_image_menu_item_destroy (GtkObject *object); static void gtk_image_menu_item_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_image_menu_item_size_allocate (GtkWidget *widget, @@ -73,16 +74,14 @@ G_DEFINE_TYPE (GtkImageMenuItem, gtk_image_menu_item, GTK_TYPE_MENU_ITEM) static void gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass) { - GObjectClass *gobject_class; - GtkWidgetClass *widget_class; - GtkMenuItemClass *menu_item_class; - GtkContainerClass *container_class; + GObjectClass *gobject_class = (GObjectClass*) klass; + GtkObjectClass *object_class = (GtkObjectClass*) klass; + GtkWidgetClass *widget_class = (GtkWidgetClass*) klass; + GtkMenuItemClass *menu_item_class = (GtkMenuItemClass*) klass; + GtkContainerClass *container_class = (GtkContainerClass*) klass; + + object_class->destroy = gtk_image_menu_item_destroy; - gobject_class = (GObjectClass*) klass; - widget_class = (GtkWidgetClass*) klass; - menu_item_class = (GtkMenuItemClass*) klass; - container_class = (GtkContainerClass*) klass; - widget_class->screen_changed = gtk_image_menu_item_screen_changed; widget_class->size_request = gtk_image_menu_item_size_request; widget_class->size_allocate = gtk_image_menu_item_size_allocate; @@ -172,6 +171,18 @@ show_image (GtkImageMenuItem *image_menu_item) return show; } +static void +gtk_image_menu_item_destroy (GtkObject *object) +{ + GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (object); + + if (image_menu_item->image) + gtk_container_remove (GTK_CONTAINER (image_menu_item), + image_menu_item->image); + + GTK_OBJECT_CLASS (gtk_image_menu_item_parent_class)->destroy (object); +} + static void gtk_image_menu_item_toggle_size_request (GtkMenuItem *menu_item, gint *requisition)