evolution r37130 - in branches/kill-bonobo: mail shell



Author: mbarnes
Date: Sun Jan 25 03:28:18 2009
New Revision: 37130
URL: http://svn.gnome.org/viewvc/evolution?rev=37130&view=rev

Log:
Make the sidebar icon follow the folder icon.
Fix more runtime warnings.


Modified:
   branches/kill-bonobo/mail/e-mail-shell-content.c
   branches/kill-bonobo/mail/e-mail-shell-sidebar.c
   branches/kill-bonobo/mail/e-mail-shell-view-private.c
   branches/kill-bonobo/mail/em-folder-tree-model.c
   branches/kill-bonobo/mail/em-folder-tree-model.h
   branches/kill-bonobo/mail/em-folder-tree.c
   branches/kill-bonobo/mail/em-folder-utils.c
   branches/kill-bonobo/mail/em-folder-utils.h
   branches/kill-bonobo/shell/e-shell-sidebar.c
   branches/kill-bonobo/shell/e-shell-sidebar.h
   branches/kill-bonobo/shell/e-shell-view.h

Modified: branches/kill-bonobo/mail/e-mail-shell-content.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-content.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-content.c	Sun Jan 25 03:28:18 2009
@@ -97,6 +97,9 @@
 
 	/* Save the scrollbar position for the current folder. */
 
+	if (message_list->folder == NULL)
+		return;
+
 	key = "evolution:list_scroll_position";
 	position = message_list_get_scrollbar_position (message_list);
 	value = g_strdup_printf ("%f", position);
@@ -225,7 +228,12 @@
 	CamelFolder *folder;
 
 	folder = message_list->folder;
-	g_return_if_fail (folder != NULL);
+
+	/* This also gets triggered when selecting a store name on
+	 * the sidebar such as "On This Computer", in which case
+	 * 'folder' will be NULL. */
+	if (folder == NULL)
+		return;
 
 	if (camel_object_meta_set (folder, key, selected_uid))
 		camel_object_state_write (folder);

Modified: branches/kill-bonobo/mail/e-mail-shell-sidebar.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-sidebar.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-sidebar.c	Sun Jan 25 03:28:18 2009
@@ -25,6 +25,7 @@
 #include <camel/camel.h>
 
 #include "em-utils.h"
+#include "em-folder-utils.h"
 
 #include "e-mail-shell-module.h"
 
@@ -44,6 +45,42 @@
 static gpointer parent_class;
 
 static void
+mail_shell_sidebar_selection_changed_cb (EShellSidebar *shell_sidebar,
+                                         GtkTreeSelection *selection)
+{
+	EShellView *shell_view;
+	EShellViewClass *shell_view_class;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	const gchar *icon_name;
+	gchar *display_name = NULL;
+	gboolean is_folder = FALSE;
+	guint flags = 0;
+
+	shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
+	shell_view_class = E_SHELL_VIEW_GET_CLASS (shell_view);
+
+	if (gtk_tree_selection_get_selected (selection, &model, &iter))
+		gtk_tree_model_get (
+			model, &iter,
+			COL_STRING_DISPLAY_NAME, &display_name,
+			COL_BOOL_IS_FOLDER, &is_folder,
+			COL_UINT_FLAGS, &flags, -1);
+
+	if (is_folder)
+		icon_name = em_folder_utils_get_icon_name (flags);
+	else {
+		icon_name = shell_view_class->icon_name;
+		display_name = g_strdup (shell_view_class->label);
+	}
+
+	e_shell_sidebar_set_icon_name (shell_sidebar, icon_name);
+	e_shell_sidebar_set_primary_text (shell_sidebar, display_name);
+
+	g_free (display_name);
+}
+
+static void
 mail_shell_sidebar_get_property (GObject *object,
                                  guint property_id,
                                  GValue *value,
@@ -94,6 +131,8 @@
 	EShellSidebar *shell_sidebar;
 	EShellModule *shell_module;
 	EShellView *shell_view;
+	GtkTreeSelection *selection;
+	GtkTreeView *tree_view;
 	GtkWidget *container;
 	GtkWidget *widget;
 
@@ -127,6 +166,14 @@
 	gtk_container_add (GTK_CONTAINER (container), widget);
 	priv->folder_tree = g_object_ref (widget);
 	gtk_widget_show (widget);
+
+	tree_view = GTK_TREE_VIEW (priv->folder_tree);
+	selection = gtk_tree_view_get_selection (tree_view);
+
+	g_signal_connect_swapped (
+		selection, "changed",
+		G_CALLBACK (mail_shell_sidebar_selection_changed_cb),
+		shell_sidebar);
 }
 
 static guint32

Modified: branches/kill-bonobo/mail/e-mail-shell-view-private.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-view-private.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-view-private.c	Sun Jan 25 03:28:18 2009
@@ -271,6 +271,8 @@
 	guint32 num_unread;
 	guint32 num_visible;
 
+	/* FIXME The sidebar should handle icon name and primary text. */
+
 	g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
 
 	shell_view = E_SHELL_VIEW (mail_shell_view);
@@ -290,11 +292,12 @@
 		gchar *label;
 
 		action = e_shell_view_get_action (shell_view);
+
 		g_object_get (action, "label", &label, NULL);
-		e_shell_sidebar_set_primary_text (shell_sidebar, label);
 		e_shell_sidebar_set_secondary_text (shell_sidebar, NULL);
 		e_shell_view_set_title (shell_view, label);
 		g_free (label);
+
 		return;
 	}
 
@@ -390,7 +393,6 @@
 		display_name = folder_name;
 
 	title = g_strdup_printf ("%s (%s)", display_name, buffer->str);
-	e_shell_sidebar_set_primary_text (shell_sidebar, display_name);
 	e_shell_sidebar_set_secondary_text (shell_sidebar, buffer->str);
 	e_shell_view_set_title (shell_view, title);
 	g_free (title);

Modified: branches/kill-bonobo/mail/em-folder-tree-model.c
==============================================================================
--- branches/kill-bonobo/mail/em-folder-tree-model.c	(original)
+++ branches/kill-bonobo/mail/em-folder-tree-model.c	Sun Jan 25 03:28:18 2009
@@ -51,6 +51,7 @@
 #include "mail-folder-cache.h"
 
 #include "em-utils.h"
+#include "em-folder-utils.h"
 
 #include <camel/camel-folder.h>
 #include <camel/camel-vee-store.h>
@@ -71,11 +72,13 @@
 static GType col_types[] = {
 	G_TYPE_STRING,   /* display name */
 	G_TYPE_POINTER,  /* store object */
-	G_TYPE_STRING,   /* path */
+	G_TYPE_STRING,   /* full name */
+	G_TYPE_STRING,   /* icon name */
 	G_TYPE_STRING,   /* uri */
 	G_TYPE_UINT,     /* unread count */
 	G_TYPE_UINT,     /* flags */
 	G_TYPE_BOOLEAN,  /* is a store node */
+	G_TYPE_BOOLEAN,  /* is a folder node */
 	G_TYPE_BOOLEAN,  /* has not-yet-loaded subfolders */
 };
 
@@ -555,6 +558,7 @@
 {
 	EShellModule *shell_module;
 	GtkTreeRowReference *uri_row, *path_row;
+	GtkTreeStore *tree_store;
 	unsigned int unread;
 	GtkTreePath *path;
 	GtkTreeIter sub;
@@ -562,12 +566,14 @@
 	CamelFolder *folder;
 	gboolean emitted = FALSE;
 	const char *name;
+	const gchar *icon_name;
 	guint32 flags;
 
 	/* make sure we don't already know about it? */
 	if (g_hash_table_lookup (si->full_hash, fi->full_name))
 		return;
 
+	tree_store = GTK_TREE_STORE (model);
 	shell_module = model->priv->shell_module;
 
 	if (!fully_loaded)
@@ -642,31 +648,40 @@
 		}
 	}
 
-	gtk_tree_store_set ((GtkTreeStore *) model, iter,
-			    COL_STRING_DISPLAY_NAME, name,
-			    COL_POINTER_CAMEL_STORE, si->store,
-			    COL_STRING_FULL_NAME, fi->full_name,
-			    COL_STRING_URI, fi->uri,
-			    COL_UINT_FLAGS, flags,
-			    COL_BOOL_IS_STORE, FALSE,
-			    COL_BOOL_LOAD_SUBDIRS, load,
-			    -1);
+	/* Choose an icon name for the folder. */
+	icon_name = em_folder_utils_get_icon_name (flags);
+
+	gtk_tree_store_set (
+		tree_store, iter,
+		COL_STRING_DISPLAY_NAME, name,
+		COL_POINTER_CAMEL_STORE, si->store,
+		COL_STRING_FULL_NAME, fi->full_name,
+		COL_STRING_ICON_NAME, icon_name,
+		COL_STRING_URI, fi->uri,
+		COL_UINT_FLAGS, flags,
+		COL_BOOL_IS_STORE, FALSE,
+		COL_BOOL_IS_FOLDER, TRUE,
+		COL_BOOL_LOAD_SUBDIRS, load,
+		-1);
 
 	if (unread != ~0)
-		gtk_tree_store_set ((GtkTreeStore *) model, iter, COL_UINT_UNREAD, unread, -1);
+		gtk_tree_store_set (tree_store, iter, COL_UINT_UNREAD, unread, -1);
 
 	if (load) {
 		/* create a placeholder node for our subfolders... */
-		gtk_tree_store_append ((GtkTreeStore *) model, &sub, iter);
-		gtk_tree_store_set ((GtkTreeStore *) model, &sub,
-				    COL_STRING_DISPLAY_NAME, _("Loading..."),
-				    COL_POINTER_CAMEL_STORE, NULL,
-				    COL_STRING_FULL_NAME, NULL,
-				    COL_BOOL_LOAD_SUBDIRS, FALSE,
-				    COL_BOOL_IS_STORE, FALSE,
-				    COL_STRING_URI, NULL,
-				    COL_UINT_UNREAD, 0,
-				    -1);
+		gtk_tree_store_append (tree_store, &sub, iter);
+		gtk_tree_store_set (
+			tree_store, &sub,
+			COL_STRING_DISPLAY_NAME, _("Loading..."),
+			COL_POINTER_CAMEL_STORE, NULL,
+			COL_STRING_FULL_NAME, NULL,
+			COL_STRING_ICON_NAME, NULL,
+			COL_BOOL_LOAD_SUBDIRS, FALSE,
+			COL_BOOL_IS_STORE, FALSE,
+			COL_BOOL_IS_FOLDER, FALSE,
+			COL_STRING_URI, NULL,
+			COL_UINT_UNREAD, 0,
+			-1);
 
 		path = gtk_tree_model_get_path ((GtkTreeModel *) model, iter);
 		g_signal_emit (model, signals[LOADING_ROW], 0, path, iter);
@@ -678,7 +693,7 @@
 		fi = fi->child;
 
 		do {
-			gtk_tree_store_append ((GtkTreeStore *) model, &sub, iter);
+			gtk_tree_store_append (tree_store, &sub, iter);
 
 			if (!emitted) {
 				path = gtk_tree_model_get_path ((GtkTreeModel *) model, iter);

Modified: branches/kill-bonobo/mail/em-folder-tree-model.h
==============================================================================
--- branches/kill-bonobo/mail/em-folder-tree-model.h	(original)
+++ branches/kill-bonobo/mail/em-folder-tree-model.h	Sun Jan 25 03:28:18 2009
@@ -60,11 +60,13 @@
 	COL_STRING_DISPLAY_NAME,  /* string that appears in the tree */
 	COL_POINTER_CAMEL_STORE,  /* CamelStore object */
 	COL_STRING_FULL_NAME,   /* if node is a folder, the full path name of the folder, no leading / */
+	COL_STRING_ICON_NAME,     /* icon name for the folder */
 	COL_STRING_URI,           /* the uri to get the store or folder object */
 	COL_UINT_UNREAD,          /* unread count */
 	COL_UINT_FLAGS,		/* FolderInfo.flags */
 
 	COL_BOOL_IS_STORE,        /* toplevel store node? */
+	COL_BOOL_IS_FOLDER,       /* folder (not a store) */
 	COL_BOOL_LOAD_SUBDIRS,    /* %TRUE only if the store/folder
 				   * has subfolders which have not yet
 				   * been added to the tree */

Modified: branches/kill-bonobo/mail/em-folder-tree.c
==============================================================================
--- branches/kill-bonobo/mail/em-folder-tree.c	(original)
+++ branches/kill-bonobo/mail/em-folder-tree.c	Sun Jan 25 03:28:18 2009
@@ -363,87 +363,6 @@
 	return FALSE;
 }
 
-
-enum {
-	FOLDER_ICON_NORMAL,
-	FOLDER_ICON_INBOX,
-	FOLDER_ICON_OUTBOX,
-	FOLDER_ICON_TRASH,
-	FOLDER_ICON_JUNK,
-	FOLDER_ICON_SHARED_TO_ME,
-	FOLDER_ICON_SHARED_BY_ME,
-	FOLDER_ICON_SENT,
-	FOLDER_ICON_VIRTUAL,
-	FOLDER_ICON_LAST
-};
-
-static GdkPixbuf *folder_icons[FOLDER_ICON_LAST];
-
-static void
-render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
-	       GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
-{
-	static gboolean initialised = FALSE;
-	GdkPixbuf *pixbuf = NULL;
-	gboolean is_store;
-	guint32 flags;
-	EMEventTargetCustomIcon *target;
-	const char *folder_name;
-
-	if (!initialised) {
-		folder_icons[FOLDER_ICON_NORMAL] = e_icon_factory_get_icon ("folder", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_INBOX] = e_icon_factory_get_icon ("mail-inbox", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_OUTBOX] = e_icon_factory_get_icon ("mail-outbox", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_TRASH] = e_icon_factory_get_icon ("user-trash", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_JUNK] = e_icon_factory_get_icon ("mail-mark-junk", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_SHARED_TO_ME] = e_icon_factory_get_icon ("stock_shared-to-me", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_SHARED_BY_ME] = e_icon_factory_get_icon ("stock_shared-by-me", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_SENT] = e_icon_factory_get_icon ("mail-sent", E_ICON_SIZE_MENU);
-		folder_icons[FOLDER_ICON_VIRTUAL] = e_icon_factory_get_icon ("folder-saved-search", E_ICON_SIZE_MENU);
-
-		initialised = TRUE;
-	}
-
-	gtk_tree_model_get (model, iter, COL_BOOL_IS_STORE, &is_store, COL_UINT_FLAGS, &flags, -1);
-
-	if (!is_store) {
-		switch((flags & CAMEL_FOLDER_TYPE_MASK)) {
-		case CAMEL_FOLDER_TYPE_INBOX:
-			pixbuf = folder_icons[FOLDER_ICON_INBOX];
-			break;
-		case CAMEL_FOLDER_TYPE_OUTBOX:
-			pixbuf = folder_icons[FOLDER_ICON_OUTBOX];
-			break;
-		case CAMEL_FOLDER_TYPE_TRASH:
-			pixbuf = folder_icons[FOLDER_ICON_TRASH];
-			break;
-		case CAMEL_FOLDER_TYPE_JUNK:
-			pixbuf = folder_icons[FOLDER_ICON_JUNK];
-			break;
-		case CAMEL_FOLDER_TYPE_SENT:
-			pixbuf = folder_icons[FOLDER_ICON_SENT];
-			break;
-		default:
-			if (flags & CAMEL_FOLDER_SHARED_TO_ME)
-				pixbuf = folder_icons[FOLDER_ICON_SHARED_TO_ME];
-			else if (flags & CAMEL_FOLDER_SHARED_BY_ME)
-				pixbuf = folder_icons[FOLDER_ICON_SHARED_BY_ME];
-			else if (flags & CAMEL_FOLDER_VIRTUAL)
-				pixbuf = folder_icons[FOLDER_ICON_VIRTUAL];
-			else {
-				pixbuf = folder_icons[FOLDER_ICON_NORMAL];
-				g_object_set (renderer, "pixbuf", pixbuf, "visible", !is_store, NULL);
-				gtk_tree_model_get (model, iter, COL_STRING_FULL_NAME, &folder_name, -1);
-				target = em_event_target_new_custom_icon (em_event_peek(), renderer, folder_name, EM_EVENT_CUSTOM_ICON);
-     				e_event_emit ((EEvent *)em_event_peek (), "folder.customicon", (EEventTarget *) target);
-				return;
-			}
-		}
-	}
-
-	g_object_set (renderer, "pixbuf", pixbuf, "visible", !is_store, NULL);
-}
-
 static void
 render_display_name (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
 		     GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
@@ -539,7 +458,10 @@
 
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
-	gtk_tree_view_column_set_cell_data_func (column, renderer, render_pixbuf, NULL, NULL);
+	gtk_tree_view_column_add_attribute (
+		column, renderer, "icon-name", COL_STRING_ICON_NAME);
+	gtk_tree_view_column_add_attribute (
+		column, renderer, "visible", COL_BOOL_IS_FOLDER);
 
 	renderer = gtk_cell_renderer_text_new ();
 	if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/display/no_folder_dots", NULL))

Modified: branches/kill-bonobo/mail/em-folder-utils.c
==============================================================================
--- branches/kill-bonobo/mail/em-folder-utils.c	(original)
+++ branches/kill-bonobo/mail/em-folder-utils.c	Sun Jan 25 03:28:18 2009
@@ -40,8 +40,6 @@
 #include <glib/gi18n.h>
 
 #include <camel/camel-session.h>
-#include <camel/camel-store.h>
-#include <camel/camel-folder.h>
 #include <camel/camel-vee-store.h>
 #include <camel/camel-vtrash-folder.h>
 #include <camel/camel-stream-mem.h>
@@ -696,3 +694,38 @@
 	g_signal_connect (dialog, "response", G_CALLBACK (emfu_popup_new_folder_response), emft);
 	gtk_widget_show (dialog);
 }
+
+const gchar *
+em_folder_utils_get_icon_name (guint32 flags)
+{
+	const gchar *icon_name;
+
+	switch (flags & CAMEL_FOLDER_TYPE_MASK) {
+		case CAMEL_FOLDER_TYPE_INBOX:
+			icon_name = "mail-inbox";
+			break;
+		case CAMEL_FOLDER_TYPE_OUTBOX:
+			icon_name = "mail-outbox";
+			break;
+		case CAMEL_FOLDER_TYPE_TRASH:
+			icon_name = "user-trash";
+			break;
+		case CAMEL_FOLDER_TYPE_JUNK:
+			icon_name = "mail-mark-junk";
+			break;
+		case CAMEL_FOLDER_TYPE_SENT:
+			icon_name = "mail-sent";
+			break;
+		default:
+			if (flags & CAMEL_FOLDER_SHARED_TO_ME)
+				icon_name = "stock_shared-to-me";
+			else if (flags & CAMEL_FOLDER_SHARED_BY_ME)
+				icon_name = "stock_shared-by-me";
+			else if (flags & CAMEL_FOLDER_VIRTUAL)
+				icon_name = "folder-saved-search";
+			else
+				icon_name = "folder";
+	}
+
+	return icon_name;
+}

Modified: branches/kill-bonobo/mail/em-folder-utils.h
==============================================================================
--- branches/kill-bonobo/mail/em-folder-utils.h	(original)
+++ branches/kill-bonobo/mail/em-folder-utils.h	Sun Jan 25 03:28:18 2009
@@ -21,18 +21,36 @@
  *
  */
 
-#ifndef _EM_FOLDER_UTILS_H
-#define _EM_FOLDER_UTILS_H
+#ifndef EM_FOLDER_UTILS_H
+#define EM_FOLDER_UTILS_H
 
-int em_folder_utils_copy_folders(CamelStore *fromstore, const char *frombase, CamelStore *tostore, const char *tobase, int delete);
+#include <glib.h>
+#include <camel/camel-folder.h>
+#include <camel/camel-store.h>
+#include <mail/em-folder-tree.h>
 
-/* FIXME: These api's are really busted, there is no consistency and most rely on the wrong data */
+G_BEGIN_DECLS
 
-void em_folder_utils_copy_folder (struct _CamelFolderInfo *folderinfo, int delete);
+gint		em_folder_utils_copy_folders	(CamelStore *fromstore,
+						 const gchar *frombase,
+						 CamelStore *tostore,
+						 const gchar *tobase,
+						 int delete);
 
-void em_folder_utils_delete_folder (struct _CamelFolder *folder);
-void em_folder_utils_rename_folder (struct _CamelFolder *folder);
+/* FIXME These API's are really busted.  There is no consistency and
+ *       most rely on the wrong data. */
 
-void em_folder_utils_create_folder (struct _CamelFolderInfo *folderinfo, EMFolderTree * emft);
+void		em_folder_utils_copy_folder	(CamelFolderInfo *folderinfo,
+						 int delete);
 
-#endif
+void		em_folder_utils_delete_folder	(CamelFolder *folder);
+void		em_folder_utils_rename_folder	(CamelFolder *folder);
+
+void		em_folder_utils_create_folder	(CamelFolderInfo *folderinfo,
+						 EMFolderTree * emft);
+
+const gchar *	em_folder_utils_get_icon_name	(guint32 flags);
+
+G_END_DECLS
+
+#endif /* EM_FOLDER_UTILS_H */

Modified: branches/kill-bonobo/shell/e-shell-sidebar.c
==============================================================================
--- branches/kill-bonobo/shell/e-shell-sidebar.c	(original)
+++ branches/kill-bonobo/shell/e-shell-sidebar.c	Sun Jan 25 03:28:18 2009
@@ -32,6 +32,7 @@
 	gpointer shell_view;  /* weak pointer */
 
 	GtkWidget *event_box;
+	GtkWidget *image;
 	GtkWidget *primary_label;
 	GtkWidget *secondary_label;
 	gchar *primary_text;
@@ -40,6 +41,7 @@
 
 enum {
 	PROP_0,
+	PROP_ICON_NAME,
 	PROP_PRIMARY_TEXT,
 	PROP_SECONDARY_TEXT,
 	PROP_SHELL_VIEW
@@ -67,6 +69,12 @@
                             GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_ICON_NAME:
+			e_shell_sidebar_set_icon_name (
+				E_SHELL_SIDEBAR (object),
+				g_value_get_string (value));
+			return;
+
 		case PROP_PRIMARY_TEXT:
 			e_shell_sidebar_set_primary_text (
 				E_SHELL_SIDEBAR (object),
@@ -96,6 +104,12 @@
                             GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_ICON_NAME:
+			g_value_set_string (
+				value, e_shell_sidebar_get_icon_name (
+				E_SHELL_SIDEBAR (object)));
+			return;
+
 		case PROP_PRIMARY_TEXT:
 			g_value_set_string (
 				value, e_shell_sidebar_get_primary_text (
@@ -131,6 +145,11 @@
 		priv->shell_view = NULL;
 	}
 
+	if (priv->image != NULL) {
+		g_object_unref (priv->image);
+		priv->image = NULL;
+	}
+
 	if (priv->event_box != NULL) {
 		g_object_unref (priv->event_box);
 		priv->event_box = NULL;
@@ -174,6 +193,7 @@
 	GtkWidget *container;
 	GtkWidget *widget;
 	gchar *label;
+	gchar *icon_name;
 
 	shell_sidebar = E_SHELL_SIDEBAR (object);
 	shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
@@ -192,8 +212,9 @@
 
 	container = widget;
 
-	widget = gtk_action_create_icon (action, GTK_ICON_SIZE_MENU);
+	widget = gtk_image_new ();
 	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+	shell_sidebar->priv->image = g_object_ref (widget);
 	gtk_widget_show (widget);
 
 	widget = gtk_label_new (NULL);
@@ -210,6 +231,10 @@
 	shell_sidebar->priv->secondary_label = g_object_ref (widget);
 	gtk_widget_show (widget);
 
+	g_object_get (action, "icon-name", &icon_name, NULL);
+	e_shell_sidebar_set_icon_name (shell_sidebar, icon_name);
+	g_free (icon_name);
+
 	g_object_get (action, "label", &label, NULL);
 	e_shell_sidebar_set_primary_text (shell_sidebar, label);
 	g_free (label);
@@ -333,6 +358,21 @@
 	container_class->forall = shell_sidebar_forall;
 
 	/**
+	 * EShellSidebar:icon-name
+	 *
+	 * The named icon is displayed at the top of the sidebar.
+	 */
+	g_object_class_install_property (
+		object_class,
+		PROP_ICON_NAME,
+		g_param_spec_string (
+			"icon-name",
+			NULL,
+			NULL,
+			NULL,
+			G_PARAM_READWRITE));
+
+	/**
 	 * EShellSidebar:primary-text
 	 *
 	 * The primary text is displayed in bold at the top of the sidebar.
@@ -489,6 +529,47 @@
 }
 
 /**
+ * e_shell_sidebar_get_icon_name:
+ * @shell_sidebar: an #EShellSidebar
+ *
+ * Returns the icon name displayed at the top of the sidebar.
+ *
+ * Returns: the icon name for @shell_sidebar
+ **/
+const gchar *
+e_shell_sidebar_get_icon_name (EShellSidebar *shell_sidebar)
+{
+	GtkImage *image;
+	const gchar *icon_name;
+
+	g_return_val_if_fail (E_IS_SHELL_SIDEBAR (shell_sidebar), NULL);
+
+	image = GTK_IMAGE (shell_sidebar->priv->image);
+	gtk_image_get_icon_name (image, &icon_name, NULL);
+
+	return icon_name;
+}
+
+/**
+ * e_shell_sidebar_set_icon_name:
+ *
+ * Sets the icon name displayed at the top of the sidebar.
+ **/
+void
+e_shell_sidebar_set_icon_name (EShellSidebar *shell_sidebar,
+                               const gchar *icon_name)
+{
+	GtkImage *image;
+
+	g_return_if_fail (E_IS_SHELL_SIDEBAR (shell_sidebar));
+
+	image = GTK_IMAGE (shell_sidebar->priv->image);
+	gtk_image_set_from_icon_name (image, icon_name, GTK_ICON_SIZE_MENU);
+
+	g_object_notify (G_OBJECT (shell_sidebar), "icon-name");
+}
+
+/**
  * e_shell_sidebar_get_primary_text:
  * @shell_sidebar: an #EShellSidebar
  *

Modified: branches/kill-bonobo/shell/e-shell-sidebar.h
==============================================================================
--- branches/kill-bonobo/shell/e-shell-sidebar.h	(original)
+++ branches/kill-bonobo/shell/e-shell-sidebar.h	Sun Jan 25 03:28:18 2009
@@ -80,6 +80,9 @@
 guint32		e_shell_sidebar_check_state	(EShellSidebar *shell_sidebar);
 struct _EShellView *
 		e_shell_sidebar_get_shell_view	(EShellSidebar *shell_sidebar);
+const gchar *	e_shell_sidebar_get_icon_name	(EShellSidebar *shell_sidebar);
+void		e_shell_sidebar_set_icon_name	(EShellSidebar *shell_sidebar,
+						 const gchar *icon_name);
 const gchar *	e_shell_sidebar_get_primary_text(EShellSidebar *shell_sidebar);
 void		e_shell_sidebar_set_primary_text(EShellSidebar *shell_sidebar,
 						 const gchar *primary_text);

Modified: branches/kill-bonobo/shell/e-shell-view.h
==============================================================================
--- branches/kill-bonobo/shell/e-shell-view.h	(original)
+++ branches/kill-bonobo/shell/e-shell-view.h	Sun Jan 25 03:28:18 2009
@@ -132,7 +132,8 @@
 	/* Base name of the UI definition file. */
 	const gchar *ui_definition;
 
-	/* GtkUIManager ID for use with EPluginUI. */
+	/* GtkUIManager identifier for use with EPluginUI.
+	 * Usually "org.gnome.evolution.$(VIEW_NAME)". */
 	const gchar *ui_manager_id;
 
 	/* Widget path to the search options popup menu. */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]