# HG changeset patch # User Nathan Walp # Date 1093527170 0 # Node ID 4d3a61dcb9429a6453145ae164a586b7a5708fee # Parent 0d0e60f5964a7fd0e763c4582db17df6bba8e160 [gaim-migrate @ 10767] grim was nice enough to put the icon crash fix into faceprint-doesn't-have-to-think (patch) form for me The assorted packagers will likely want to put this patch in their next package, lest their users annoy them, with big nasty pointy teeth. committer: Tailor Script diff -r 0d0e60f5964a -r 4d3a61dcb942 src/gtkconv.c --- a/src/gtkconv.c Thu Aug 26 04:59:29 2004 +0000 +++ b/src/gtkconv.c Thu Aug 26 13:32:50 2004 +0000 @@ -3705,7 +3705,8 @@ /* Remove anything else in our parent */ children = gtk_container_get_children(GTK_CONTAINER(parent)); while (children != NULL) { - gtk_container_remove(GTK_CONTAINER(parent), children->data); + if(children->data != gtkim->icon_container) + gtk_container_remove(GTK_CONTAINER(parent), children->data); children = g_list_remove(children, children->data); } @@ -5620,7 +5621,6 @@ GdkPixbuf *buf; - GtkWidget *vbox; GtkWidget *event; GtkWidget *frame; GdkPixbuf *scale; @@ -5650,8 +5650,9 @@ prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); /* Remove the current icon stuff */ - if (gtkconv->u.im->icon != NULL) - gtk_widget_destroy(gtkconv->u.im->icon->parent->parent->parent); + if (gtkconv->u.im->icon_container != NULL) + gtk_widget_destroy(gtkconv->u.im->icon_container); + gtkconv->u.im->icon_container = NULL; if (gtkconv->u.im->anim != NULL) g_object_unref(G_OBJECT(gtkconv->u.im->anim)); @@ -5670,8 +5671,6 @@ if (gaim_conversation_get_gc(conv) == NULL) return; - - icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); if (icon == NULL) @@ -5696,7 +5695,6 @@ /* make sure we remove the file as soon as possible */ unlink(filename); - if (err) { gaim_debug(GAIM_DEBUG_ERROR, "gtkconv", "Buddy icon error: %s\n", err->message); @@ -5730,12 +5728,13 @@ g_object_unref(G_OBJECT(scale)); - vbox = gtk_vbox_new(FALSE, 0); + gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), (bm ? GTK_SHADOW_NONE : GTK_SHADOW_IN)); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtkconv->u.im->icon_container), frame, + FALSE, FALSE, 0); event = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(frame), event); @@ -5757,14 +5756,17 @@ /* the button seems to get its size before the box, so... */ gtk_widget_size_request(gtkconv->send, &requisition); if (button_type == GAIM_BUTTON_NONE || requisition.height * 1.5 < scale_height) { - gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), vbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), + gtkconv->u.im->icon_container, FALSE, FALSE, 0); /* gtk_box_reorder_child(GTK_BOX(gtkconv->lower_hbox), vbox, 0); */ } else { - gtk_box_pack_start(GTK_BOX(gtkconv->bbox), vbox, FALSE, FALSE, 0); - gtk_box_reorder_child(GTK_BOX(gtkconv->bbox), vbox, 0); + gtk_box_pack_start(GTK_BOX(gtkconv->bbox), + gtkconv->u.im->icon_container, FALSE, FALSE, 0); + gtk_box_reorder_child(GTK_BOX(gtkconv->bbox), + gtkconv->u.im->icon_container, 0); } - gtk_widget_show(vbox); + gtk_widget_show(gtkconv->u.im->icon_container); gtk_widget_show(frame); /* The buddy icon code needs badly to be fixed. */ diff -r 0d0e60f5964a -r 4d3a61dcb942 src/gtkconv.h --- a/src/gtkconv.h Thu Aug 26 04:59:29 2004 +0000 +++ b/src/gtkconv.h Thu Aug 26 13:32:50 2004 +0000 @@ -114,6 +114,7 @@ gboolean a_virgin; /* Buddy icon stuff */ + GtkWidget *icon_container; GtkWidget *icon; gboolean show_icon; gboolean animate;