diff gtk/gtkaccount.c @ 15178:9b2a65069744

[gaim-migrate @ 17965] Patch from eperez: Show buddy icons in Accounts window. I also took the liberty of rearranging the columns in the list to something a little more sensible. I'm also thinking we should show the global icon for accounts that are using it committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Mon, 11 Dec 2006 23:41:34 +0000
parents 63d554c2675d
children 26357b7f117e
line wrap: on
line diff
--- a/gtk/gtkaccount.c	Mon Dec 11 22:03:18 2006 +0000
+++ b/gtk/gtkaccount.c	Mon Dec 11 23:41:34 2006 +0000
@@ -49,6 +49,7 @@
 enum
 {
 	COLUMN_ICON,
+	COLUMN_BUDDYICON,
 	COLUMN_SCREENNAME,
 	COLUMN_ENABLED,
 	COLUMN_PROTOCOL,
@@ -1920,43 +1921,50 @@
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 
+	/* Enabled */
+	renderer = gtk_cell_renderer_toggle_new();
+
+	g_signal_connect(G_OBJECT(renderer), "toggled",
+			 G_CALLBACK(enabled_cb), dialog);
+
+	column = gtk_tree_view_column_new_with_attributes(_("Enabled"),
+			 renderer, "active", COLUMN_ENABLED, NULL);
+
+	gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
+	gtk_tree_view_column_set_resizable(column, TRUE);
+
 	/* Screen Name column */
 	column = gtk_tree_view_column_new();
 	gtk_tree_view_column_set_title(column, _("Screen Name"));
 	gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
 	gtk_tree_view_column_set_resizable(column, TRUE);
 
+	/* Status Icon */
+	renderer = gtk_cell_renderer_pixbuf_new();
+	gtk_tree_view_column_pack_start(column, renderer, FALSE);
+	gtk_tree_view_column_add_attribute(column, renderer,
+					   "pixbuf", COLUMN_BUDDYICON);
+
+	/* Screen Name */
+	renderer = gtk_cell_renderer_text_new();
+	gtk_tree_view_column_pack_start(column, renderer, TRUE);
+	gtk_tree_view_column_add_attribute(column, renderer,
+					   "text", COLUMN_SCREENNAME);
+	dialog->screenname_col = column;
+
+
+	/* Protocol name */
+	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_set_title(column, _("Protocol"));
+	gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
+	gtk_tree_view_column_set_resizable(column, TRUE);
+
 	/* Icon */
 	renderer = gtk_cell_renderer_pixbuf_new();
 	gtk_tree_view_column_pack_start(column, renderer, FALSE);
 	gtk_tree_view_column_add_attribute(column, renderer,
 					   "pixbuf", COLUMN_ICON);
 
-	/* Screen Name */
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_column_pack_start(column, renderer, TRUE);
-	gtk_tree_view_column_add_attribute(column, renderer,
-					   "text", COLUMN_SCREENNAME);
-	dialog->screenname_col = column;
-
-	/* Enabled */
-	renderer = gtk_cell_renderer_toggle_new();
-
-	g_signal_connect(G_OBJECT(renderer), "toggled",
-					 G_CALLBACK(enabled_cb), dialog);
-
-	column = gtk_tree_view_column_new_with_attributes(_("Enabled"),
-			renderer, "active", COLUMN_ENABLED, NULL);
-
-	gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
-	gtk_tree_view_column_set_resizable(column, TRUE);
-
-	/* Protocol name */
-	column = gtk_tree_view_column_new();
-	gtk_tree_view_column_set_title(column, _("Protocol"));
-	gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
-	gtk_tree_view_column_set_resizable(column, TRUE);
-
 	renderer = gtk_cell_renderer_text_new();
 	gtk_tree_view_column_pack_start(column, renderer, TRUE);
 	gtk_tree_view_column_add_attribute(column, renderer,
@@ -1967,13 +1975,23 @@
 set_account(GtkListStore *store, GtkTreeIter *iter, GaimAccount *account)
 {
 	GdkPixbuf *pixbuf;
+	GdkPixbuf *statusicon_pixbuf;
+	GdkPixbuf *statusicon_pixbuf_scaled;
 
 	pixbuf = gaim_gtk_create_prpl_icon(account, 0.5);
 	if ((pixbuf != NULL) && gaim_account_is_disconnected(account))
 		gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf, 0.0, FALSE);
 
+	statusicon_pixbuf = gdk_pixbuf_new_from_file(gaim_account_get_ui_string(account, GAIM_GTK_UI, "non-global-buddyicon-path", NULL), NULL); 
+	if (statusicon_pixbuf) {
+		statusicon_pixbuf_scaled = gdk_pixbuf_scale_simple(statusicon_pixbuf, 16, 16, GDK_INTERP_HYPER);
+	} else {
+		statusicon_pixbuf_scaled = NULL;
+	}
+
 	gtk_list_store_set(store, iter,
 			COLUMN_ICON, pixbuf,
+			COLUMN_BUDDYICON, statusicon_pixbuf_scaled,
 			COLUMN_SCREENNAME, gaim_account_get_username(account),
 			COLUMN_ENABLED, gaim_account_get_enabled(account, GAIM_GTK_UI),
 			COLUMN_PROTOCOL, gaim_account_get_protocol_name(account),
@@ -1982,6 +2000,10 @@
 
 	if (pixbuf != NULL)
 		g_object_unref(G_OBJECT(pixbuf));
+	if (statusicon_pixbuf != NULL)
+		g_object_unref(G_OBJECT(statusicon_pixbuf));
+	if (statusicon_pixbuf_scaled != NULL)
+		g_object_unref(G_OBJECT(statusicon_pixbuf_scaled));
 }
 
 static void
@@ -2128,6 +2150,7 @@
 	/* Create the list model. */
 	dialog->model = gtk_list_store_new(NUM_COLUMNS,
 					GDK_TYPE_PIXBUF,   /* COLUMN_ICON */
+					GDK_TYPE_PIXBUF,   /* COLUMN_BUDDYICON */
 					G_TYPE_STRING,     /* COLUMN_SCREENNAME */
 					G_TYPE_BOOLEAN,    /* COLUMN_ENABLED */
 					G_TYPE_STRING,     /* COLUMN_PROTOCOL */