From 3e2771669de2d3bd746704c62038771f734fed6b Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Wed, 22 May 2002 20:28:07 +0000 Subject: New member default_menu_item in EShellUserCreatableItemsHandlerPrivate. * e-shell-user-creatable-items-handler.c: New member default_menu_item in EShellUserCreatableItemsHandlerPrivate. (ensure_menu_items): Set ->default_menu_item. (get_default_action_for_view): When no default item is specified, just return ->default_menu_item. svn path=/trunk/; revision=16976 --- shell/ChangeLog | 8 ++++++ shell/e-shell-user-creatable-items-handler.c | 42 ++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) (limited to 'shell') diff --git a/shell/ChangeLog b/shell/ChangeLog index 48b805372f..f1770d76a5 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,3 +1,11 @@ +2002-05-22 Ettore Perazzoli + + * e-shell-user-creatable-items-handler.c: New member + default_menu_item in EShellUserCreatableItemsHandlerPrivate. + (ensure_menu_items): Set ->default_menu_item. + (get_default_action_for_view): When no default item is specified, + just return ->default_menu_item. + 2002-05-22 Ettore Perazzoli * e-shell.c (e_shell_prepare_for_quit): Only refuse quitting if diff --git a/shell/e-shell-user-creatable-items-handler.c b/shell/e-shell-user-creatable-items-handler.c index 738475a06e..745b651e86 100644 --- a/shell/e-shell-user-creatable-items-handler.c +++ b/shell/e-shell-user-creatable-items-handler.c @@ -50,6 +50,8 @@ static GtkObjectClass *parent_class = NULL; #define VERB_PREFIX "ShellUserCreatableItemVerb" +#define EVOLUTION_MAIL_OAFIID "OAFIID:GNOME_Evolution_Mail_ShellComponent" + #define SHELL_VIEW_KEY "EShellUserCreatableItemsHandler:shell_view" #define COMBO_BUTTON_WIDGET_KEY "EShellUserCreatableItemsHandler:combo_button" @@ -60,6 +62,7 @@ struct _Component { }; typedef struct _Component Component; +/* Representation of a single menu item. */ struct _MenuItem { const char *label; char shortcut; @@ -68,10 +71,20 @@ struct _MenuItem { }; typedef struct _MenuItem MenuItem; -struct _EShellUserCreatableItemsHandlerPrivate { +struct _EShellUserCreatableItemsHandlerPrivate { + /* The components that register user creatable items. */ GSList *components; /* Component */ + /* The "New ..." menu items. */ GSList *menu_items; /* MenuItem */ + + /* The default item (the mailer's "message" item). To be used when the + component in the view we are in doesn't provide a default user + creatable type. This pointer always points to one of the menu items + in ->menu_items. */ + const MenuItem *default_menu_item; + + /* XML to describe the menu. */ char *menu_xml; }; @@ -179,6 +192,7 @@ ensure_menu_items (EShellUserCreatableItemsHandler *handler) GSList *menu_items; GSList *p; int component_num; + const char *default_verb; priv = handler->priv; if (priv->menu_items != NULL) @@ -186,6 +200,7 @@ ensure_menu_items (EShellUserCreatableItemsHandler *handler) menu_items = NULL; component_num = 0; + default_verb = NULL; for (p = priv->components; p != NULL; p = p->next) { const Component *component; int i; @@ -203,6 +218,11 @@ ensure_menu_items (EShellUserCreatableItemsHandler *handler) item->shortcut = type->menuShortcut; item->verb = create_verb_from_component_number_and_type_id (component_num, type->id); + if (strcmp (evolution_shell_component_client_get_id (component->component_client), + EVOLUTION_MAIL_OAFIID) == 0 + && strcmp (type->id, "message") == 0) + default_verb = item->verb; + if (type->icon.width == 0 || type->icon.height == 0) item->icon = NULL; else @@ -219,6 +239,17 @@ ensure_menu_items (EShellUserCreatableItemsHandler *handler) priv->menu_items = NULL; else priv->menu_items = g_slist_sort (menu_items, item_types_sort_func); + + priv->default_menu_item = NULL; + if (default_verb != NULL) { + for (p = priv->menu_items; p != NULL; p = p->next) { + const MenuItem *item; + + item = (const MenuItem *) p->data; + if (strcmp (item->verb, default_verb) == 0) + priv->default_menu_item = item; + } + } } static void @@ -307,7 +338,7 @@ get_default_action_for_view (EShellUserCreatableItemsHandler *handler, } } - return NULL; + return priv->default_menu_item; } @@ -600,9 +631,10 @@ init (EShellUserCreatableItemsHandler *shell_user_creatable_items_handler) EShellUserCreatableItemsHandlerPrivate *priv; priv = g_new (EShellUserCreatableItemsHandlerPrivate, 1); - priv->components = NULL; - priv->menu_xml = NULL; - priv->menu_items = NULL; + priv->components = NULL; + priv->menu_xml = NULL; + priv->menu_items = NULL; + priv->default_menu_item = NULL; shell_user_creatable_items_handler->priv = priv; } -- cgit v1.2.3