New signal "component_changed". (class_init): Install. (switch_view):
* e-shell-window.c: New signal "component_changed". (class_init): Install. (switch_view): Emit. (e_shell_window_new): Call e_user_creatable_items_handler_attach_menus() to attach the "New..." menus. (e_shell_window_peek_current_component_id): New. (e_shell_window_peek_shell): Add precondition. (e_shell_window_peek_current_component_id): Likewise. (e_shell_window_peek_bonobo_ui_component): Likewise. * e-user-creatable-items-handler.c: New. * e-user-creatable-items-handler.h: New. * e-shell-window.h: #include <bonobo/bonobo-ui-component.h>. * e-shell.c (struct _EShellPrivate): Add member user_creatable_items_handler. (e_shell_get_user_creatable_items_handler): Remove. (e_shell_peek_user_creatable_items_handler): New. * Evolution-Component.idl (GNOME.Evolution.RequestCreateItem): New method. (GNOME.Evolution.creatableItems): New attribute. * e-shell-user-creatable-items-handler.c: Remove. * e-shell-user-creatable-items-handler.h: Remove. svn path=/trunk/; revision=23314
This commit is contained in:
@ -1,3 +1,35 @@
|
||||
2003-11-13 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-window.c: New signal "component_changed".
|
||||
(class_init): Install.
|
||||
(switch_view): Emit.
|
||||
(e_shell_window_new): Call
|
||||
e_user_creatable_items_handler_attach_menus() to attach the
|
||||
"New..." menus.
|
||||
(e_shell_window_peek_current_component_id): New.
|
||||
(e_shell_window_peek_shell): Add precondition.
|
||||
(e_shell_window_peek_current_component_id): Likewise.
|
||||
(e_shell_window_peek_bonobo_ui_component): Likewise.
|
||||
|
||||
* e-user-creatable-items-handler.c: New.
|
||||
* e-user-creatable-items-handler.h: New.
|
||||
|
||||
* e-shell-window.h: #include <bonobo/bonobo-ui-component.h>.
|
||||
|
||||
* e-shell.c (struct _EShellPrivate): Add member
|
||||
user_creatable_items_handler.
|
||||
(e_shell_get_user_creatable_items_handler): Remove.
|
||||
(e_shell_peek_user_creatable_items_handler): New.
|
||||
|
||||
* Evolution.idl: Don't #include Evolution-ShellComponent.idl.
|
||||
|
||||
* Evolution-Component.idl (GNOME.Evolution.RequestCreateItem): New
|
||||
method.
|
||||
(GNOME.Evolution.creatableItems): New attribute.
|
||||
|
||||
* e-shell-user-creatable-items-handler.c: Remove.
|
||||
* e-shell-user-creatable-items-handler.h: Remove.
|
||||
|
||||
2003-11-12 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-window.c (e_shell_window_switch_to_component): Call
|
||||
|
@ -13,6 +13,18 @@
|
||||
module GNOME {
|
||||
module Evolution {
|
||||
|
||||
/* A type of item that the component can create when asked by the user,
|
||||
e.g. a mail message or an appointment. */
|
||||
struct CreatableItemType {
|
||||
string id;
|
||||
string description;
|
||||
string menuDescription;
|
||||
string tooltip;
|
||||
char menuShortcut;
|
||||
string iconName;
|
||||
};
|
||||
typedef sequence <CreatableItemType> CreatableItemTypeList;
|
||||
|
||||
interface Component : Bonobo::Unknown {
|
||||
exception Failed {};
|
||||
|
||||
@ -34,6 +46,17 @@ module Evolution {
|
||||
is FALSE) */
|
||||
void interactive (in boolean now_interactive,
|
||||
in unsigned long new_view_xid);
|
||||
|
||||
|
||||
/*** The following stuff is needed to build the "New" toolbar
|
||||
item as well as the "File -> New" submenu. ***/
|
||||
|
||||
/* List of creatable items. */
|
||||
readonly attribute CreatableItemTypeList userCreatableItems;
|
||||
|
||||
/* Pop up a new editing dialog for the item with the specified
|
||||
@item_type_name. */
|
||||
void requestCreateItem (in string item_type_name);
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -204,7 +204,6 @@ evolution_SOURCES = \
|
||||
e-shell-settings-dialog.h \
|
||||
e-shell-startup-wizard.c \
|
||||
e-shell-startup-wizard.h \
|
||||
e-shell-user-creatable-items-handler.h \
|
||||
e-shell-view.h \
|
||||
e-shell-window-commands.c \
|
||||
e-shell-window-commands.h \
|
||||
@ -214,6 +213,8 @@ evolution_SOURCES = \
|
||||
e-shell.h \
|
||||
e-sidebar.c \
|
||||
e-sidebar.h \
|
||||
e-user-creatable-items-handler.c \
|
||||
e-user-creatable-items-handler.h \
|
||||
e-task-bar.c \
|
||||
e-task-bar.h \
|
||||
e-task-widget.c \
|
||||
|
@ -1,74 +0,0 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-shell-user-creatable-items-handler.h
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Author: Ettore Perazzoli <ettore@ximian.com>
|
||||
*/
|
||||
|
||||
#ifndef _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_
|
||||
#define _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_
|
||||
|
||||
#include "evolution-shell-component-client.h"
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <bonobo/bonobo-ui-component.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER (e_shell_user_creatable_items_handler_get_type ())
|
||||
#define E_SHELL_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER, EShellUserCreatableItemsHandler))
|
||||
#define E_SHELL_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER, EShellUserCreatableItemsHandlerClass))
|
||||
#define E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER))
|
||||
#define E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_USER_CREATABLE_ITEMS_HANDLER))
|
||||
|
||||
|
||||
typedef struct _EShellUserCreatableItemsHandler EShellUserCreatableItemsHandler;
|
||||
typedef struct _EShellUserCreatableItemsHandlerPrivate EShellUserCreatableItemsHandlerPrivate;
|
||||
typedef struct _EShellUserCreatableItemsHandlerClass EShellUserCreatableItemsHandlerClass;
|
||||
|
||||
#include "e-shell-view.h"
|
||||
|
||||
struct _EShellUserCreatableItemsHandler {
|
||||
GObject parent;
|
||||
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EShellUserCreatableItemsHandlerClass {
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkType e_shell_user_creatable_items_handler_get_type (void);
|
||||
EShellUserCreatableItemsHandler *e_shell_user_creatable_items_handler_new (void);
|
||||
|
||||
void e_shell_user_creatable_items_handler_add_component (EShellUserCreatableItemsHandler *handler,
|
||||
const char *id,
|
||||
EvolutionShellComponentClient *shell_component_client);
|
||||
|
||||
void e_shell_user_creatable_items_handler_attach_menus (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _E_SHELL_USER_CREATABLE_ITEMS_HANDLER_H_ */
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "e-component-registry.h"
|
||||
#include "e-shell-window-commands.h"
|
||||
#include "e-shell-marshal.h"
|
||||
#include "e-sidebar.h"
|
||||
|
||||
#include "e-util/e-lang-utils.h"
|
||||
@ -91,6 +92,14 @@ struct _EShellWindowPrivate {
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
COMPONENT_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
||||
/* ComponentView handling. */
|
||||
|
||||
static ComponentView *
|
||||
@ -253,6 +262,8 @@ switch_view (EShellWindow *window, ComponentView *component_view)
|
||||
NULL);
|
||||
|
||||
g_object_unref (gconf_client);
|
||||
|
||||
g_signal_emit (window, signals[COMPONENT_CHANGED], 0);
|
||||
}
|
||||
|
||||
|
||||
@ -375,6 +386,14 @@ class_init (EShellWindowClass *class)
|
||||
object_class->finalize = impl_finalize;
|
||||
|
||||
parent_class = g_type_class_peek_parent (class);
|
||||
|
||||
signals[COMPONENT_CHANGED] = g_signal_new ("component_changed",
|
||||
G_OBJECT_CLASS_TYPE (object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (EShellWindowClass, component_changed),
|
||||
NULL, NULL,
|
||||
e_shell_marshal_NONE__NONE,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -447,6 +466,8 @@ e_shell_window_new (EShell *shell,
|
||||
}
|
||||
}
|
||||
|
||||
e_user_creatable_items_handler_attach_menus (e_shell_peek_user_creatable_items_handler (shell), window);
|
||||
|
||||
return GTK_WIDGET (window);
|
||||
}
|
||||
|
||||
@ -482,9 +503,23 @@ e_shell_window_switch_to_component (EShellWindow *window, const char *component_
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
e_shell_window_peek_current_component_id (EShellWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL);
|
||||
|
||||
if (window->priv->current_view == NULL)
|
||||
return NULL;
|
||||
|
||||
return window->priv->current_view->component_id;
|
||||
}
|
||||
|
||||
|
||||
EShell *
|
||||
e_shell_window_peek_shell (EShellWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL);
|
||||
|
||||
return window->priv->shell;
|
||||
}
|
||||
|
||||
@ -492,6 +527,8 @@ e_shell_window_peek_shell (EShellWindow *window)
|
||||
BonoboUIComponent *
|
||||
e_shell_window_peek_bonobo_ui_component (EShellWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL);
|
||||
|
||||
return window->priv->ui_component;
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define _E_SHELL_WINDOW_H_
|
||||
|
||||
#include <bonobo/bonobo-window.h>
|
||||
#include <bonobo/bonobo-ui-component.h>
|
||||
|
||||
#define E_TYPE_SHELL_WINDOW (e_shell_window_get_type ())
|
||||
#define E_SHELL_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_SHELL_WINDOW, EShellWindow))
|
||||
@ -44,6 +45,8 @@ struct _EShellWindow {
|
||||
|
||||
struct _EShellWindowClass {
|
||||
BonoboWindowClass parent_class;
|
||||
|
||||
void (* component_changed) (EShellWindow *window);
|
||||
};
|
||||
|
||||
|
||||
@ -55,8 +58,9 @@ GType e_shell_window_get_type (void);
|
||||
GtkWidget *e_shell_window_new (EShell *shell,
|
||||
const char *component_id);
|
||||
|
||||
void e_shell_window_switch_to_component (EShellWindow *shell,
|
||||
const char *component_id);
|
||||
void e_shell_window_switch_to_component (EShellWindow *shell,
|
||||
const char *component_id);
|
||||
const char *e_shell_window_peek_current_component_id (EShellWindow *shell);
|
||||
|
||||
EShell *e_shell_window_peek_shell (EShellWindow *window);
|
||||
BonoboUIComponent *e_shell_window_peek_bonobo_ui_component (EShellWindow *window);
|
||||
|
@ -78,6 +78,7 @@ struct _EShellPrivate {
|
||||
|
||||
GList *windows;
|
||||
|
||||
EUserCreatableItemsHandler *user_creatable_items_handler;
|
||||
EUriSchemaRegistry *uri_schema_registry;
|
||||
EComponentRegistry *component_registry;
|
||||
|
||||
@ -354,6 +355,11 @@ impl_dispose (GObject *object)
|
||||
|
||||
priv->is_initialized = FALSE;
|
||||
|
||||
if (priv->user_creatable_items_handler != NULL) {
|
||||
g_object_unref (priv->user_creatable_items_handler);
|
||||
priv->user_creatable_items_handler = NULL;
|
||||
}
|
||||
|
||||
if (priv->uri_schema_registry != NULL) {
|
||||
g_object_unref (priv->uri_schema_registry);
|
||||
priv->uri_schema_registry = NULL;
|
||||
@ -460,8 +466,9 @@ e_shell_init (EShell *shell)
|
||||
EShellPrivate *priv;
|
||||
|
||||
priv = g_new0 (EShellPrivate, 1);
|
||||
priv->line_status = E_SHELL_LINE_STATUS_OFFLINE;
|
||||
priv->component_registry = e_component_registry_new ();
|
||||
priv->line_status = E_SHELL_LINE_STATUS_OFFLINE;
|
||||
priv->component_registry = e_component_registry_new ();
|
||||
priv->user_creatable_items_handler = e_user_creatable_items_handler_new (priv->component_registry);
|
||||
|
||||
shell->priv = priv;
|
||||
}
|
||||
@ -866,14 +873,6 @@ e_shell_show_settings (EShell *shell,
|
||||
}
|
||||
|
||||
|
||||
EShellUserCreatableItemsHandler *
|
||||
e_shell_get_user_creatable_items_handler (EShell *shell)
|
||||
{
|
||||
g_assert_not_reached (); /* FIXME */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
e_shell_construct_result_to_string (EShellConstructResult result)
|
||||
{
|
||||
@ -954,4 +953,13 @@ e_shell_prepare_for_quit (EShell *shell)
|
||||
}
|
||||
|
||||
|
||||
EUserCreatableItemsHandler *
|
||||
e_shell_peek_user_creatable_items_handler (EShell *shell)
|
||||
{
|
||||
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
|
||||
|
||||
return shell->priv->user_creatable_items_handler;
|
||||
}
|
||||
|
||||
|
||||
BONOBO_TYPE_FUNC_FULL (EShell, GNOME_Evolution_Shell, PARENT_TYPE, e_shell)
|
||||
|
@ -38,9 +38,9 @@ typedef struct _EShellClass EShellClass;
|
||||
#include "Evolution.h"
|
||||
|
||||
#include "e-component-registry.h"
|
||||
#include "e-shell-user-creatable-items-handler.h"
|
||||
#include "e-shell-window.h"
|
||||
#include "e-uri-schema-registry.h"
|
||||
#include "e-user-creatable-items-handler.h"
|
||||
|
||||
|
||||
#define E_TYPE_SHELL (e_shell_get_type ())
|
||||
@ -124,12 +124,12 @@ void e_shell_show_settings (EShell *shell,
|
||||
const char *type,
|
||||
EShellWindow *shell_window);
|
||||
|
||||
EShellUserCreatableItemsHandler *e_shell_get_user_creatable_items_handler (EShell *shell);
|
||||
|
||||
gboolean e_shell_prepare_for_quit (EShell *shell);
|
||||
|
||||
const char *e_shell_construct_result_to_string (EShellConstructResult result);
|
||||
|
||||
EUserCreatableItemsHandler *e_shell_peek_user_creatable_items_handler (EShell *shell);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -24,9 +24,9 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "e-shell-user-creatable-items-handler.h"
|
||||
#include "e-user-creatable-items-handler.h"
|
||||
|
||||
#include "e-shell-corba-icon-utils.h"
|
||||
#include "e-shell-utils.h"
|
||||
|
||||
#include "widgets/misc/e-combo-button.h"
|
||||
|
||||
@ -46,23 +46,23 @@
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
#define PARENT_TYPE G_TYPE_OBJECT
|
||||
static GObjectClass *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"
|
||||
#define TOOLTIPS_KEY "EShellUserCreatableItemsHandler:tooltips"
|
||||
#define SHELL_WINDOW_KEY "EUserCreatableItemsHandler:shell_window"
|
||||
#define COMBO_BUTTON_WIDGET_KEY "EUserCreatableItemsHandler:combo_button"
|
||||
#define TOOLTIPS_KEY "EUserCreatableItemsHandler:tooltips"
|
||||
|
||||
struct _Component {
|
||||
EvolutionShellComponentClient *component_client;
|
||||
|
||||
GNOME_Evolution_UserCreatableItemTypeList *type_list;
|
||||
char *id;
|
||||
GNOME_Evolution_Component component;
|
||||
GNOME_Evolution_CreatableItemTypeList *type_list;
|
||||
};
|
||||
typedef struct _Component Component;
|
||||
|
||||
@ -72,13 +72,12 @@ struct _MenuItem {
|
||||
char shortcut;
|
||||
char *verb;
|
||||
char *tooltip;
|
||||
GdkPixbuf *icon;
|
||||
char *component_id;
|
||||
char *folder_type;
|
||||
GdkPixbuf *icon;
|
||||
};
|
||||
typedef struct _MenuItem MenuItem;
|
||||
|
||||
struct _EShellUserCreatableItemsHandlerPrivate {
|
||||
struct _EUserCreatableItemsHandlerPrivate {
|
||||
/* The components that register user creatable items. */
|
||||
GSList *components; /* Component */
|
||||
|
||||
@ -92,26 +91,27 @@ struct _EShellUserCreatableItemsHandlerPrivate {
|
||||
const MenuItem *default_menu_item;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Component struct handling. */
|
||||
|
||||
static Component *
|
||||
component_new (const char *id,
|
||||
EvolutionShellComponentClient *client)
|
||||
GNOME_Evolution_Component component)
|
||||
{
|
||||
CORBA_Environment ev;
|
||||
Component *new;
|
||||
GNOME_Evolution_ShellComponent objref;
|
||||
|
||||
new = g_new (Component, 1);
|
||||
|
||||
new->component_client = client;
|
||||
g_object_ref (client);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
objref = evolution_shell_component_client_corba_objref (client);
|
||||
new->type_list = GNOME_Evolution_ShellComponent__get_userCreatableItemTypes (objref, &ev);
|
||||
new = g_new (Component, 1);
|
||||
new->id = g_strdup (id);
|
||||
|
||||
new->type_list = GNOME_Evolution_Component__get_userCreatableItems (component, &ev);
|
||||
if (BONOBO_EX (&ev))
|
||||
new->type_list = NULL;
|
||||
|
||||
new->component = component;
|
||||
Bonobo_Unknown_ref (new->component, &ev);
|
||||
|
||||
if (ev._major != CORBA_NO_EXCEPTION)
|
||||
new->type_list = NULL;
|
||||
@ -124,32 +124,52 @@ component_new (const char *id,
|
||||
static void
|
||||
component_free (Component *component)
|
||||
{
|
||||
g_object_unref (component->component_client);
|
||||
CORBA_Environment ev;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
Bonobo_Unknown_unref (component->component, &ev);
|
||||
|
||||
g_free (component->id);
|
||||
|
||||
if (component->type_list != NULL)
|
||||
CORBA_free (component->type_list);
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
g_free (component);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
get_components_from_registry (EUserCreatableItemsHandler *handler,
|
||||
EComponentRegistry *registry)
|
||||
{
|
||||
GSList *registry_list = e_component_registry_peek_list (registry);
|
||||
GSList *p;
|
||||
|
||||
for (p = registry_list; p != NULL; p = p->next) {
|
||||
EComponentInfo *info = p->data;
|
||||
Component *component;
|
||||
|
||||
e_component_registry_activate (registry, info->id, NULL);
|
||||
|
||||
if (info->iface != CORBA_OBJECT_NIL)
|
||||
component = component_new (info->id, info->iface);
|
||||
|
||||
handler->priv->components = g_slist_prepend (handler->priv->components, component);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Helper functions. */
|
||||
|
||||
static gboolean
|
||||
item_is_default (const MenuItem *item,
|
||||
const char *folder_type,
|
||||
const char *component_id)
|
||||
{
|
||||
if (component_id == NULL || folder_type == NULL)
|
||||
if (component_id == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (item->folder_type != NULL && *item->folder_type != 0) {
|
||||
if (strcmp (item->folder_type, folder_type) == 0)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (strcmp (item->component_id, component_id) == 0)
|
||||
return TRUE;
|
||||
else
|
||||
@ -163,14 +183,14 @@ create_verb_from_component_number_and_type_id (int component_num,
|
||||
return g_strdup_printf (VERB_PREFIX ":%d:%s", component_num, type_id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Setting up menu items for the "File -> New" submenu and the "New" toolbar
|
||||
button. */
|
||||
|
||||
static void
|
||||
ensure_menu_items (EShellUserCreatableItemsHandler *handler)
|
||||
ensure_menu_items (EUserCreatableItemsHandler *handler)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
GSList *menu_items;
|
||||
GSList *p;
|
||||
int component_num;
|
||||
@ -190,27 +210,29 @@ ensure_menu_items (EShellUserCreatableItemsHandler *handler)
|
||||
component = (const Component *) p->data;
|
||||
if (component->type_list != NULL) {
|
||||
for (i = 0; i < component->type_list->_length; i ++) {
|
||||
const GNOME_Evolution_UserCreatableItemType *type;
|
||||
const GNOME_Evolution_CreatableItemType *type;
|
||||
MenuItem *item;
|
||||
|
||||
type = (const GNOME_Evolution_UserCreatableItemType *) component->type_list->_buffer + i;
|
||||
type = (const GNOME_Evolution_CreatableItemType *) component->type_list->_buffer + i;
|
||||
|
||||
item = g_new (MenuItem, 1);
|
||||
item->label = type->menuDescription;
|
||||
item->shortcut = type->menuShortcut;
|
||||
item->verb = create_verb_from_component_number_and_type_id (component_num, type->id);
|
||||
item->tooltip = type->tooltip;
|
||||
item->component_id = g_strdup (evolution_shell_component_client_get_id (component->component_client));
|
||||
item->folder_type = g_strdup (type->folderType);
|
||||
item->component_id = g_strdup (component->id);
|
||||
|
||||
if (strcmp (item->component_id, EVOLUTION_MAIL_OAFIID) == 0
|
||||
&& strcmp (type->id, "message") == 0)
|
||||
default_verb = item->verb;
|
||||
|
||||
if (type->icon.width == 0 || type->icon.height == 0)
|
||||
if (type->iconName == "") {
|
||||
item->icon = NULL;
|
||||
else
|
||||
item->icon = e_new_gdk_pixbuf_from_corba_icon (& type->icon, 16, 16);
|
||||
} else {
|
||||
char *icon_path = e_shell_get_icon_path (type->iconName, TRUE);
|
||||
item->icon = gdk_pixbuf_new_from_file (icon_path, NULL);
|
||||
g_free (icon_path);
|
||||
}
|
||||
|
||||
menu_items = g_slist_prepend (menu_items, item);
|
||||
}
|
||||
@ -251,8 +273,6 @@ free_menu_items (GSList *menu_items)
|
||||
g_object_unref (item->icon);
|
||||
|
||||
g_free (item->component_id);
|
||||
g_free (item->folder_type);
|
||||
|
||||
g_free (item);
|
||||
}
|
||||
|
||||
@ -260,33 +280,31 @@ free_menu_items (GSList *menu_items)
|
||||
}
|
||||
|
||||
static const MenuItem *
|
||||
get_default_action_for_view (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view)
|
||||
get_default_action_for_view (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
const char *view_component_id;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
const char *window_component_id;
|
||||
const GSList *p;
|
||||
|
||||
priv = handler->priv;
|
||||
|
||||
view_component_id = e_shell_view_get_current_component_id (shell_view);
|
||||
if (view_component_id == NULL)
|
||||
window_component_id = e_shell_window_peek_current_component_id (window);
|
||||
if (window_component_id == NULL)
|
||||
return priv->default_menu_item;
|
||||
|
||||
for (p = priv->menu_items; p != NULL; p = p->next) {
|
||||
const MenuItem *item;
|
||||
|
||||
item = (const MenuItem *) p->data;
|
||||
if (item_is_default (item,
|
||||
e_shell_view_get_current_folder_type (shell_view),
|
||||
e_shell_view_get_current_component_id (shell_view)))
|
||||
if (item_is_default (item, window_component_id))
|
||||
return item;
|
||||
}
|
||||
|
||||
return priv->default_menu_item;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The XML description for "File -> New". */
|
||||
|
||||
/* This adds a menu item for @item. If @first is true, the keyboard shortcut
|
||||
@ -369,11 +387,10 @@ item_types_sort_func (const void *a,
|
||||
}
|
||||
|
||||
static char *
|
||||
create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
const char *folder_type,
|
||||
create_menu_xml (EUserCreatableItemsHandler *handler,
|
||||
const char *component_id)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
GString *xml;
|
||||
GSList *p;
|
||||
GSList *non_default_items;
|
||||
@ -386,7 +403,7 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
xml = g_string_new ("");
|
||||
|
||||
g_string_append (xml, "<placeholder name=\"ComponentItems\">");
|
||||
g_string_append (xml, "<placeholder name=\"EShellUserCreatableItemsPlaceholder\">");
|
||||
g_string_append (xml, "<placeholder name=\"EUserCreatableItemsPlaceholder\">");
|
||||
|
||||
/* 1. Add all the elements that are default for this component. (Note
|
||||
that we don't need to do any sorting since the items are already
|
||||
@ -399,7 +416,7 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
const MenuItem *item;
|
||||
|
||||
item = (const MenuItem *) p->data;
|
||||
if (item_is_default (item, folder_type, component_id)) {
|
||||
if (item_is_default (item, component_id)) {
|
||||
append_xml_for_menu_item (xml, item, first);
|
||||
first = FALSE;
|
||||
}
|
||||
@ -410,7 +427,7 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
|
||||
if (component_id != NULL)
|
||||
g_string_append_printf (xml,
|
||||
"<separator f=\"\" name=\"EShellUserCreatableItemsHandlerSeparator\"/>");
|
||||
"<separator f=\"\" name=\"EUserCreatableItemsHandlerSeparator\"/>");
|
||||
|
||||
/* 3. Add the elements that are not default for this component. */
|
||||
|
||||
@ -419,7 +436,7 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
const MenuItem *item;
|
||||
|
||||
item = (const MenuItem *) p->data;
|
||||
if (! item_is_default (item, folder_type, component_id))
|
||||
if (! item_is_default (item, component_id))
|
||||
non_default_items = g_slist_prepend (non_default_items, (void *) item);
|
||||
}
|
||||
|
||||
@ -430,7 +447,7 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
|
||||
/* Done... */
|
||||
|
||||
g_string_append (xml, "</placeholder>"); /* EShellUserCreatableItemsPlaceholder */
|
||||
g_string_append (xml, "</placeholder>"); /* EUserCreatableItemsPlaceholder */
|
||||
g_string_append (xml, "</placeholder>"); /* ComponentItems */
|
||||
|
||||
retval = xml->str;
|
||||
@ -439,15 +456,15 @@ create_menu_xml (EShellUserCreatableItemsHandler *handler,
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Verb handling. */
|
||||
|
||||
static void
|
||||
execute_verb (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view,
|
||||
execute_verb (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window,
|
||||
const char *verb_name)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
const Component *component;
|
||||
int component_number;
|
||||
const char *p;
|
||||
@ -479,15 +496,10 @@ execute_verb (EShellUserCreatableItemsHandler *handler,
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
GNOME_Evolution_ShellComponent_userCreateNewItem
|
||||
(evolution_shell_component_client_corba_objref (component->component_client),
|
||||
id,
|
||||
e_safe_corba_string (e_shell_view_get_current_physical_uri (shell_view)),
|
||||
e_safe_corba_string (e_shell_view_get_current_folder_type (shell_view)),
|
||||
&ev);
|
||||
GNOME_Evolution_Component_requestCreateItem (component->component, id, &ev);
|
||||
|
||||
if (ev._major != CORBA_NO_EXCEPTION)
|
||||
g_warning ("Error in userCreateNewItem -- %s", BONOBO_EX_REPOID (&ev));
|
||||
g_warning ("Error in requestCreateItem -- %s", BONOBO_EX_REPOID (&ev));
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
return;
|
||||
@ -500,30 +512,30 @@ verb_fn (BonoboUIComponent *ui_component,
|
||||
void *data,
|
||||
const char *verb_name)
|
||||
{
|
||||
EShellUserCreatableItemsHandler *handler;
|
||||
EShellView *shell_view;
|
||||
EUserCreatableItemsHandler *handler;
|
||||
EShellWindow *shell_window;
|
||||
|
||||
shell_view = g_object_get_data (G_OBJECT (ui_component), SHELL_VIEW_KEY);
|
||||
g_assert (E_IS_SHELL_VIEW (shell_view));
|
||||
shell_window = g_object_get_data (G_OBJECT (ui_component), SHELL_WINDOW_KEY);
|
||||
g_assert (E_IS_SHELL_WINDOW (shell_window));
|
||||
|
||||
handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (data);
|
||||
handler = E_USER_CREATABLE_ITEMS_HANDLER (data);
|
||||
|
||||
execute_verb (handler, shell_view, verb_name);
|
||||
execute_verb (handler, shell_window, verb_name);
|
||||
}
|
||||
|
||||
static void
|
||||
add_verbs (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view)
|
||||
add_verbs (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
BonoboUIComponent *ui_component;
|
||||
int component_num;
|
||||
GSList *p;
|
||||
|
||||
priv = handler->priv;
|
||||
|
||||
ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
|
||||
g_object_set_data (G_OBJECT (ui_component), SHELL_VIEW_KEY, shell_view);
|
||||
ui_component = e_shell_window_peek_bonobo_ui_component (window);
|
||||
g_object_set_data (G_OBJECT (ui_component), SHELL_WINDOW_KEY, window);
|
||||
|
||||
component_num = 0;
|
||||
for (p = priv->components; p != NULL; p = p->next) {
|
||||
@ -549,29 +561,29 @@ add_verbs (EShellUserCreatableItemsHandler *handler,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* The "New" button in the toolbar. */
|
||||
|
||||
static void
|
||||
combo_button_activate_default_callback (EComboButton *combo_button,
|
||||
void *data)
|
||||
{
|
||||
EShellView *shell_view;
|
||||
EShellUserCreatableItemsHandler *handler;
|
||||
EShellWindow *shell_window;
|
||||
EUserCreatableItemsHandler *handler;
|
||||
const MenuItem *menu_item;
|
||||
|
||||
shell_view = E_SHELL_VIEW (data);
|
||||
handler = e_shell_get_user_creatable_items_handler (e_shell_view_get_shell (shell_view));
|
||||
shell_window = E_SHELL_WINDOW (data);
|
||||
handler = e_shell_peek_user_creatable_items_handler (e_shell_window_peek_shell (shell_window));
|
||||
|
||||
menu_item = get_default_action_for_view (handler, shell_view);
|
||||
execute_verb (handler, shell_view, menu_item->verb);
|
||||
menu_item = get_default_action_for_view (handler, shell_window);
|
||||
execute_verb (handler, shell_window, menu_item->verb);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_toolbar_button (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view)
|
||||
setup_toolbar_button (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
BonoboUIComponent *ui_component;
|
||||
GtkWidget *combo_button;
|
||||
GtkWidget *menu;
|
||||
@ -587,12 +599,10 @@ setup_toolbar_button (EShellUserCreatableItemsHandler *handler,
|
||||
e_combo_button_set_label (E_COMBO_BUTTON (combo_button), _("New"));
|
||||
gtk_widget_show (combo_button);
|
||||
|
||||
g_signal_connect (combo_button, "activate_default",
|
||||
G_CALLBACK (combo_button_activate_default_callback),
|
||||
shell_view);
|
||||
g_signal_connect (combo_button, "activate_default", G_CALLBACK (combo_button_activate_default_callback), window);
|
||||
|
||||
ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
|
||||
bonobo_window_add_popup (BONOBO_WINDOW (shell_view), GTK_MENU (menu), "/popups/NewPopup");
|
||||
ui_component = e_shell_window_peek_bonobo_ui_component (window);
|
||||
bonobo_window_add_popup (BONOBO_WINDOW (window), GTK_MENU (menu), "/popups/NewPopup");
|
||||
|
||||
control = bonobo_control_new (combo_button);
|
||||
|
||||
@ -601,43 +611,30 @@ setup_toolbar_button (EShellUserCreatableItemsHandler *handler,
|
||||
|
||||
bonobo_object_unref (control);
|
||||
|
||||
g_object_set_data (G_OBJECT (shell_view), COMBO_BUTTON_WIDGET_KEY, combo_button);
|
||||
g_object_set_data (G_OBJECT (window), COMBO_BUTTON_WIDGET_KEY, combo_button);
|
||||
|
||||
tooltips = gtk_tooltips_new ();
|
||||
g_object_set_data (G_OBJECT (combo_button), TOOLTIPS_KEY, tooltips);
|
||||
}
|
||||
|
||||
|
||||
/* This handles the menus for a given EShellView. We have to rebuild the menu
|
||||
and set the toolbar button every time the view changes, and clean up when
|
||||
the view is destroyed. */
|
||||
|
||||
static void
|
||||
shell_view_view_changed_callback (EShellView *shell_view,
|
||||
const char *evolution_path,
|
||||
const char *physical_uri,
|
||||
const char *folder_type,
|
||||
const char *component_id,
|
||||
void *data)
|
||||
update_for_window (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window)
|
||||
{
|
||||
EShellUserCreatableItemsHandler *handler;
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
GtkWidget *combo_button_widget;
|
||||
GtkTooltips *tooltips;
|
||||
BonoboUIComponent *ui_component;
|
||||
const MenuItem *default_menu_item;
|
||||
char *menu_xml;
|
||||
|
||||
handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (data);
|
||||
priv = handler->priv;
|
||||
|
||||
combo_button_widget = g_object_get_data (G_OBJECT (shell_view), COMBO_BUTTON_WIDGET_KEY);
|
||||
combo_button_widget = g_object_get_data (G_OBJECT (window), COMBO_BUTTON_WIDGET_KEY);
|
||||
g_assert (E_IS_COMBO_BUTTON (combo_button_widget));
|
||||
|
||||
tooltips = g_object_get_data (G_OBJECT (combo_button_widget), TOOLTIPS_KEY);
|
||||
g_assert (tooltips != NULL);
|
||||
|
||||
default_menu_item = get_default_action_for_view (handler, shell_view);
|
||||
default_menu_item = get_default_action_for_view (handler, window);
|
||||
if (default_menu_item == NULL) {
|
||||
gtk_widget_set_sensitive (combo_button_widget, FALSE);
|
||||
e_combo_button_set_label (E_COMBO_BUTTON (combo_button_widget), _("New"));
|
||||
@ -651,29 +648,40 @@ shell_view_view_changed_callback (EShellView *shell_view,
|
||||
e_combo_button_set_icon (E_COMBO_BUTTON (combo_button_widget), default_menu_item->icon);
|
||||
gtk_tooltips_set_tip (tooltips, combo_button_widget, default_menu_item->tooltip, NULL);
|
||||
|
||||
ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
|
||||
bonobo_ui_component_rm (ui_component, "/menu/File/New/ComponentItems/EShellUserCreatableItemsPlaceholder", NULL);
|
||||
bonobo_ui_component_rm (ui_component, "/popups/NewPopup/ComponentItems/EShellUserCreatableItemsPlaceholder", NULL);
|
||||
ui_component = e_shell_window_peek_bonobo_ui_component (window);
|
||||
bonobo_ui_component_rm (ui_component, "/menu/File/New/ComponentItems/EUserCreatableItemsPlaceholder", NULL);
|
||||
bonobo_ui_component_rm (ui_component, "/popups/NewPopup/ComponentItems/EUserCreatableItemsPlaceholder", NULL);
|
||||
|
||||
menu_xml = create_menu_xml (handler, e_shell_window_peek_current_component_id (window));
|
||||
|
||||
menu_xml = create_menu_xml (handler,
|
||||
e_shell_view_get_current_folder_type (shell_view),
|
||||
e_shell_view_get_current_component_id (shell_view));
|
||||
bonobo_ui_component_set (ui_component, "/menu/File/New", menu_xml, NULL);
|
||||
bonobo_ui_component_set (ui_component, "/popups/NewPopup", menu_xml, NULL);
|
||||
g_free (menu_xml);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* This handles the menus for a given EShellWindow. We have to rebuild the menu
|
||||
and set the toolbar button every time the view changes, and clean up when
|
||||
the view is destroyed. */
|
||||
|
||||
static void
|
||||
shell_window_component_changed_callback (EShellWindow *shell_window,
|
||||
EUserCreatableItemsHandler *handler)
|
||||
{
|
||||
update_for_window (handler, shell_window);
|
||||
}
|
||||
|
||||
|
||||
/* GObject methods. */
|
||||
|
||||
static void
|
||||
impl_dispose (GObject *object)
|
||||
{
|
||||
EShellUserCreatableItemsHandler *handler;
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandler *handler;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
GSList *p;
|
||||
|
||||
handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (object);
|
||||
handler = E_USER_CREATABLE_ITEMS_HANDLER (object);
|
||||
priv = handler->priv;
|
||||
|
||||
for (p = priv->components; p != NULL; p = p->next)
|
||||
@ -689,10 +697,10 @@ impl_dispose (GObject *object)
|
||||
static void
|
||||
impl_finalize (GObject *object)
|
||||
{
|
||||
EShellUserCreatableItemsHandler *handler;
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandler *handler;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
|
||||
handler = E_SHELL_USER_CREATABLE_ITEMS_HANDLER (object);
|
||||
handler = E_USER_CREATABLE_ITEMS_HANDLER (object);
|
||||
priv = handler->priv;
|
||||
|
||||
free_menu_items (priv->menu_items);
|
||||
@ -702,7 +710,7 @@ impl_finalize (GObject *object)
|
||||
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
class_init (GObjectClass *object_class)
|
||||
{
|
||||
@ -713,11 +721,11 @@ class_init (GObjectClass *object_class)
|
||||
}
|
||||
|
||||
static void
|
||||
init (EShellUserCreatableItemsHandler *shell_user_creatable_items_handler)
|
||||
init (EUserCreatableItemsHandler *shell_user_creatable_items_handler)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
|
||||
priv = g_new (EShellUserCreatableItemsHandlerPrivate, 1);
|
||||
priv = g_new (EUserCreatableItemsHandlerPrivate, 1);
|
||||
priv->components = NULL;
|
||||
priv->menu_items = NULL;
|
||||
priv->default_menu_item = NULL;
|
||||
@ -725,76 +733,56 @@ init (EShellUserCreatableItemsHandler *shell_user_creatable_items_handler)
|
||||
shell_user_creatable_items_handler->priv = priv;
|
||||
}
|
||||
|
||||
|
||||
EShellUserCreatableItemsHandler *
|
||||
e_shell_user_creatable_items_handler_new (void)
|
||||
{
|
||||
EShellUserCreatableItemsHandler *new;
|
||||
|
||||
new = g_object_new (e_shell_user_creatable_items_handler_get_type (), NULL);
|
||||
EUserCreatableItemsHandler *
|
||||
e_user_creatable_items_handler_new (EComponentRegistry *registry)
|
||||
{
|
||||
EUserCreatableItemsHandler *new;
|
||||
|
||||
new = g_object_new (e_user_creatable_items_handler_get_type (), NULL);
|
||||
|
||||
get_components_from_registry (new, registry);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
void
|
||||
e_shell_user_creatable_items_handler_add_component (EShellUserCreatableItemsHandler *handler,
|
||||
const char *id,
|
||||
EvolutionShellComponentClient *shell_component_client)
|
||||
{
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
|
||||
g_return_if_fail (handler != NULL);
|
||||
g_return_if_fail (E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER (handler));
|
||||
g_return_if_fail (shell_component_client != NULL);
|
||||
g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
|
||||
|
||||
priv = handler->priv;
|
||||
|
||||
priv->components = g_slist_prepend (priv->components, component_new (id, shell_component_client));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* e_shell_user_creatable_items_handler_attach_menus:
|
||||
* e_user_creatable_items_handler_attach_menus:
|
||||
* @handler:
|
||||
* @shell_view:
|
||||
* @shell_window:
|
||||
*
|
||||
* Set up the menus and toolbar items for @shell_view. When the shell changes
|
||||
* Set up the menus and toolbar items for @shell_window. When the shell changes
|
||||
* view, the menu and the toolbar item will update automatically (i.e. the
|
||||
* actions for the current folder will go on top etc.).
|
||||
**/
|
||||
void
|
||||
e_shell_user_creatable_items_handler_attach_menus (EShellUserCreatableItemsHandler *handler,
|
||||
EShellView *shell_view)
|
||||
e_user_creatable_items_handler_attach_menus (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window)
|
||||
{
|
||||
BonoboUIComponent *ui_component;
|
||||
EShellUserCreatableItemsHandlerPrivate *priv;
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
char *menu_xml;
|
||||
|
||||
g_return_if_fail (handler != NULL);
|
||||
g_return_if_fail (E_IS_SHELL_USER_CREATABLE_ITEMS_HANDLER (handler));
|
||||
g_return_if_fail (shell_view != NULL);
|
||||
g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
|
||||
g_return_if_fail (E_IS_USER_CREATABLE_ITEMS_HANDLER (handler));
|
||||
g_return_if_fail (E_IS_SHELL_WINDOW (window));
|
||||
|
||||
priv = handler->priv;
|
||||
|
||||
setup_toolbar_button (handler, shell_view);
|
||||
g_signal_connect (shell_view, "view_changed",
|
||||
G_CALLBACK (shell_view_view_changed_callback), handler);
|
||||
setup_toolbar_button (handler, window);
|
||||
g_signal_connect (window, "component_changed", G_CALLBACK (shell_window_component_changed_callback), handler);
|
||||
|
||||
add_verbs (handler, shell_view);
|
||||
menu_xml = create_menu_xml (handler,
|
||||
e_shell_view_get_current_component_id (shell_view),
|
||||
e_shell_view_get_current_folder_type (shell_view));
|
||||
add_verbs (handler, window);
|
||||
menu_xml = create_menu_xml (handler, e_shell_window_peek_current_component_id (window));
|
||||
|
||||
ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
|
||||
ui_component = e_shell_window_peek_bonobo_ui_component (window);
|
||||
bonobo_ui_component_set (ui_component, "/menu/File/New", menu_xml, NULL);
|
||||
bonobo_ui_component_set (ui_component, "/popups/NewPopup", menu_xml, NULL);
|
||||
|
||||
g_free (menu_xml);
|
||||
|
||||
update_for_window (handler, window);
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_TYPE (e_shell_user_creatable_items_handler,
|
||||
"EShellUserCreatableItemsHandler", EShellUserCreatableItemsHandler,
|
||||
class_init, init, PARENT_TYPE)
|
||||
|
||||
E_MAKE_TYPE (e_user_creatable_items_handler, "EUserCreatableItemsHandler", EUserCreatableItemsHandler, class_init, init, PARENT_TYPE)
|
73
shell/e-user-creatable-items-handler.h
Normal file
73
shell/e-user-creatable-items-handler.h
Normal file
@ -0,0 +1,73 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-shell-user-creatable-items-handler.h
|
||||
*
|
||||
* Copyright (C) 2001 Ximian, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Author: Ettore Perazzoli <ettore@ximian.com>
|
||||
*/
|
||||
|
||||
#ifndef _E_USER_CREATABLE_ITEMS_HANDLER_H_
|
||||
#define _E_USER_CREATABLE_ITEMS_HANDLER_H_
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <bonobo/bonobo-ui-component.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define E_TYPE_USER_CREATABLE_ITEMS_HANDLER (e_user_creatable_items_handler_get_type ())
|
||||
#define E_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER, EUserCreatableItemsHandler))
|
||||
#define E_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_USER_CREATABLE_ITEMS_HANDLER, EUserCreatableItemsHandlerClass))
|
||||
#define E_IS_USER_CREATABLE_ITEMS_HANDLER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER))
|
||||
#define E_IS_USER_CREATABLE_ITEMS_HANDLER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_USER_CREATABLE_ITEMS_HANDLER))
|
||||
|
||||
|
||||
typedef struct _EUserCreatableItemsHandler EUserCreatableItemsHandler;
|
||||
typedef struct _EUserCreatableItemsHandlerPrivate EUserCreatableItemsHandlerPrivate;
|
||||
typedef struct _EUserCreatableItemsHandlerClass EUserCreatableItemsHandlerClass;
|
||||
|
||||
|
||||
#include "e-shell-window.h"
|
||||
|
||||
|
||||
struct _EUserCreatableItemsHandler {
|
||||
GObject parent;
|
||||
|
||||
EUserCreatableItemsHandlerPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EUserCreatableItemsHandlerClass {
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkType e_user_creatable_items_handler_get_type (void);
|
||||
EUserCreatableItemsHandler *e_user_creatable_items_handler_new (EComponentRegistry *registry);
|
||||
|
||||
void e_user_creatable_items_handler_add_component (EUserCreatableItemsHandler *handler,
|
||||
const char *id,
|
||||
GNOME_Evolution_Component component);
|
||||
void e_user_creatable_items_handler_attach_menus (EUserCreatableItemsHandler *handler,
|
||||
EShellWindow *window);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _E_USER_CREATABLE_ITEMS_HANDLER_H_ */
|
Reference in New Issue
Block a user