From 32ffc3ca1ca80b2d843fbe28da7deab35fabcbf1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 25 Jan 2009 03:28:18 +0000 Subject: Make the sidebar icon follow the folder icon. Fix more runtime warnings. svn path=/branches/kill-bonobo/; revision=37130 --- mail/e-mail-shell-sidebar.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'mail/e-mail-shell-sidebar.c') diff --git a/mail/e-mail-shell-sidebar.c b/mail/e-mail-shell-sidebar.c index 242216d602..c448be9782 100644 --- a/mail/e-mail-shell-sidebar.c +++ b/mail/e-mail-shell-sidebar.c @@ -25,6 +25,7 @@ #include #include "em-utils.h" +#include "em-folder-utils.h" #include "e-mail-shell-module.h" @@ -43,6 +44,42 @@ enum { 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, @@ -94,6 +131,8 @@ mail_shell_sidebar_constructed (GObject *object) EShellSidebar *shell_sidebar; EShellModule *shell_module; EShellView *shell_view; + GtkTreeSelection *selection; + GtkTreeView *tree_view; GtkWidget *container; GtkWidget *widget; @@ -127,6 +166,14 @@ mail_shell_sidebar_constructed (GObject *object) 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 -- cgit v1.2.3