aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/e-shell-view.c')
-rw-r--r--shell/e-shell-view.c81
1 files changed, 72 insertions, 9 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 5962e0686f..34438e4556 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -12,6 +12,7 @@
#include "e-util/e-util.h"
#include "e-shell-view.h"
#include "e-shell-view-menu.h"
+#include "e-shell-shortcut.h"
#define PARENT_TYPE gnome_app_get_type ()
@@ -45,12 +46,6 @@ e_shell_view_setup (EShellView *eshell_view)
}
static void
-e_shell_view_load_shortcut_bar (EShellView *eshell_view)
-{
- gtk_paned_set_position (GTK_PANED (eshell_view->shortcut_hpaned), 100);
-}
-
-static void
e_shell_view_setup_shortcut_display (EShellView *eshell_view)
{
gtk_widget_push_visual (gdk_rgb_get_visual ());
@@ -60,7 +55,7 @@ e_shell_view_setup_shortcut_display (EShellView *eshell_view)
gtk_widget_show (eshell_view->shortcut_hpaned);
eshell_view->shortcut_bar = e_shortcut_bar_new ();
- e_shell_view_load_shortcut_bar (eshell_view);
+ gtk_paned_set_position (GTK_PANED (eshell_view->shortcut_hpaned), 100);
gtk_paned_pack1 (GTK_PANED (eshell_view->shortcut_hpaned),
eshell_view->shortcut_bar, FALSE, TRUE);
@@ -70,6 +65,72 @@ e_shell_view_setup_shortcut_display (EShellView *eshell_view)
gtk_widget_pop_colormap ();
gnome_app_set_contents (GNOME_APP (eshell_view), eshell_view->shortcut_hpaned);
+
+ gtk_signal_connect (
+ GTK_OBJECT (eshell_view->shortcut_bar), "item_selected",
+ GTK_SIGNAL_FUNC (shortcut_bar_item_selected), eshell_view);
+
+}
+
+static void
+e_shell_view_load_group (EShell *eshell, EShellView *eshell_view, EShortcutGroup *esg)
+{
+ EShortcutBar *bar = E_SHORTCUT_BAR (eshell_view->shortcut_bar);
+ int group_num, i;
+ const int items = esg->shortcuts->len;
+
+ group_num = e_shortcut_bar_add_group (bar, esg->title);
+ if (esg->small_icons)
+ e_shortcut_bar_set_view_type (bar, group_num, E_ICON_BAR_SMALL_ICONS);
+
+ for (i = 0; i < items; i++){
+ EShortcut *shortcut = E_SHORTCUT (g_array_index (esg->shortcuts, EShortcut *, i));
+ EFolder *folder = shortcut->efolder;
+ char *type = NULL;
+
+ switch (folder->type){
+ case E_FOLDER_MAIL:
+ type = "folder:";
+ break;
+
+ case E_FOLDER_CONTACTS:
+ type = "contacts:";
+ break;
+
+ case E_FOLDER_CALENDAR:
+ type = "calendar:";
+ break;
+
+ case E_FOLDER_TASKS:
+ type = "todo:";
+ break;
+
+ case E_FOLDER_OTHER:
+ type = "file:";
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ e_shortcut_bar_add_item (bar, group_num, type, folder->name);
+ }
+}
+
+static void
+e_shell_view_load_shortcut_bar (EShellView *eshell_view)
+{
+ EShell *eshell = eshell_view->eshell;
+ const int groups = eshell->shortcut_groups->len;
+ int i;
+
+ for (i = 0; i < groups; i++){
+ EShortcutGroup *esg;
+
+ esg = g_array_index (eshell->shortcut_groups, EShortcutGroup *, i);
+
+ e_shell_view_load_group (eshell, eshell_view, esg);
+ }
}
GtkWidget *
@@ -81,12 +142,14 @@ e_shell_view_new (EShell *eshell, gboolean show_shortcut_bar)
gnome_app_construct (GNOME_APP (eshell_view), "Evolution", "Evolution");
+ eshell_view->eshell = eshell;
e_shell_view_setup (eshell_view);
e_shell_view_setup_menus (eshell_view);
- if (show_shortcut_bar)
+ if (show_shortcut_bar){
e_shell_view_setup_shortcut_display (eshell_view);
- else {
+ e_shell_view_load_shortcut_bar (eshell_view);
+ } else {
g_error ("Non-shortcut bar code not written yet");
}