changeset 9885:4d3a61dcb942

[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 <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Thu, 26 Aug 2004 13:32:50 +0000
parents 0d0e60f5964a
children 694c80fc7c2e
files src/gtkconv.c src/gtkconv.h
diffstat 2 files changed, 16 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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. */
--- 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;