/*
* 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 <config.h>
#include <gnome.h>
#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);
}
}