/* * e-shell-shortcut.c: Handles events from the shortcut bar widget on the * e-shell-view * * Authors: * Damon Chaplin (damon@gtk.org) * Miguel de Icaza (miguel@kernel.org) * * (C) 1999, 2000 Helix Code, Inc. */ #include #include #include "shortcut-bar/e-shortcut-bar.h" #include "e-shell-shortcut.h" #define SMALL_ICONS 1 #define LARGE_ICONS 2 static void set_large_icons (GtkMenu *menu, EShellView *eshell_view) { } static void set_small_icons (GtkMenu *menu, EShellView *eshell_view) { } static void add_group (GtkMenu *menu, EShellView *eshell_view) { } static void remove_group (GtkMenu *menu, EShellView *eshell_view) { } static void rename_group (GtkMenu *menu, EShellView *eshell_view) { } static void add_shortcut (GtkMenu *menu, EShellView *eshell_view) { } static struct { char *label; int flags; GtkSignalFunc callback; } shortcut_menu [] = { { N_("Large Icons"), SMALL_ICONS, GTK_SIGNAL_FUNC (set_large_icons) }, { N_("Small Icons"), LARGE_ICONS, GTK_SIGNAL_FUNC (set_small_icons) }, { NULL, 0, NULL }, { N_("Add New Group"), 0, GTK_SIGNAL_FUNC (add_group) }, { N_("Remove Group"), 0, GTK_SIGNAL_FUNC (remove_group) }, { N_("Rename Group"), 0, GTK_SIGNAL_FUNC (rename_group) }, { NULL, 0, NULL }, { N_("Add Shortcut"), 0, GTK_SIGNAL_FUNC (add_shortcut) }, }; #define ELEMENTS(x) (sizeof (x) / sizeof (x[0])) static void shortcut_bar_show_standard_popup (EShellView *eshell_view, GdkEvent *event, EShortcutGroup *shortcut_group) { GtkWidget *menu, *menuitem; int i; menu = gtk_menu_new (); for (i = 0; i < ELEMENTS (shortcut_menu); i++){ if (shortcut_menu [i].flags & SMALL_ICONS) if (!shortcut_group->small_icons) continue; if (shortcut_menu [i].flags & LARGE_ICONS) if (shortcut_group->small_icons) continue; if (shortcut_menu [i].label == NULL){ menuitem = gtk_menu_item_new (); gtk_widget_set_sensitive (menuitem, FALSE); } else menuitem = gtk_menu_item_new_with_label (_(shortcut_menu [i].label)); gtk_widget_show (menuitem); gtk_menu_append (GTK_MENU (menu), menuitem); gtk_signal_connect ( GTK_OBJECT (menuitem), "activate", shortcut_menu [i].callback, eshell_view); gtk_object_set_data ( GTK_OBJECT (menuitem), "shortcut_group", shortcut_group); } gtk_signal_connect (GTK_OBJECT (menu), "deactivate", GTK_SIGNAL_FUNC (gtk_object_destroy), NULL); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button.button, event->button.time); } static void shortcut_bar_show_context_popup (EShellView *eshell_view, GdkEvent *event, EShortcutGroup *shortcut_group) { printf ("Context popup\n"); } static EShortcut * shortcut_from_pos (EShellView *eshell_view, int group_num, int item_num, EShortcutGroup **group_result) { EShell *eshell = eshell_view->eshell; EShortcutGroup *group; EShortcut *shortcut; if (item_num == -1) return NULL; g_assert (group_num < eshell->shortcut_groups->len); group = g_array_index (eshell->shortcut_groups, EShortcutGroup *, group_num); g_assert (item_num < group->shortcuts->len); shortcut = g_array_index (group->shortcuts, EShortcut *, item_num); *group_result = group; return shortcut; } void shortcut_bar_item_selected (EShortcutBar *shortcut_bar, GdkEvent *event, gint group_num, gint item_num, EShellView *eshell_view) { EShortcut *shortcut; EShortcutGroup *shortcut_group; shortcut = shortcut_from_pos (eshell_view, group_num, item_num, &shortcut_group); if (group_num == -1) return; if (event->button.button == 1) { printf ("Item Selected - %i:%i", group_num + 1, item_num + 1); } else if (event->button.button == 3) { if (shortcut == NULL) shortcut_bar_show_standard_popup ( eshell_view, event, shortcut_group); else shortcut_bar_show_context_popup ( eshell_view, event, shortcut); } }