pidgin/gtkblist.c

changeset 39929
51c9575bbdd2
parent 39834
0345d198dbd6
child 39930
411f3df51bcd
--- a/pidgin/gtkblist.c	Sat Sep 28 05:54:50 2019 -0400
+++ b/pidgin/gtkblist.c	Sun Sep 29 00:58:53 2019 -0400
@@ -1680,14 +1680,19 @@
 		purple_buddy_icons_node_set_custom_icon_from_file(node,
 		                                                  filename);
 	}
+	g_object_set_data(G_OBJECT(data), "buddy-icon-chooser", NULL);
 }
 
 static void
 set_node_custom_icon(GtkWidget *w, PurpleBlistNode *node)
 {
-	/* This doesn't keep track of the returned dialog (so that successive
-	 * calls could be made to re-display that dialog). Do we want that? */
-	GtkWidget *win = pidgin_buddy_icon_chooser_new(NULL, set_node_custom_icon_cb, node);
+	GtkWidget *win = g_object_get_data(G_OBJECT(node), "buddy-icon-chooser");
+	if (win == NULL) {
+		win = pidgin_buddy_icon_chooser_new(NULL, set_node_custom_icon_cb,
+		                                    node);
+		g_object_set_data_full(G_OBJECT(node), "buddy-icon-chooser", win,
+		                       (GDestroyNotify)gtk_widget_destroy);
+	}
 	gtk_widget_show_all(win);
 }
 

mercurial