aboutsummaryrefslogblamecommitdiffstats
path: root/shell/e-shell-shortcut.c
blob: 6e6aaf82606dc5998e343aadae5b05f0813a4f42 (plain) (tree)






























































































































































                                                                                                           
/*
 * 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);
    }
}