aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog58
-rw-r--r--shell/Makefile.am57
-rw-r--r--shell/e-corba-shortcuts.c349
-rw-r--r--shell/e-corba-shortcuts.h66
-rw-r--r--shell/e-corba-storage-registry.c494
-rw-r--r--shell/e-corba-storage-registry.h69
-rw-r--r--shell/e-corba-storage.c1072
-rw-r--r--shell/e-corba-storage.h89
-rw-r--r--shell/e-folder-dnd-bridge.c487
-rw-r--r--shell/e-folder-dnd-bridge.h55
-rw-r--r--shell/e-folder-selection-dialog.c479
-rw-r--r--shell/e-folder-selection-dialog.h82
-rw-r--r--shell/e-folder-type-registry.c536
-rw-r--r--shell/e-folder-type-registry.h107
-rw-r--r--shell/e-local-folder.c560
-rw-r--r--shell/e-local-folder.h84
-rw-r--r--shell/e-local-storage.c1237
-rw-r--r--shell/e-local-storage.h67
-rw-r--r--shell/e-setup.c1
-rw-r--r--shell/e-shell-folder-selection-dialog.c548
-rw-r--r--shell/e-shell-folder-selection-dialog.h82
-rw-r--r--shell/e-shell-view.c2948
-rw-r--r--shell/e-shell-view.h128
-rw-r--r--shell/e-shell.c11
-rw-r--r--shell/e-shell.h4
-rw-r--r--shell/e-storage-browser.c347
-rw-r--r--shell/e-storage-browser.h84
-rw-r--r--shell/e-storage-set-view.c2042
-rw-r--r--shell/e-storage-set-view.h124
-rw-r--r--shell/e-storage-set.c885
-rw-r--r--shell/e-storage-set.h123
-rw-r--r--shell/e-storage.c851
-rw-r--r--shell/e-storage.h215
-rw-r--r--shell/e-user-creatable-items-handler.c1
-rw-r--r--shell/evolution-shell-component-client.c924
-rw-r--r--shell/evolution-shell-component-client.h142
-rw-r--r--shell/evolution-shell-component-dnd.c294
-rw-r--r--shell/evolution-shell-component-dnd.h136
-rw-r--r--shell/evolution-storage-listener.c386
-rw-r--r--shell/evolution-storage-listener.h94
-rw-r--r--shell/evolution-storage-set-view-listener.c287
-rw-r--r--shell/evolution-storage-set-view-listener.h81
-rw-r--r--shell/main.c2
43 files changed, 83 insertions, 16605 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 60a2d1ac5d..500d363e3f 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,61 @@
+2003-11-17 Ettore Perazzoli <ettore@ximian.com>
+
+ * e-setup.c: Do not #include "e-local-folder.h".
+
+ * Makefile.am: Don't build evolution-test-component for now since
+ it's all out of date.
+
+ * main.c (evolution_debug_log): Make static instead of extern.
+
+ * e-user-creatable-items-handler.c: #include
+ <bonobo/bonobo-control.h>.
+
+ * e-shell.h: Do not include "e-uri-schema-registry.h" or
+ "evolution-shell-component-client.h".
+ * e-shell.c: Likewise.
+
+ * e-shell.c (struct _EShellPrivate): Removed member
+ uri_schema_registry.
+ (impl_Shell_handleURI): #if 0 it out for now.
+ (e_shell_peek_uri_schema_registry): Disabled for now.
+
+ * e-uri-schema-registry.c: Don't compile for now.
+
+ * e-corba-storage-registry.c: Remove.
+ * e-corba-storage-registry.h: Remove.
+ * e-corba-storage.c: Remove.
+ * e-corba-storage.h: Remove.
+ * e-folder-dnd-bridge.c: Remove.
+ * e-folder-dnd-bridge.h: Remove.
+ * e-folder-selection-dialog.c: Remove.
+ * e-folder-selection-dialog.h: Remove.
+ * e-folder-type-registry.c: Remove.
+ * e-folder-type-registry.h: Remove.
+ * e-local-folder.c: Remove.
+ * e-local-folder.h: Remove.
+ * e-local-storage.c: Remove.
+ * e-local-storage.h: Remove.
+ * e-shell-folder-selection-dialog.c: Remove.
+ * e-shell-folder-selection-dialog.h: Remove.
+ * e-shell-view.c: Remove.
+ * e-shell-view.h: Remove.
+ * e-storage-browser.c: Remove.
+ * e-storage-browser.h: Remove.
+ * e-storage-set-view.c: Remove.
+ * e-storage-set-view.h: Remove.
+ * e-storage-set.c: Remove.
+ * e-storage-set.h: Remove.
+ * e-storage.c: Remove.
+ * e-storage.h: Remove.
+ * evolution-shell-component-client.c: Remove.
+ * evolution-shell-component-client.h: Remove.
+ * evolution-shell-component-dnd.c: Remove.
+ * evolution-shell-component-dnd.h: Remove.
+ * evolution-storage-listener.c: Remove.
+ * evolution-storage-listener.h: Remove.
+ * evolution-storage-set-view-listener.c: Remove.
+ * evolution-storage-set-view-listener.h: Remove.
+
2003-11-13 Ettore Perazzoli <ettore@ximian.com>
* main.c (DEVELOPMENT_WARNING): Define.
diff --git a/shell/Makefile.am b/shell/Makefile.am
index a83991a00b..729b1d2544 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -21,7 +21,7 @@ INCLUDES = \
$(TZDIALOG_CFLAGS) \
$(SHELL_CFLAGS)
-noinst_PROGRAMS = evolution evolution-test-component
+noinst_PROGRAMS = evolution
# Shell CORBA stuff
@@ -109,64 +109,40 @@ eshellincludedir = $(privincludedir)/shell
eshellinclude_HEADERS = \
Evolution.h \
- e-corba-storage.h \
- e-folder-dnd-bridge.h \
e-folder-list.h \
- e-folder-selection-dialog.h \
e-folder-tree.h \
- e-folder-type-registry.h \
e-folder.h \
e-icon-factory.h \
e-shell-corba-icon-utils.h \
e-shell-utils.h \
- e-storage-browser.h \
- e-storage-set-view.h \
- e-storage-set.h \
- e-storage.h \
evolution-activity-client.h \
evolution-config-control.h \
evolution-folder-selector-button.h \
evolution-session.h \
evolution-shell-client.h \
- evolution-shell-component-client.h \
- evolution-shell-component-dnd.h \
- evolution-shell-component-utils.h \
evolution-shell-component.h \
+ evolution-shell-component-utils.h \
evolution-shell-view.h \
- evolution-storage-listener.h \
- evolution-storage-set-view-listener.h \
evolution-storage.h \
evolution-wizard.h
libeshell_la_SOURCES = \
$(IDL_GENERATED) \
$(MARSHAL_GENERATED) \
- e-corba-storage.c \
- e-folder-dnd-bridge.c \
e-folder-list.c \
- e-folder-selection-dialog.c \
e-folder-tree.c \
- e-folder-type-registry.c \
e-folder.c \
e-icon-factory.c \
e-shell-corba-icon-utils.c \
e-shell-utils.c \
- e-storage-browser.c \
- e-storage-set-view.c \
- e-storage-set.c \
- e-storage.c \
evolution-activity-client.c \
evolution-config-control.c \
evolution-folder-selector-button.c \
evolution-session.c \
evolution-shell-client.c \
- evolution-shell-component-client.c \
- evolution-shell-component-dnd.c \
- evolution-shell-component-utils.c \
evolution-shell-component.c \
+ evolution-shell-component-utils.c \
evolution-shell-view.c \
- evolution-storage-listener.c \
- evolution-storage-set-view-listener.c \
evolution-storage.c \
evolution-wizard.c \
$(eshellinclude_HEADERS)
@@ -185,14 +161,8 @@ evolution_SOURCES = \
e-config-upgrade.h \
e-corba-config-page.c \
e-corba-config-page.h \
- e-corba-storage-registry.c \
- e-corba-storage-registry.h \
e-history.c \
e-history.h \
- e-local-folder.c \
- e-local-folder.h \
- e-local-storage.c \
- e-local-storage.h \
e-setup.c \
e-setup.h \
e-shell-about-box.c \
@@ -204,7 +174,6 @@ evolution_SOURCES = \
e-shell-settings-dialog.h \
e-shell-startup-wizard.c \
e-shell-startup-wizard.h \
- e-shell-view.h \
e-shell-window-commands.c \
e-shell-window-commands.h \
e-shell-window.c \
@@ -219,8 +188,6 @@ evolution_SOURCES = \
e-task-bar.h \
e-task-widget.c \
e-task-widget.h \
- e-uri-schema-registry.c \
- e-uri-schema-registry.h \
main.c
evolution_LDADD = \
@@ -234,17 +201,17 @@ evolution_LDADD = \
# Test component
-evolution_test_component_SOURCES = \
- evolution-test-component.c
+# evolution_test_component_SOURCES = \
+# evolution-test-component.c
-evolution_test_component_LDADD = \
- libeshell.la \
- $(SHELL_LIBS)
+# evolution_test_component_LDADD = \
+# libeshell.la \
+# $(SHELL_LIBS)
-install-test-component: evolution-test-component
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) evolution-test-component $(DESTDIR)$(bindir)/evolution-test-component
- $(mkinstalldirs) $(DESTDIR)$(serverdir)
- $(INSTALL_DATA) $(srcdir)/GNOME_Evolution_TestComponent.server $(DESTDIR)$(serverdir)/GNOME_Evolution_TestComponent.server
+# install-test-component: evolution-test-component
+# $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) evolution-test-component $(DESTDIR)$(bindir)/evolution-test-component
+# $(mkinstalldirs) $(DESTDIR)$(serverdir)
+# $(INSTALL_DATA) $(srcdir)/GNOME_Evolution_TestComponent.server $(DESTDIR)$(serverdir)/GNOME_Evolution_TestComponent.server
# Misc stuff
diff --git a/shell/e-corba-shortcuts.c b/shell/e-corba-shortcuts.c
deleted file mode 100644
index 46bebb2249..0000000000
--- a/shell/e-corba-shortcuts.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-shortcuts.c
- *
- * 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>
- */
-
-/* FIXME: Doesn't throw exceptions properly. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-corba-shortcuts.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <gal/util/e-util.h>
-
-
-#define PARENT_TYPE bonobo_object_get_type ()
-static BonoboObjectClass *parent_class = NULL;
-
-struct _ECorbaShortcutsPrivate {
- EShortcuts *shortcuts;
-};
-
-
-/* Utility functions. */
-
-static const char *
-string_from_corba (CORBA_char *corba_string)
-{
- if (corba_string[0] == '\0')
- return NULL;
-
- return corba_string;
-}
-
-static void
-shortcut_list_to_corba (const GSList *shortcut_list,
- GNOME_Evolution_Shortcuts_ShortcutList *shortcut_list_return)
-{
- GNOME_Evolution_Shortcuts_Shortcut *buffer;
- const GSList *p;
- int num_shortcuts;
- int i;
-
- num_shortcuts = g_slist_length ((GSList *) shortcut_list); /* safe cast, GLib sucks */
-
- shortcut_list_return->_maximum = num_shortcuts;
- shortcut_list_return->_length = num_shortcuts;
-
- buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Shortcut_allocbuf (num_shortcuts);
- shortcut_list_return->_buffer = buffer;
-
- for (p = shortcut_list, i = 0; p != NULL; p = p->next, i++) {
- const EShortcutItem *item;
-
- item = (const EShortcutItem *) p->data;
-
- buffer[i].uri = CORBA_string_dup (e_safe_corba_string (item->uri));
- buffer[i].name = CORBA_string_dup (e_safe_corba_string (item->name));
- buffer[i].type = CORBA_string_dup (e_safe_corba_string (item->type));
- buffer[i].customIconName = CORBA_string_dup (e_safe_corba_string (item->custom_icon_name));
- }
-
- CORBA_sequence_set_release (shortcut_list_return, TRUE);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (object);
- priv = corba_shortcuts->priv;
-
- if (priv->shortcuts != NULL) {
- g_object_unref (priv->shortcuts);
- priv->shortcuts = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaShortcuts *corba_shortcuts;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (object);
-
- g_free (corba_shortcuts->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Evolution::Shortcuts CORBA methods. */
-
-static void
-impl_add (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short position,
- const GNOME_Evolution_Shortcuts_Shortcut *shortcut,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- e_shortcuts_add_shortcut (priv->shortcuts, group_num, position,
- string_from_corba (shortcut->uri),
- string_from_corba (shortcut->name),
- 0,
- string_from_corba (shortcut->type),
- string_from_corba (shortcut->customIconName));
-}
-
-static void
-impl_remove (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short item_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- e_shortcuts_remove_shortcut (priv->shortcuts, group_num, item_num);
-}
-
-static GNOME_Evolution_Shortcuts_Shortcut *
-impl_get (PortableServer_Servant servant,
- const CORBA_short group_num,
- const CORBA_short item_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GNOME_Evolution_Shortcuts_Shortcut *retval;
- const EShortcutItem *item;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- item = e_shortcuts_get_shortcut (priv->shortcuts, group_num, item_num);
- if (item == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_NotFound, NULL);
- return NULL;
- }
-
- retval = GNOME_Evolution_Shortcuts_Shortcut__alloc ();
- retval->uri = CORBA_string_dup (e_safe_corba_string (item->uri));
- retval->name = CORBA_string_dup (e_safe_corba_string (item->name));
- retval->type = CORBA_string_dup (e_safe_corba_string (item->type));
- retval->customIconName = CORBA_string_dup (e_safe_corba_string (item->custom_icon_name));
-
- return retval;
-}
-
-static void
-impl_addGroup (PortableServer_Servant servant,
- const CORBA_short position,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- if (position == 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_InvalidPosition, NULL);
- return;
- }
-
- e_shortcuts_add_group (priv->shortcuts, position, name);
-}
-
-static void
-impl_removeGroup (PortableServer_Servant servant,
- const CORBA_short group_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- if (group_num == 0) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_Shortcuts_CannotRemove, NULL);
- return;
- }
-
- e_shortcuts_remove_group (priv->shortcuts, group_num);
-}
-
-static GNOME_Evolution_Shortcuts_Group *
-impl_getGroup (PortableServer_Servant servant,
- const CORBA_short group_num,
- CORBA_Environment *ev)
-{
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GNOME_Evolution_Shortcuts_Group *group;
- const GSList *list;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- list = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, group_num);
-
- group = GNOME_Evolution_Shortcuts_Group__alloc ();
-
- group->name = CORBA_string_dup (e_shortcuts_get_group_title (priv->shortcuts, group_num));
-
- shortcut_list_to_corba (list, & group->shortcuts);
-
- return group;
-}
-
-static CORBA_sequence_GNOME_Evolution_Shortcuts_Group *
-impl__get_groups (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- GNOME_Evolution_Shortcuts_GroupList *list;
- ECorbaShortcuts *corba_shortcuts;
- ECorbaShortcutsPrivate *priv;
- GSList *group_titles;
- const GSList *p;
- int i;
-
- corba_shortcuts = E_CORBA_SHORTCUTS (bonobo_object_from_servant (servant));
- priv = corba_shortcuts->priv;
-
- list = GNOME_Evolution_Shortcuts_GroupList__alloc ();
- list->_length = e_shortcuts_get_num_groups (priv->shortcuts);
- list->_maximum = list->_length;
- list->_buffer = CORBA_sequence_GNOME_Evolution_Shortcuts_Group_allocbuf (list->_maximum);
-
- CORBA_sequence_set_release (list, TRUE);
-
- group_titles = e_shortcuts_get_group_titles (priv->shortcuts);
- for (p = group_titles, i = 0; p != NULL; p = p->next, i ++) {
- char *group_title;
- const GSList *shortcuts;
-
- group_title = (char *) p->data;
-
- shortcuts = e_shortcuts_get_shortcuts_in_group (priv->shortcuts, i);
-
- list->_buffer[i].name = CORBA_string_dup (group_title);
- shortcut_list_to_corba (shortcuts, &list->_buffer[i].shortcuts);
-
- g_free (group_title);
- }
-
- g_slist_free (group_titles);
-
- return list;
-}
-
-
-static void
-e_corba_shortcuts_class_init (GObjectClass *object_class)
-{
- ECorbaShortcutsClass *corba_shortcuts_class;
- POA_GNOME_Evolution_Shortcuts__epv *epv;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- corba_shortcuts_class = E_CORBA_SHORTCUTS_CLASS (object_class);
-
- epv = & corba_shortcuts_class->epv;
- epv->add = impl_add;
- epv->remove = impl_remove;
- epv->get = impl_get;
- epv->addGroup = impl_addGroup;
- epv->removeGroup = impl_removeGroup;
- epv->getGroup = impl_getGroup;
- epv->_get_groups = impl__get_groups;
-}
-
-static void
-e_corba_shortcuts_init (ECorbaShortcuts *corba_shortcuts)
-{
- ECorbaShortcutsPrivate *priv;
-
- priv = g_new (ECorbaShortcutsPrivate, 1);
- priv->shortcuts = NULL;
-
- corba_shortcuts->priv = priv;
-}
-
-
-ECorbaShortcuts *
-e_corba_shortcuts_new (EShortcuts *shortcuts)
-{
- ECorbaShortcuts *corba_shortcuts;
-
- g_return_val_if_fail (shortcuts != NULL, NULL);
- g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL);
-
- corba_shortcuts = g_object_new (e_corba_shortcuts_get_type (), NULL);
-
- g_object_ref (shortcuts);
- corba_shortcuts->priv->shortcuts = shortcuts;
-
- return corba_shortcuts;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (ECorbaShortcuts,
- GNOME_Evolution_Shortcuts,
- PARENT_TYPE,
- e_corba_shortcuts)
diff --git a/shell/e-corba-shortcuts.h b/shell/e-corba-shortcuts.h
deleted file mode 100644
index 8d6ff97adc..0000000000
--- a/shell/e-corba-shortcuts.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-shortcuts.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_CORBA_SHORTCUTS_H_
-#define _E_CORBA_SHORTCUTS_H_
-
-#include "e-shortcuts.h"
-
-#include <bonobo/bonobo-object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_SHORTCUTS (e_corba_shortcuts_get_type ())
-#define E_CORBA_SHORTCUTS(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcuts))
-#define E_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_SHORTCUTS, ECorbaShortcutsClass))
-#define E_IS_CORBA_SHORTCUTS(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
-#define E_IS_CORBA_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_SHORTCUTS))
-
-
-typedef struct _ECorbaShortcuts ECorbaShortcuts;
-typedef struct _ECorbaShortcutsPrivate ECorbaShortcutsPrivate;
-typedef struct _ECorbaShortcutsClass ECorbaShortcutsClass;
-
-struct _ECorbaShortcuts {
- BonoboObject parent;
-
- ECorbaShortcutsPrivate *priv;
-};
-
-struct _ECorbaShortcutsClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_Shortcuts__epv epv;
-};
-
-
-GtkType e_corba_shortcuts_get_type (void);
-ECorbaShortcuts *e_corba_shortcuts_new (EShortcuts *shortcuts);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_CORBA_SHORTCUTS_H_ */
diff --git a/shell/e-corba-storage-registry.c b/shell/e-corba-storage-registry.c
deleted file mode 100644
index c774d94326..0000000000
--- a/shell/e-corba-storage-registry.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage-registry.c
- *
- * Copyright (C) 2000 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-local-storage.h"
-#include "e-corba-storage.h"
-#include "e-corba-storage-registry.h"
-#include "e-shell-constants.h"
-
-#include "e-util/e-corba-utils.h"
-
-#include <bonobo/bonobo-exception.h>
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE BONOBO_OBJECT_TYPE
-static BonoboObjectClass *parent_class = NULL;
-
-struct _ECorbaStorageRegistryPrivate {
- EStorageSet *storage_set;
-
- GSList *listeners;
-};
-
-
-/* CORBA interface implementation. */
-
-static void
-listener_notify (Bonobo_Listener listener,
- GNOME_Evolution_StorageRegistry_MessageType type,
- const char *name)
-{
- CORBA_any any;
- GNOME_Evolution_StorageRegistry_NotifyResult nr;
- CORBA_Environment ev;
-
- nr.type = type;
- nr.name = CORBA_string_dup (name ? name : "");
-
- any._type = (CORBA_TypeCode) TC_GNOME_Evolution_StorageRegistry_NotifyResult;
- any._value = &nr;
-
- CORBA_exception_init (&ev);
- Bonobo_Listener_event (listener,
- "Evolution::StorageRegistry::NotifyResult",
- &any, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Could not send notify event for %s\n%s", name,
- CORBA_exception_id (&ev));
- }
-
- CORBA_exception_free (&ev);
- CORBA_free (nr.name);
-}
-
-static GNOME_Evolution_StorageListener
-impl_StorageRegistry_addStorage (PortableServer_Servant servant,
- const GNOME_Evolution_Storage storage_interface,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- EStorage *storage;
- GNOME_Evolution_StorageListener listener_interface;
- GSList *iter;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_corba_storage_new (storage_interface, name);
-
- if (! e_storage_set_add_storage (priv->storage_set, storage)) {
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_Exists,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- g_object_unref (storage);
-
-
- /* FIXME: if we remove a listener while looping through the list we can
- * crash. Yay CORBA reentrancy. */
- for (iter = priv->listeners; iter; iter = iter->next) {
- listener_notify (iter->data,
- GNOME_Evolution_StorageRegistry_STORAGE_CREATED,
- name);
- }
-
- listener_interface = CORBA_Object_duplicate (e_corba_storage_get_StorageListener
- (E_CORBA_STORAGE (storage)), ev);
-
- return listener_interface;
-}
-
-static GNOME_Evolution_StorageRegistry_StorageList *
-impl_StorageRegistry_getStorageList (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- GNOME_Evolution_StorageRegistry_StorageList *storage_list;
- GList *sl, *l;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- sl = e_storage_set_get_storage_list (priv->storage_set);
-
- storage_list = GNOME_Evolution_StorageRegistry_StorageList__alloc ();
- storage_list->_maximum = g_list_length (sl);
- storage_list->_length = 0;
- storage_list->_buffer = CORBA_sequence_GNOME_Evolution_Storage_allocbuf (storage_list->_maximum);
- for (l = sl; l != NULL; l = l->next) {
- EStorage *storage;
- GNOME_Evolution_Storage corba_storage;
- CORBA_Environment ev2;
-
- CORBA_exception_init (&ev2);
-
- storage = l->data;
- if (E_IS_LOCAL_STORAGE (storage)) {
- corba_storage = e_local_storage_get_corba_interface (E_LOCAL_STORAGE (storage));
- } else if (E_IS_CORBA_STORAGE (storage)) {
- corba_storage = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage));
- } else {
- continue;
- }
-
- corba_storage = CORBA_Object_duplicate (corba_storage, &ev2);
- if (BONOBO_EX (&ev2)) {
- CORBA_exception_free (&ev2);
- continue;
- }
- storage_list->_buffer[storage_list->_length] = corba_storage;
- storage_list->_length++;
- }
-
- CORBA_sequence_set_release (storage_list, TRUE);
-
- return storage_list;
-}
-
-static GNOME_Evolution_Storage
-impl_StorageRegistry_getStorageByName (PortableServer_Servant servant,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- GNOME_Evolution_Storage corba_storage;
- EStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_storage_set_get_storage (priv->storage_set, name);
- if (storage == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- corba_storage = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage));
-
- return bonobo_object_dup_ref (corba_storage, NULL);
-}
-
-static void
-impl_StorageRegistry_removeStorageByName (PortableServer_Servant servant,
- const CORBA_char *name,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- EStorage *storage;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- storage = e_storage_set_get_storage (priv->storage_set, name);
- if (storage == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return;
- }
-
- /* FIXME: Yucky to get the storage by name and then remove it. */
- /* FIXME: Check failure. */
- e_storage_set_remove_storage (priv->storage_set, storage);
-}
-
-static void
-storage_set_foreach (EStorageSet *set,
- Bonobo_Listener listener)
-{
- GList *storage_list, *p;
-
- storage_list = e_storage_set_get_storage_list (set);
- for (p = storage_list; p; p = p->next) {
- const char *name;
-
- name = e_storage_get_name (E_STORAGE (p->data));
-
- listener_notify (listener, GNOME_Evolution_StorageRegistry_STORAGE_CREATED, name);
- g_object_unref (p->data);
- }
-
- g_list_free (storage_list);
-}
-
-static GSList *
-find_listener (GSList *p,
- Bonobo_Listener listener)
-{
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
- for (; p; p = p->next) {
- if (CORBA_Object_is_equivalent (p->data, listener, &ev) == TRUE) {
- CORBA_exception_free (&ev);
- return p;
- }
- }
-
- CORBA_exception_free (&ev);
- return NULL;
-}
-
-static void
-impl_StorageRegistry_addListener (PortableServer_Servant servant,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- Bonobo_Listener listener_copy;
- CORBA_Environment ev2;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- if (find_listener (priv->listeners, listener) != NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_AlreadyListening,
- NULL);
- return;
- }
-
- CORBA_exception_init (&ev2);
- listener_copy = CORBA_Object_duplicate ((CORBA_Object) listener, &ev2);
- if (BONOBO_EX (&ev2)) {
- g_warning ("EvolutionStorageRegistry -- Cannot duplicate listener.");
- CORBA_exception_free (&ev2);
- return;
- }
-
- CORBA_exception_free (&ev2);
- priv->listeners = g_slist_prepend (priv->listeners, listener_copy);
- storage_set_foreach (priv->storage_set, listener_copy);
-}
-
-static void
-impl_StorageRegistry_removeListener (PortableServer_Servant servant,
- Bonobo_Listener listener,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- ECorbaStorageRegistryPrivate *priv;
- CORBA_Environment ev2;
- GSList *p;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- priv = storage_registry->priv;
-
- p = find_listener (priv->listeners, listener);
- if (p == NULL) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return;
- }
-
- CORBA_exception_init (&ev2);
- CORBA_Object_release ((CORBA_Object) p->data, &ev2);
- CORBA_exception_free (&ev2);
-
- priv->listeners = g_slist_remove_link (priv->listeners, p);
- g_slist_free (p);
-}
-
-static GNOME_Evolution_Folder *
-impl_StorageRegistry_getFolderByUri (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- BonoboObject *bonobo_object;
- ECorbaStorageRegistry *storage_registry;
- GNOME_Evolution_Folder *corba_folder;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
- CORBA_char *corba_evolution_uri;
-
- bonobo_object = bonobo_object_from_servant (servant);
- storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object);
- storage_set = storage_registry->priv->storage_set;
-
- if (!strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN)) {
- corba_evolution_uri = CORBA_string_dup (uri);
- path = (char *)uri + E_SHELL_URI_PREFIX_LEN;
- folder = e_storage_set_get_folder (storage_set, path);
- } else {
- path = e_storage_set_get_path_for_physical_uri (storage_set, uri);
- if (path) {
- corba_evolution_uri = CORBA_string_alloc (strlen (path) + E_SHELL_URI_PREFIX_LEN + 1);
- strcpy (corba_evolution_uri, E_SHELL_URI_PREFIX);
- strcat (corba_evolution_uri, path);
- folder = e_storage_set_get_folder (storage_set, path);
- g_free (path);
- } else {
- corba_evolution_uri = NULL;
- folder = NULL;
- }
- }
-
- if (!folder) {
- CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageRegistry_NotFound,
- NULL);
- return CORBA_OBJECT_NIL;
- }
-
- corba_folder = GNOME_Evolution_Folder__alloc ();
-
- corba_folder->displayName = CORBA_string_dup (e_folder_get_name (folder));
-
- corba_folder->description = CORBA_string_dup (e_safe_corba_string (e_folder_get_description (folder)));
- corba_folder->type = CORBA_string_dup (e_folder_get_type_string (folder));
- corba_folder->physicalUri = CORBA_string_dup (e_safe_corba_string (e_folder_get_physical_uri (folder)));
- corba_folder->customIconName = CORBA_string_dup (e_safe_corba_string (e_folder_get_custom_icon_name (folder)));
- corba_folder->evolutionUri = corba_evolution_uri;
- corba_folder->unreadCount = e_folder_get_unread_count (folder);
- corba_folder->sortingPriority = e_folder_get_sorting_priority (folder);
-
- return corba_folder;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ECorbaStorageRegistry *corba_storage_registry;
- ECorbaStorageRegistryPrivate *priv;
-
- corba_storage_registry = E_CORBA_STORAGE_REGISTRY (object);
- priv = corba_storage_registry->priv;
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaStorageRegistry *corba_storage_registry;
- ECorbaStorageRegistryPrivate *priv;
-
- corba_storage_registry = E_CORBA_STORAGE_REGISTRY (object);
- priv = corba_storage_registry->priv;
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-e_corba_storage_registry_class_init (ECorbaStorageRegistryClass *klass)
-{
- GObjectClass *object_class;
- POA_GNOME_Evolution_StorageRegistry__epv *epv;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- epv = & klass->epv;
- epv->addStorage = impl_StorageRegistry_addStorage;
- epv->getStorageList = impl_StorageRegistry_getStorageList;
- epv->getStorageByName = impl_StorageRegistry_getStorageByName;
- epv->removeStorageByName = impl_StorageRegistry_removeStorageByName;
- epv->addListener = impl_StorageRegistry_addListener;
- epv->removeListener = impl_StorageRegistry_removeListener;
- epv->getFolderByUri = impl_StorageRegistry_getFolderByUri;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-e_corba_storage_registry_init (ECorbaStorageRegistry *corba_storage_registry)
-{
- ECorbaStorageRegistryPrivate *priv;
-
- priv = g_new (ECorbaStorageRegistryPrivate, 1);
- priv->storage_set = NULL;
- priv->listeners = NULL;
-
- corba_storage_registry->priv = priv;
-}
-
-
-void
-e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
- EStorageSet *storage_set)
-{
- ECorbaStorageRegistryPrivate *priv;
-
- g_return_if_fail (E_IS_CORBA_STORAGE_REGISTRY (corba_storage_registry));
-
- priv = corba_storage_registry->priv;
-
- g_object_ref (storage_set);
- priv->storage_set = storage_set;
-}
-
-ECorbaStorageRegistry *
-e_corba_storage_registry_new (EStorageSet *storage_set)
-{
- ECorbaStorageRegistry *corba_storage_registry;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- corba_storage_registry = g_object_new (e_corba_storage_registry_get_type (), NULL);
-
- e_corba_storage_registry_construct (corba_storage_registry, storage_set);
-
- return corba_storage_registry;
-}
-
-
-BONOBO_TYPE_FUNC_FULL (ECorbaStorageRegistry,
- GNOME_Evolution_StorageRegistry,
- PARENT_TYPE,
- e_corba_storage_registry)
diff --git a/shell/e-corba-storage-registry.h b/shell/e-corba-storage-registry.h
deleted file mode 100644
index f75db6dd90..0000000000
--- a/shell/e-corba-storage-registry.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage-registry.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef __E_CORBA_STORAGE_REGISTRY_H__
-#define __E_CORBA_STORAGE_REGISTRY_H__
-
-#include <bonobo/bonobo-object.h>
-
-#include "Evolution.h"
-#include "e-storage-set.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_STORAGE_REGISTRY (e_corba_storage_registry_get_type ())
-#define E_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistry))
-#define E_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistryClass))
-#define E_IS_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY))
-#define E_IS_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY))
-
-
-typedef struct _ECorbaStorageRegistry ECorbaStorageRegistry;
-typedef struct _ECorbaStorageRegistryPrivate ECorbaStorageRegistryPrivate;
-typedef struct _ECorbaStorageRegistryClass ECorbaStorageRegistryClass;
-
-struct _ECorbaStorageRegistry {
- BonoboObject parent;
-
- ECorbaStorageRegistryPrivate *priv;
-};
-
-struct _ECorbaStorageRegistryClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_StorageRegistry__epv epv;
-};
-
-
-GtkType e_corba_storage_registry_get_type (void);
-void e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
- EStorageSet *storage_set);
-ECorbaStorageRegistry *e_corba_storage_registry_new (EStorageSet *storage_set);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_CORBA_STORAGE_REGISTRY_H__ */
diff --git a/shell/e-corba-storage.c b/shell/e-corba-storage.c
deleted file mode 100644
index 185b4093a9..0000000000
--- a/shell/e-corba-storage.c
+++ /dev/null
@@ -1,1072 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage.c
- *
- * Copyright (C) 2000, 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-corba-storage.h"
-
-#include "e-shell-constants.h"
-
-#include "Evolution.h"
-
-#include <glib.h>
-#include <gal/util/e-util.h>
-
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-listener.h>
-
-#include <gdk/gdkx.h>
-#include <gtk/gtkmain.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE E_TYPE_STORAGE
-static EStorageClass *parent_class = NULL;
-
-typedef struct _StorageListenerServant StorageListenerServant;
-
-struct _ECorbaStoragePrivate {
- GNOME_Evolution_Storage storage_interface;
-
- /* The Evolution::StorageListener interface we expose. */
- GNOME_Evolution_StorageListener storage_listener_interface;
- StorageListenerServant *storage_listener_servant;
-
- GList *pending_opens;
-};
-
-
-/* Implementation of the CORBA Evolution::StorageListener interface. */
-
-static POA_GNOME_Evolution_StorageListener__vepv storage_listener_vepv;
-
-struct _StorageListenerServant {
- POA_GNOME_Evolution_StorageListener servant;
- EStorage *storage;
-};
-
-static StorageListenerServant *
-storage_listener_servant_new (ECorbaStorage *corba_storage)
-{
- StorageListenerServant *servant;
-
- servant = g_new0 (StorageListenerServant, 1);
-
- servant->servant.vepv = &storage_listener_vepv;
-
- servant->storage = E_STORAGE (corba_storage);
-
- return servant;
-}
-
-static void
-storage_listener_servant_free (StorageListenerServant *servant)
-{
- g_free (servant);
-}
-
-#if 0
-static void
-impl_StorageListener_destroy (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- /* FIXME */
-}
-#endif
-
-static void
-impl_StorageListener_notifyFolderCreated (PortableServer_Servant servant,
- const CORBA_char *path,
- const GNOME_Evolution_Folder *folder,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
- EFolder *e_folder;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- e_folder = e_folder_new (folder->displayName, folder->type, folder->description);
-
- e_folder_set_physical_uri (e_folder, folder->physicalUri);
- e_folder_set_unread_count (e_folder, folder->unreadCount);
- e_folder_set_can_sync_offline (e_folder, folder->canSyncOffline);
- e_folder_set_sorting_priority (e_folder, folder->sortingPriority);
-
- if (folder->customIconName[0] != '\0')
- e_folder_set_custom_icon (e_folder, folder->customIconName);
-
- if (! e_storage_new_folder (storage, path, e_folder)) {
- g_warning ("Cannot register folder -- %s %s\n", path, folder->displayName);
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_Exists,
- NULL);
- g_object_unref (e_folder);
- return;
- }
-}
-
-static void
-impl_StorageListener_notifyFolderUpdated (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_long unread_count,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
- EFolder *e_folder;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- e_folder = e_storage_get_folder (storage, path);
- if (e_folder == NULL) {
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_NotFound,
- NULL);
- return;
- }
-
- e_folder_set_unread_count (e_folder, unread_count);
-}
-
-static void
-impl_StorageListener_notifyFolderRemoved (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- if (! e_storage_removed_folder (storage, path))
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_NotFound,
- NULL);
-}
-
-static void
-impl_StorageListener_notifyHasSubfolders (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- StorageListenerServant *storage_listener_servant;
- EStorage *storage;
-
- storage_listener_servant = (StorageListenerServant *) servant;
- storage = storage_listener_servant->storage;
-
- if (! e_storage_declare_has_subfolders (storage, path, message)) {
- g_warning ("Cannot register subfolder tree -- %s\n", path);
- CORBA_exception_set (ev,
- CORBA_USER_EXCEPTION,
- ex_GNOME_Evolution_StorageListener_Exists,
- NULL);
- }
-}
-
-
-static gboolean
-setup_storage_listener (ECorbaStorage *corba_storage)
-{
- StorageListenerServant *servant;
- ECorbaStoragePrivate *priv;
- GNOME_Evolution_StorageListener storage_listener_interface;
- CORBA_Environment ev;
-
- priv = corba_storage->priv;
-
- servant = storage_listener_servant_new (corba_storage);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_StorageListener__init (servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- storage_listener_interface = PortableServer_POA_servant_to_reference (bonobo_poa (),
- servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- goto error;
-
- priv->storage_listener_interface = storage_listener_interface;
- priv->storage_listener_servant = servant;
-
- return TRUE;
-
- error:
- storage_listener_servant_free (servant);
- CORBA_exception_free (&ev);
- return FALSE;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- CORBA_Environment ev;
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
-
- corba_storage = E_CORBA_STORAGE (object);
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->storage_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->storage_interface, &ev);
- CORBA_Object_release (priv->storage_interface, &ev);
- priv->storage_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->storage_listener_interface != CORBA_OBJECT_NIL) {
- CORBA_Object_release (priv->storage_listener_interface, &ev);
- priv->storage_listener_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->storage_listener_servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa (), priv->storage_listener_servant,
- &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
-
- CORBA_free (object_id);
-
- storage_listener_servant_free (priv->storage_listener_servant);
- priv->storage_listener_servant = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- if (priv->pending_opens != NULL) {
- g_warning ("destroying ECorbaStorage with pending async ops");
- priv->pending_opens = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ECorbaStorage *corba_storage;
-
- corba_storage = E_CORBA_STORAGE (object);
-
- g_free (corba_storage->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EStorage methods. */
-
-static void
-get_folder_cb (EStorage *storage, EStorageResult result,
- const char *path, gpointer data)
-{
- gboolean *done = data;
-
- *done = TRUE;
-}
-
-static EFolder *
-get_folder (EStorage *storage, const char *path)
-{
- EFolder *folder;
- char *path_dup, *p;
-
- folder = (* E_STORAGE_CLASS (parent_class)->get_folder) (storage, path);
- if (folder)
- return folder;
-
- /* If @path points to a part of the storage that hasn't been
- * opened yet, do that.
- */
- path_dup = g_strdup (path);
- p = strchr (path_dup + 1, '/');
- while (p) {
- *p = '\0';
- if (e_storage_get_has_subfolders (storage, path_dup)) {
- gboolean done = FALSE;
-
- e_storage_async_open_folder (storage, path_dup,
- get_folder_cb, &done);
- while (!done)
- gtk_main_iteration ();
- }
- *p = '/';
- p = strchr (p + 1, '/');
- }
-
- return (* E_STORAGE_CLASS (parent_class)->get_folder) (storage, path);
-}
-
-struct async_folder_closure {
- EStorageResultCallback callback;
- EStorage *storage;
- void *data;
-};
-
-static void
-async_folder_cb (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_folder_closure *closure = user_data;
- GNOME_Evolution_Storage_Result *corba_result;
- EStorageResult result;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (*corba_result);
-
- (* closure->callback) (closure->storage, result, closure->data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
-
- g_object_unref (closure->storage);
- g_free (closure);
-}
-
-
-struct async_create_open_closure {
- EStorage *storage;
- char *path, *type, *description;
- EStorageResultCallback callback;
- void *data;
-};
-
-static void
-async_create_open_cb (EStorage *storage, EStorageResult result,
- const char *path, void *data)
-{
- struct async_create_open_closure *closure = data;
-
- if (result != E_STORAGE_OK) {
- (* closure->callback) (closure->storage, result,
- closure->data);
- } else {
- e_storage_async_create_folder (closure->storage,
- closure->path, closure->type,
- closure->description,
- closure->callback,
- closure->data);
- }
-
- g_object_unref (closure->storage);
- g_free (closure->path);
- g_free (closure->type);
- g_free (closure->description);
- g_free (closure);
-}
-
-static void
-async_create_folder (EStorage *storage, const char *path,
- const char *type, const char *description,
- EStorageResultCallback callback, void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- const char *parent_uri;
- char *p;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- p = strrchr (path, '/');
- if (p && p != path) {
- EFolder *parent;
- char *parent_path;
-
- parent_path = g_strndup (path, p - path);
- parent = e_storage_get_folder (storage, parent_path);
- parent_uri = e_folder_get_physical_uri (parent);
-
- if (e_folder_get_has_subfolders (parent)) {
- struct async_create_open_closure *open_closure;
-
- /* Force the parent folder to resolve its
- * children before creating the new folder.
- */
- open_closure = g_new (struct async_create_open_closure, 1);
- open_closure->storage = storage;
- g_object_ref (storage);
- open_closure->path = g_strdup (path);
- open_closure->type = g_strdup (type);
- open_closure->description = g_strdup (description);
- open_closure->callback = callback;
- open_closure->data = data;
- e_storage_async_open_folder (storage, parent_path,
- async_create_open_cb,
- open_closure);
- return;
- }
- } else
- parent_uri = "";
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncCreateFolder (priv->storage_interface,
- path, type, description,
- parent_uri,
- corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- EFolder *folder;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- folder = e_storage_get_folder (storage, path);
- if (e_folder_get_is_stock (folder)) {
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, data);
- return;
- }
- if (e_folder_get_physical_uri (folder) == NULL) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- return;
- }
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncRemoveFolder (priv->storage_interface,
- path,
- e_folder_get_physical_uri (folder),
- corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- EFolder *folder;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- folder = e_storage_get_folder (storage, source_path);
- if (e_folder_get_is_stock (folder) && remove_source)
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, data);
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncXferFolder (priv->storage_interface,
- source_path, destination_path,
- remove_source, corba_listener, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-struct async_open_closure {
- EStorageDiscoveryCallback callback;
- EStorage *storage;
- void *data;
- char *path;
-};
-
-static void
-async_open_cb (BonoboListener *listener, const char *event_name,
- const CORBA_any *any, CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_open_closure *orig_closure = user_data, *closure;
- GNOME_Evolution_Storage_Result *corba_result;
- ECorbaStoragePrivate *priv;
- EStorageResult result;
- GList *p;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (*corba_result);
- bonobo_object_unref (BONOBO_OBJECT (listener));
-
- priv = E_CORBA_STORAGE (orig_closure->storage)->priv;
- p = priv->pending_opens;
- while (p) {
- closure = p->data;
- if (!strcmp (closure->path, orig_closure->path)) {
- (* closure->callback) (closure->storage, result,
- closure->path, closure->data);
- if (closure != orig_closure) {
- g_object_unref (orig_closure->storage);
- g_free (closure->path);
- g_free (closure);
- }
- priv->pending_opens = g_list_remove (priv->pending_opens, p->data);
- p = priv->pending_opens;
- } else
- p = p->next;
- }
-
- g_object_unref (orig_closure->storage);
- g_free (orig_closure->path);
- g_free (orig_closure);
-}
-
-static gboolean
-async_open_folder_idle (gpointer data)
-{
- struct async_open_closure *closure = data, *old_closure;
- EStorage *storage = closure->storage;
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- GList *p;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- for (p = priv->pending_opens; p; p = p->next) {
- old_closure = p->data;
- if (!strcmp (closure->path, old_closure->path)) {
- priv->pending_opens = g_list_prepend (priv->pending_opens, closure);
- return FALSE;
- }
- }
-
- listener = bonobo_listener_new (async_open_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- priv->pending_opens = g_list_prepend (priv->pending_opens, closure);
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncOpenFolder (priv->storage_interface,
- closure->path,
- corba_listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* closure->callback) (storage, E_STORAGE_GENERICERROR,
- closure->path, closure->data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (closure->storage);
- g_free (closure->path);
- g_free (closure);
-
- priv->pending_opens = g_list_delete_link (priv->pending_opens,
- priv->pending_opens);
- }
- CORBA_exception_free (&ev);
-
- return FALSE;
-}
-
-static void
-async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- struct async_open_closure *closure;
-
- closure = g_new (struct async_open_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- closure->path = g_strdup (path);
-
- g_idle_add (async_open_folder_idle, closure);
-}
-
-
-/* Shared folders. */
-
-static gboolean
-supports_shared_folders (EStorage *storage)
-{
- GNOME_Evolution_Storage storage_iface;
- CORBA_boolean has_shared_folders;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- storage_iface = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage));
- g_assert (storage_iface != CORBA_OBJECT_NIL);
-
- has_shared_folders = GNOME_Evolution_Storage__get_hasSharedFolders (storage_iface, &ev);
- if (BONOBO_EX (&ev))
- has_shared_folders = FALSE;
-
- CORBA_exception_free (&ev);
-
- return has_shared_folders;
-}
-
-static void
-async_folder_discovery_cb (BonoboListener *listener,
- const char *event_name,
- const CORBA_any *any,
- CORBA_Environment *ev,
- gpointer user_data)
-{
- struct async_folder_closure *closure = user_data;
- GNOME_Evolution_Storage_FolderResult *corba_result;
- EStorageDiscoveryCallback callback;
- EStorageResult result;
- char *path;
-
- corba_result = any->_value;
- result = e_corba_storage_corba_result_to_storage_result (corba_result->result);
- if (result == E_STORAGE_OK)
- path = corba_result->path;
- else
- path = NULL;
-
- callback = (EStorageDiscoveryCallback)closure->callback;
- (* callback) (closure->storage, result, path, closure->data);
-
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (closure->storage);
- g_free (closure);
-}
-
-static void
-async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = (EStorageResultCallback)callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_discovery_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncDiscoverSharedFolder (priv->storage_interface,
- owner, folder_name,
- corba_listener, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, NULL, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-static void
-cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- CORBA_Environment ev;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_cancelDiscoverSharedFolder (priv->storage_interface,
- owner, folder_name, &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Error invoking cancelDiscoverSharedFolder -- %s", BONOBO_EX_REPOID (&ev));
- CORBA_exception_free (&ev);
-}
-
-static void
-async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
- BonoboListener *listener;
- Bonobo_Listener corba_listener;
- CORBA_Environment ev;
- struct async_folder_closure *closure;
-
- corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
-
- closure = g_new (struct async_folder_closure, 1);
- closure->callback = callback;
- closure->storage = storage;
- g_object_ref (storage);
- closure->data = data;
- listener = bonobo_listener_new (async_folder_cb, closure);
- corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener));
-
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncRemoveSharedFolder (priv->storage_interface,
- path, corba_listener,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- (* callback) (storage, E_STORAGE_GENERICERROR, data);
- bonobo_object_unref (BONOBO_OBJECT (listener));
- g_object_unref (storage);
- g_free (closure);
- }
- CORBA_exception_free (&ev);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageListener__vepv *vepv;
- POA_GNOME_Evolution_StorageListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageListener__epv, 1);
- epv->notifyFolderCreated = impl_StorageListener_notifyFolderCreated;
- epv->notifyFolderUpdated = impl_StorageListener_notifyFolderUpdated;
- epv->notifyFolderRemoved = impl_StorageListener_notifyFolderRemoved;
- epv->notifyHasSubfolders = impl_StorageListener_notifyHasSubfolders;
-
- vepv = &storage_listener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageListener_epv = epv;
-}
-
-static void
-class_init (ECorbaStorageClass *klass)
-{
- GObjectClass *object_class;
- EStorageClass *storage_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- storage_class = E_STORAGE_CLASS (klass);
- storage_class->get_folder = get_folder;
- storage_class->async_create_folder = async_create_folder;
- storage_class->async_remove_folder = async_remove_folder;
- storage_class->async_xfer_folder = async_xfer_folder;
- storage_class->async_open_folder = async_open_folder;
- storage_class->supports_shared_folders = supports_shared_folders;
- storage_class->async_discover_shared_folder = async_discover_shared_folder;
- storage_class->cancel_discover_shared_folder = cancel_discover_shared_folder;
- storage_class->async_remove_shared_folder = async_remove_shared_folder;
-
- corba_class_init ();
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-init (ECorbaStorage *corba_storage)
-{
- ECorbaStoragePrivate *priv;
-
- priv = g_new (ECorbaStoragePrivate, 1);
- priv->storage_interface = CORBA_OBJECT_NIL;
- priv->pending_opens = NULL;
-
- corba_storage->priv = priv;
-}
-
-
-/* FIXME: OK to have a boolean construct function? */
-void
-e_corba_storage_construct (ECorbaStorage *corba_storage,
- const GNOME_Evolution_Storage storage_interface,
- const char *name)
-{
- ECorbaStoragePrivate *priv;
- CORBA_Environment ev;
- EFolder *root_folder;
-
- g_return_if_fail (corba_storage != NULL);
- g_return_if_fail (E_IS_CORBA_STORAGE (corba_storage));
- g_return_if_fail (storage_interface != CORBA_OBJECT_NIL);
- g_return_if_fail (name != NULL);
-
- /* FIXME: Need separate name and display name. */
- root_folder = e_folder_new (name, "noselect", "");
- e_storage_construct (E_STORAGE (corba_storage), name, root_folder);
-
- priv = corba_storage->priv;
-
- CORBA_exception_init (&ev);
-
- Bonobo_Unknown_ref (storage_interface, &ev);
- if (ev._major != CORBA_NO_EXCEPTION)
- g_warning ("e_corba_storage_construct() -- Cannot reference Bonobo object");
- else
- priv->storage_interface = CORBA_Object_duplicate (storage_interface, &ev);
-
- CORBA_exception_free (&ev);
-
- setup_storage_listener (corba_storage);
-}
-
-EStorage *
-e_corba_storage_new (const GNOME_Evolution_Storage storage_interface,
- const char *name)
-{
- EStorage *new;
-
- g_return_val_if_fail (storage_interface != CORBA_OBJECT_NIL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- new = g_object_new (e_corba_storage_get_type (), NULL);
-
- e_corba_storage_construct (E_CORBA_STORAGE (new),
- storage_interface, name);
-
- return new;
-}
-
-
-const GNOME_Evolution_StorageListener
-e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage)
-{
- g_return_val_if_fail (corba_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), NULL);
-
- return corba_storage->priv->storage_listener_interface;
-}
-
-GNOME_Evolution_Storage
-e_corba_storage_get_corba_objref (ECorbaStorage *corba_storage)
-{
- g_return_val_if_fail (corba_storage != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), CORBA_OBJECT_NIL);
-
- return corba_storage->priv->storage_interface;
-}
-
-
-GSList *
-e_corba_storage_get_folder_property_items (ECorbaStorage *corba_storage)
-{
- GNOME_Evolution_Storage_FolderPropertyItemList *corba_items;
- CORBA_Environment ev;
- GSList *list;
- int i;
-
- g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), NULL);
-
- CORBA_exception_init (&ev);
-
- corba_items = GNOME_Evolution_Storage__get_folderPropertyItems (corba_storage->priv->storage_interface,
- &ev);
-
- if (BONOBO_EX (&ev)) {
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- list = NULL;
- for (i = 0; i < corba_items->_length; i ++) {
- ECorbaStoragePropertyItem *item;
-
- item = g_new (ECorbaStoragePropertyItem, 1);
- item->label = g_strdup (corba_items->_buffer[i].label);
- item->tooltip = g_strdup (corba_items->_buffer[i].tooltip);
- item->icon = NULL; /* We don't care for now -- FIXME */
-
- list = g_slist_prepend (list, item);
- }
- list = g_slist_reverse (list);
-
- CORBA_free (corba_items);
- CORBA_exception_free (&ev);
-
- return list;
-}
-
-void
-e_corba_storage_free_property_items_list (GSList *list)
-{
- GSList *p;
-
- for (p = list; p != NULL; p = p->next) {
- ECorbaStoragePropertyItem *item;
-
- item = (ECorbaStoragePropertyItem *) p->data;
-
- if (item->icon != NULL)
- g_object_unref (item->icon);
- g_free (item->label);
- g_free (item->tooltip);
- g_free (item);
- }
-
- g_slist_free (list);
-}
-
-void
-e_corba_storage_show_folder_properties (ECorbaStorage *corba_storage,
- const char *path,
- int property_item_id,
- GdkWindow *parent_window)
-{
- CORBA_Environment ev;
-
- g_return_if_fail (E_IS_CORBA_STORAGE (corba_storage));
- g_return_if_fail (path != NULL && path[0] == E_PATH_SEPARATOR);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_Storage_showFolderProperties (corba_storage->priv->storage_interface,
- path, property_item_id,
- GDK_WINDOW_XWINDOW (parent_window),
- &ev);
- if (BONOBO_EX (&ev))
- g_warning ("Error in Storage::showFolderProperties -- %s", BONOBO_EX_REPOID (&ev));
-
- CORBA_exception_free (&ev);
-}
-
-EStorageResult
-e_corba_storage_corba_result_to_storage_result (GNOME_Evolution_Storage_Result corba_result)
-{
- switch (corba_result) {
- case GNOME_Evolution_Storage_OK:
- return E_STORAGE_OK;
- case GNOME_Evolution_Storage_UNSUPPORTED_OPERATION:
- return E_STORAGE_UNSUPPORTEDOPERATION;
- case GNOME_Evolution_Storage_UNSUPPORTED_TYPE:
- return E_STORAGE_UNSUPPORTEDTYPE;
- case GNOME_Evolution_Storage_INVALID_URI:
- return E_STORAGE_INVALIDNAME;
- case GNOME_Evolution_Storage_ALREADY_EXISTS:
- return E_STORAGE_EXISTS;
- case GNOME_Evolution_Storage_DOES_NOT_EXIST:
- return E_STORAGE_NOTFOUND;
- case GNOME_Evolution_Storage_PERMISSION_DENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case GNOME_Evolution_Storage_NO_SPACE:
- return E_STORAGE_NOSPACE;
- case GNOME_Evolution_Storage_NOT_EMPTY:
- return E_STORAGE_NOTEMPTY;
- case GNOME_Evolution_Storage_NOT_ONLINE:
- return E_STORAGE_NOTONLINE;
- case GNOME_Evolution_Storage_GENERIC_ERROR:
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-E_MAKE_TYPE (e_corba_storage, "ECorbaStorage", ECorbaStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-corba-storage.h b/shell/e-corba-storage.h
deleted file mode 100644
index da62ab628b..0000000000
--- a/shell/e-corba-storage.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-corba-storage.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef __E_CORBA_STORAGE_H__
-#define __E_CORBA_STORAGE_H__
-
-#include "e-storage.h"
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_CORBA_STORAGE (e_corba_storage_get_type ())
-#define E_CORBA_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE, ECorbaStorage))
-#define E_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE, ECorbaStorageClass))
-#define E_IS_CORBA_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE))
-#define E_IS_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE))
-
-
-typedef struct _ECorbaStorage ECorbaStorage;
-typedef struct _ECorbaStoragePrivate ECorbaStoragePrivate;
-typedef struct _ECorbaStorageClass ECorbaStorageClass;
-
-struct _ECorbaStorage {
- EStorage parent;
-
- ECorbaStoragePrivate *priv;
-};
-
-struct _ECorbaStorageClass {
- EStorageClass parent_class;
-};
-
-
-struct _ECorbaStoragePropertyItem {
- char *label;
- char *tooltip;
- GdkPixbuf *icon;
-};
-typedef struct _ECorbaStoragePropertyItem ECorbaStoragePropertyItem;
-
-
-GtkType e_corba_storage_get_type (void);
-void e_corba_storage_construct (ECorbaStorage *corba_storage,
- const GNOME_Evolution_Storage storage_interface,
- const char *name);
-EStorage *e_corba_storage_new (const GNOME_Evolution_Storage storage_interface,
- const char *name);
-
-GNOME_Evolution_Storage e_corba_storage_get_corba_objref (ECorbaStorage *corba_storage);
-
-const GNOME_Evolution_StorageListener e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage);
-
-GSList *e_corba_storage_get_folder_property_items (ECorbaStorage *corba_storage);
-void e_corba_storage_free_property_items_list (GSList *list);
-
-void e_corba_storage_show_folder_properties (ECorbaStorage *corba_storage,
- const char *path,
- int property_item_id,
- GdkWindow *parent_window);
-EStorageResult e_corba_storage_corba_result_to_storage_result (GNOME_Evolution_Storage_Result corba_result);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_CORBA_STORAGE_H__ */
diff --git a/shell/e-folder-dnd-bridge.c b/shell/e-folder-dnd-bridge.c
deleted file mode 100644
index c72322f476..0000000000
--- a/shell/e-folder-dnd-bridge.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-dnd-bridge.c - Utility functions for handling dnd to Evolution
- * folders using the ShellComponentDnd interface.
- *
- * Copyright (C) 2002 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>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-folder-dnd-bridge.h"
-
-#include "Evolution.h"
-#include "e-storage-set-view.h"
-#include "e-shell-constants.h"
-
-#include "e-util/e-dialog-utils.h"
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <string.h>
-
-
-/* Callbacks for folder operations. */
-
-static void
-folder_xfer_callback (EStorageSet *storage_set,
- EStorageResult result,
- void *data)
-{
- GtkWindow *parent;
-
- if (result == E_STORAGE_OK)
- return;
-
- parent = GTK_WINDOW (data);
- e_notice (parent, GTK_MESSAGE_ERROR, _("Cannot transfer folder:\n%s"),
- e_storage_result_to_string (result));
-}
-
-
-/* Utility functions. */
-
-static GNOME_Evolution_ShellComponentDnd_ActionSet
-convert_gdk_drag_action_set_to_corba (GdkDragAction action)
-{
- GNOME_Evolution_ShellComponentDnd_Action retval;
-
- retval = GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT;
-
- if (action & GDK_ACTION_COPY)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_COPY;
- if (action & GDK_ACTION_MOVE)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_MOVE;
- if (action & GDK_ACTION_LINK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_LINK;
- if (action & GDK_ACTION_ASK)
- retval |= GNOME_Evolution_ShellComponentDnd_ACTION_ASK;
-
- return retval;
-}
-
-static GNOME_Evolution_ShellComponentDnd_ActionSet
-convert_gdk_drag_action_to_corba (GdkDragAction action)
-{
- if (action == GDK_ACTION_COPY)
- return GNOME_Evolution_ShellComponentDnd_ACTION_COPY;
- else if (action == GDK_ACTION_MOVE)
- return GNOME_Evolution_ShellComponentDnd_ACTION_MOVE;
- else if (action == GDK_ACTION_LINK)
- return GNOME_Evolution_ShellComponentDnd_ACTION_LINK;
- else if (action == GDK_ACTION_ASK)
- return GNOME_Evolution_ShellComponentDnd_ACTION_ASK;
- else {
- g_warning ("Unknown GdkDragAction %d", action);
- return GNOME_Evolution_ShellComponentDnd_ACTION_DEFAULT;
- }
-}
-
-static GdkDragAction
-convert_corba_drag_action_to_gdk (GNOME_Evolution_ShellComponentDnd_ActionSet action)
-{
- if (action == GNOME_Evolution_ShellComponentDnd_ACTION_COPY)
- return GDK_ACTION_COPY;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_MOVE)
- return GDK_ACTION_MOVE;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_LINK)
- return GDK_ACTION_LINK;
- else if (action == GNOME_Evolution_ShellComponentDnd_ACTION_ASK)
- return GDK_ACTION_ASK;
- else {
- g_warning ("unknown GNOME_Evolution_ShellComponentDnd_ActionSet %d", action);
- return GDK_ACTION_DEFAULT;
- }
-}
-
-static EvolutionShellComponentClient *
-get_component_at_path (EStorageSet *storage_set,
- const char *path)
-{
- EvolutionShellComponentClient *component_client;
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return NULL;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
- g_assert (folder_type_registry != NULL);
-
- component_client = e_folder_type_registry_get_handler_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
-
- return component_client;
-}
-
-/* This will look for the targets in @drag_context, choose one that matches
- with the allowed types at @path, and return its name. The EVOLUTION_PATH
- type always matches. */
-static const char *
-find_matching_target_for_drag_context (EStorageSet *storage_set,
- const char *path,
- GdkDragContext *drag_context,
- GdkAtom *atom_return)
-{
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
- GList *accepted_types;
- GList *p, *q;
-
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return E_FOLDER_DND_PATH_TARGET_TYPE;
-
- accepted_types = e_folder_type_registry_get_accepted_dnd_types_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
-
- for (p = drag_context->targets; p != NULL; p = p->next) {
- char *possible_type;
-
- possible_type = gdk_atom_name (p->data);
- if (strcmp (possible_type, E_FOLDER_DND_PATH_TARGET_TYPE) == 0) {
- g_free (possible_type);
-
- if (atom_return != NULL)
- *atom_return = p->data;
-
- return E_FOLDER_DND_PATH_TARGET_TYPE;
- }
-
- for (q = accepted_types; q != NULL; q = q->next) {
- const char *accepted_type;
-
- accepted_type = (const char *) q->data;
- if (strcmp (possible_type, accepted_type) == 0) {
- g_free (possible_type);
-
- if (atom_return != NULL)
- *atom_return = p->data;
-
- return accepted_type;
- }
- }
-
- g_free (possible_type);
- }
-
- if (atom_return != NULL)
- *atom_return = 0;
-
- return NULL;
-}
-
-static gboolean
-handle_evolution_path_drag_motion (EStorageSet *storage_set,
- const char *path,
- GdkDragContext *context,
- unsigned int time)
-{
- GdkModifierType modifiers;
- GdkDragAction action;
-
- gdk_window_get_pointer (NULL, NULL, NULL, &modifiers);
-
- if ((modifiers & GDK_CONTROL_MASK) != 0) {
- action = GDK_ACTION_COPY;
- } else {
- GtkWidget *source_widget;
-
- action = GDK_ACTION_MOVE;
-
- source_widget = gtk_drag_get_source_widget (context);
- if (source_widget != NULL
- && E_IS_STORAGE_SET_VIEW (source_widget)) {
- const char *source_path;
-
- source_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (source_widget));
- if (source_path != NULL) {
- EFolder *folder;
- int source_path_len;
- char *destination_path;
- char *base_name;
-
- folder = e_storage_set_get_folder (storage_set, source_path);
- if (folder != NULL && e_folder_get_is_stock (folder))
- return FALSE;
-
- source_path_len = strlen (path);
- if (strcmp (path, source_path) == 0)
- return FALSE;
-
- base_name = g_path_get_basename (source_path);
- destination_path = g_strconcat (path, "/", base_name, NULL);
- g_free (base_name);
-
- if (strncmp (destination_path, source_path, source_path_len) == 0) {
- g_free (destination_path);
- return FALSE;
- }
-
- g_free (destination_path);
- }
- }
- }
-
- gdk_drag_status (context, action, time);
- return TRUE;
-}
-
-
-/* Bridge for the DnD motion event. */
-
-gboolean
-e_folder_dnd_bridge_motion (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- EvolutionShellComponentClient *component_client;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder destination_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context corba_context;
- GNOME_Evolution_ShellComponentDnd_Action suggested_action;
- CORBA_Environment ev;
- CORBA_boolean can_handle;
- EFolder *folder;
- const char *dnd_type;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- dnd_type = find_matching_target_for_drag_context (storage_set, path, context, NULL);
- if (dnd_type == NULL)
- return FALSE;
-
- if (strcmp (dnd_type, E_FOLDER_DND_PATH_TARGET_TYPE) == 0)
- return handle_evolution_path_drag_motion (storage_set, path, context, time);
-
- component_client = get_component_at_path (storage_set, path);
- if (component_client == NULL)
- return FALSE;
-
- destination_folder_interface = evolution_shell_component_client_get_dnd_destination_interface (component_client);
- if (destination_folder_interface == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- corba_context.dndType = (char *) dnd_type; /* (Safe cast, as we don't actually free the corba_context.) */
- corba_context.possibleActions = convert_gdk_drag_action_set_to_corba (context->actions);
- corba_context.suggestedAction = convert_gdk_drag_action_to_corba (context->suggested_action);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- can_handle = GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion (destination_folder_interface,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder),
- &corba_context,
- &suggested_action,
- &ev);
- if (ev._major != CORBA_NO_EXCEPTION || ! can_handle) {
- CORBA_exception_free (&ev);
- return FALSE;
- }
-
- CORBA_exception_free (&ev);
-
- gdk_drag_status (context, convert_corba_drag_action_to_gdk (suggested_action), time);
- return TRUE;
-}
-
-
-/* Bridge for the drop event. */
-
-gboolean
-e_folder_dnd_bridge_drop (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- GdkAtom atom;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (context != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
-
- if (context->targets == NULL)
- return FALSE;
-
- if (find_matching_target_for_drag_context (storage_set, path, context, &atom) == NULL)
- return FALSE;
-
- gtk_drag_get_data (widget, context, atom, time);
-
- return FALSE;
-}
-
-
-/* Bridge for the data_received event. */
-
-static gboolean
-handle_data_received_path (GdkDragContext *context,
- GtkSelectionData *selection_data,
- EStorageSet *storage_set,
- const char *path,
- GtkWindow *toplevel_window)
-{
- const char *source_path;
- char *destination_path;
- char *base_name;
- gboolean handled;
-
- source_path = (const char *) selection_data->data;
-
- /* (Basic sanity checks.) */
- if (source_path == NULL || source_path[0] != E_PATH_SEPARATOR || source_path[1] == '\0')
- return FALSE;
-
- base_name = g_path_get_basename (source_path);
- destination_path = g_build_filename (path, base_name, NULL);
- g_free (base_name);
-
- switch (context->action) {
- case GDK_ACTION_MOVE:
- e_storage_set_async_xfer_folder (storage_set,
- source_path,
- destination_path,
- TRUE,
- folder_xfer_callback,
- toplevel_window);
- handled = TRUE;
- break;
- case GDK_ACTION_COPY:
- e_storage_set_async_xfer_folder (storage_set,
- source_path,
- destination_path,
- FALSE,
- folder_xfer_callback,
- toplevel_window);
- handled = TRUE;
- break;
- default:
- handled = FALSE;
- g_warning ("EStorageSetView: Unknown action %d", context->action);
- }
-
- g_free (destination_path);
-
- return handled;
-}
-
-static gboolean
-handle_data_received_non_path (GdkDragContext *context,
- GtkSelectionData *selection_data,
- EStorageSet *storage_set,
- const char *path,
- const char *target_type)
-{
- GNOME_Evolution_ShellComponentDnd_DestinationFolder destination_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context corba_context;
- GNOME_Evolution_ShellComponentDnd_Data corba_data;
- EvolutionShellComponentClient *component_client;
- EFolder *folder;
- CORBA_Environment ev;
-
- component_client = get_component_at_path (storage_set, path);
- if (component_client == NULL)
- return FALSE;
-
- destination_folder_interface = evolution_shell_component_client_get_dnd_destination_interface (component_client);
- if (destination_folder_interface == NULL)
- return FALSE;
-
- CORBA_exception_init (&ev);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- corba_context.dndType = (char *) target_type;
- corba_context.possibleActions = convert_gdk_drag_action_set_to_corba (context->actions);
- corba_context.suggestedAction = convert_gdk_drag_action_to_corba (context->suggested_action);
-
- corba_data.format = selection_data->format;
- corba_data.target = gdk_atom_name (selection_data->target);
-
- corba_data.bytes._release = FALSE;
-
- if (selection_data->data == NULL) {
- /* If data is NULL the length is -1 and this would mess things
- up so we handle it separately. */
- corba_data.bytes._length = 0;
- corba_data.bytes._buffer = NULL;
- } else {
- corba_data.bytes._length = selection_data->length;
- corba_data.bytes._buffer = selection_data->data;
- }
-
- /* pass off the data to the component's DestinationFolderInterface */
- return GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop (destination_folder_interface,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder),
- &corba_context,
- convert_gdk_drag_action_to_corba (context->action),
- &corba_data,
- &ev);
-}
-
-void
-e_folder_dnd_bridge_data_received (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path)
-{
- char *target_type;
- gboolean handled;
-
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (context != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
-
- if (selection_data->data == NULL && selection_data->length == -1)
- return;
-
- target_type = gdk_atom_name (selection_data->target);
-
- if (strcmp (target_type, E_FOLDER_DND_PATH_TARGET_TYPE) != 0) {
- handled = handle_data_received_non_path (context, selection_data, storage_set,
- path, target_type);
- } else {
- GtkWindow *toplevel_window;
-
- toplevel_window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (widget)));
- handled = handle_data_received_path (context, selection_data, storage_set, path,
- toplevel_window);
- }
-
- g_free (target_type);
- gtk_drag_finish (context, handled, FALSE, time);
-}
-
diff --git a/shell/e-folder-dnd-bridge.h b/shell/e-folder-dnd-bridge.h
deleted file mode 100644
index 77cfcd5181..0000000000
--- a/shell/e-folder-dnd-bridge.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-component-dnd-bridge.h - Utility functions for handling dnd to Evolution
- * folders using the ShellComponentDnd interface.
- *
- * Copyright (C) 2002 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>
- */
-
-/* The purpose of this file is to share the logic for dropping objects into
- folders between different widgets that handle the display of EStorageSets
- (namely, the shortcut bar and the folder bar). */
-
-#ifndef E_FOLDER_BAR_DND_BRIDGE_H
-#define E_FOLDER_BAR_DND_BRIDGE_H
-
-#include "e-storage-set.h"
-
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkdnd.h>
-
-#define E_FOLDER_DND_PATH_TARGET_TYPE "_EVOLUTION_PRIVATE_PATH"
-
-gboolean e_folder_dnd_bridge_motion (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-gboolean e_folder_dnd_bridge_drop (GtkWidget *widget,
- GdkDragContext *context,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-void e_folder_dnd_bridge_data_received (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- unsigned int time,
- EStorageSet *storage_set,
- const char *path);
-
-#endif /* E_FOLDER_BAR_DND_BRIDGE_H */
diff --git a/shell/e-folder-selection-dialog.c b/shell/e-folder-selection-dialog.c
deleted file mode 100644
index 42a881e113..0000000000
--- a/shell/e-folder-selection-dialog.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-selection-dialog.c
- *
- * Copyright (C) 2000, 2001, 2002, 2003 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-folder-selection-dialog.h"
-
-#include "e-shell-marshal.h"
-#include "e-storage-set-view.h"
-#include "e-storage-set.h"
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-#include <gtk/gtkbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkstock.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE (gtk_dialog_get_type ())
-static GtkDialogClass *parent_class = NULL;
-
-struct _EFolderSelectionDialogPrivate {
- GList *allowed_types;
- EStorageSet *storage_set;
- GtkWidget *storage_set_view;
-
- gboolean allow_creation;
-};
-
-enum {
- FOLDER_SELECTED,
- CANCELLED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- RESPONSE_NEW
-};
-
-
-/* Utility functions. */
-
-static gboolean
-check_folder_type_valid (EFolderSelectionDialog *folder_selection_dialog)
-{
- EFolderSelectionDialogPrivate *priv;
- const char *selected_path;
- EFolder *folder;
- const char *folder_type;
- GList *p;
-
- priv = folder_selection_dialog->priv;
- if (priv->allowed_types == NULL)
- return TRUE;
-
- selected_path = e_folder_selection_dialog_get_selected_path (folder_selection_dialog);
- if (selected_path == NULL)
- return FALSE;
-
- folder = e_storage_set_get_folder (priv->storage_set, selected_path);
- if (folder == NULL)
- return FALSE;
-
- folder_type = e_folder_get_type_string (folder);
-
- for (p = priv->allowed_types; p != NULL; p = p->next) {
- const char *type, *slash;
-
- type = (const char *) p->data;
- if (strcmp (folder_type, type) == 0)
- return TRUE;
- slash = strchr (type, '/');
- if (slash && slash[1] == '*' && strncmp (folder_type, type, slash - type) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-/* Folder creation dialog callback. */
-
-#if 0 /* EPFIXME */
-static void
-folder_creation_dialog_result_cb (EShell *shell,
- EShellFolderCreationDialogResult result,
- const char *path,
- void *data)
-{
- EFolderSelectionDialog *dialog;
- EFolderSelectionDialogPrivate *priv;
-
- dialog = E_FOLDER_SELECTION_DIALOG (data);
- priv = dialog->priv;
-
- if (priv == NULL) {
- g_warning ("dialog->priv is NULL, and should not be");
- return;
- }
-
- if (result == E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS)
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view),
- path);
-}
-#endif
-
-
-/* GtkObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EFolderSelectionDialog *folder_selection_dialog;
- EFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EFolderSelectionDialog *folder_selection_dialog;
- EFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- e_free_string_list (priv->allowed_types);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GtkDialog methods. */
-
-static void
-impl_response (GtkDialog *dialog,
- int response)
-{
- EFolderSelectionDialog *folder_selection_dialog;
- EFolderSelectionDialogPrivate *priv;
- EStorageSetView *storage_set_view;
- const char *default_parent_folder;
- const char *default_subtype;
- char *default_type;
-
- folder_selection_dialog = E_FOLDER_SELECTION_DIALOG (dialog);
- priv = folder_selection_dialog->priv;
-
- switch (response) {
- case GTK_RESPONSE_OK:
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- }
- break;
-
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- g_signal_emit (folder_selection_dialog, signals[CANCELLED], 0);
- break;
-
- case RESPONSE_NEW:
- storage_set_view = E_STORAGE_SET_VIEW (priv->storage_set_view);
- default_parent_folder = e_storage_set_view_get_current_folder (storage_set_view);
-
- /* The default type in the folder creation dialog will be the
- first of the allowed types. If all types are allowed,
- hardcode to "mail". */
- if (priv->allowed_types == NULL)
- default_type = g_strdup ("mail");
- else {
- default_subtype = (const char *) priv->allowed_types->data;
- default_type = g_strndup (default_subtype,
- strcspn (default_subtype, "/"));
- }
-
-#if 0 /* EPFIXME */
- e_shell_show_folder_creation_dialog (priv->shell, GTK_WINDOW (dialog),
- default_parent_folder,
- default_type,
- folder_creation_dialog_result_cb,
- dialog);
-#endif
-
- g_free (default_type);
-
- break;
- }
-}
-
-
-/* GTK+ type initialization. */
-
-static void
-class_init (EFolderSelectionDialogClass *klass)
-{
- GObjectClass *object_class;
- GtkDialogClass *dialog_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- object_class = G_OBJECT_CLASS (klass);
- dialog_class = GTK_DIALOG_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- dialog_class->response = impl_response;
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EFolderSelectionDialogClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[CANCELLED]
- = g_signal_new ("cancelled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EFolderSelectionDialogClass, cancelled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EFolderSelectionDialog *folder_selection_dialog)
-{
- EFolderSelectionDialogPrivate *priv;
-
- priv = g_new (EFolderSelectionDialogPrivate, 1);
- priv->storage_set = NULL;
- priv->storage_set_view = NULL;
- priv->allowed_types = NULL;
- priv->allow_creation = TRUE;
-
- folder_selection_dialog->priv = priv;
-}
-
-
-/* ETable callbacks. */
-
-static void
-folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EFolderSelectionDialog *dialog;
-
- dialog = E_FOLDER_SELECTION_DIALOG (data);
-
- if (check_folder_type_valid (dialog))
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE);
- else
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
-}
-
-static void
-double_click_cb (EStorageSetView *essv,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event,
- EFolderSelectionDialog *folder_selection_dialog)
-{
- g_return_if_fail (folder_selection_dialog != NULL);
-
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- }
-}
-
-
-/**
- * e_folder_selection_dialog_construct:
- * @folder_selection_dialog: A folder selection dialog widget
- * @storage_set: The storage set this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_path: The path of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Construct @folder_selection_dialog.
- **/
-/* EPFIXME: Should be allowed to get the expanded state from a model
- EStorageSetView. */
-void
-e_folder_selection_dialog_construct (EFolderSelectionDialog *folder_selection_dialog,
- EStorageSet *storage_set,
- const char *title,
- const char *caption,
- const char *default_path,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EFolderSelectionDialogPrivate *priv;
- GtkWidget *scrolled_window;
- GtkWidget *caption_label;
- int i;
-
- g_return_if_fail (E_IS_FOLDER_SELECTION_DIALOG (folder_selection_dialog));
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = folder_selection_dialog->priv;
-
- /* Basic dialog setup. */
-
- gtk_window_set_default_size (GTK_WINDOW (folder_selection_dialog), 350, 300);
- gtk_window_set_modal (GTK_WINDOW (folder_selection_dialog), TRUE);
- gtk_window_set_title (GTK_WINDOW (folder_selection_dialog), title);
- gtk_container_set_border_width (GTK_CONTAINER (folder_selection_dialog), 6);
-
- if (allow_creation)
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_NEW, RESPONSE_NEW,
- NULL);
-
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK, FALSE);
- gtk_dialog_set_default_response (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK);
-
- /* Set up the label. */
-
- if (caption != NULL) {
- caption_label = gtk_label_new (caption);
- gtk_label_set_justify (GTK_LABEL (caption_label), GTK_JUSTIFY_LEFT);
- gtk_widget_show (caption_label);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- caption_label, FALSE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- 6);
-
-
- }
-
- /* Set up the storage set and its view. */
-
- priv->storage_set = storage_set;
- g_object_ref (storage_set);
-
- priv->storage_set_view = e_storage_set_create_new_view (priv->storage_set, NULL);
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
- e_storage_set_view_enable_search (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-
- g_signal_connect (priv->storage_set_view, "double_click", G_CALLBACK (double_click_cb), folder_selection_dialog);
- g_signal_connect (priv->storage_set_view, "folder_selected", G_CALLBACK (folder_selected_cb), folder_selection_dialog);
-
- g_assert (priv->allowed_types == NULL);
- if (allowed_types != NULL) {
- for (i = 0; allowed_types[i] != NULL; i++)
- priv->allowed_types = g_list_prepend (priv->allowed_types,
- g_strdup (allowed_types[i]));
-
- /* Preserve the order so we can use the first type listed as
- the default for the folder creation dialog invoked by the
- "New..." button. */
- priv->allowed_types = g_list_reverse (priv->allowed_types);
- }
-
- if (default_path != NULL)
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), default_path);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), priv->storage_set_view);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- scrolled_window, TRUE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_widget_show (priv->storage_set_view);
- gtk_widget_show (scrolled_window);
-
- GTK_WIDGET_SET_FLAGS (priv->storage_set_view, GTK_CAN_FOCUS);
- gtk_widget_grab_focus (priv->storage_set_view);
-}
-
-/**
- * e_folder_selection_dialog_new:
- * @storage_set: The storage set this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_path: The path of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Create a new folder selection dialog widget.
- *
- * Return value:
- **/
-GtkWidget *
-e_folder_selection_dialog_new (EStorageSet *storage_set,
- const char *title,
- const char *caption,
- const char *default_path,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EFolderSelectionDialog *folder_selection_dialog;
-
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- folder_selection_dialog = g_object_new (e_folder_selection_dialog_get_type (), NULL);
- e_folder_selection_dialog_construct (folder_selection_dialog, storage_set,
- title, caption, default_path, allowed_types,
- allow_creation);
-
- return GTK_WIDGET (folder_selection_dialog);
-}
-
-
-const char *
-e_folder_selection_dialog_get_selected_path (EFolderSelectionDialog *folder_selection_dialog)
-{
- EFolderSelectionDialogPrivate *priv;
-
- g_return_val_if_fail (E_IS_FOLDER_SELECTION_DIALOG (folder_selection_dialog), NULL);
-
- priv = folder_selection_dialog->priv;
-
- return e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
-}
-
-
-E_MAKE_TYPE (e_folder_selection_dialog, "EFolderSelectionDialog", EFolderSelectionDialog, class_init, init, PARENT_TYPE)
diff --git a/shell/e-folder-selection-dialog.h b/shell/e-folder-selection-dialog.h
deleted file mode 100644
index bc263d46a8..0000000000
--- a/shell/e-folder-selection-dialog.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-selection-dialog.h
- *
- * Copyright (C) 2000, 2001, 2002, 2003 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
- */
-
-#ifndef E_FOLDER_SELECTION_DIALOG_H
-#define E_FOLDER_SELECTION_DIALOG_H
-
-#include "e-storage-set.h"
-
-#include <gtk/gtkdialog.h>
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define E_TYPE_FOLDER_SELECTION_DIALOG (e_folder_selection_dialog_get_type ())
-#define E_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER_SELECTION_DIALOG, EFolderSelectionDialog))
-#define E_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER_SELECTION_DIALOG, EFolderSelectionDialogClass))
-#define E_IS_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER_SELECTION_DIALOG))
-#define E_IS_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER_SELECTION_DIALOG))
-
-
-typedef struct _EFolderSelectionDialog EFolderSelectionDialog;
-typedef struct _EFolderSelectionDialogPrivate EFolderSelectionDialogPrivate;
-typedef struct _EFolderSelectionDialogClass EFolderSelectionDialogClass;
-
-struct _EFolderSelectionDialog {
- GtkDialog parent;
-
- EFolderSelectionDialogPrivate *priv;
-};
-
-struct _EFolderSelectionDialogClass {
- GtkDialogClass parent_class;
-
- void (* folder_selected) (EFolderSelectionDialog *folder_selection_dialog,
- const char *path);
- void (* cancelled) (EFolderSelectionDialog *folder_selection_dialog);
-};
-
-
-GtkType e_folder_selection_dialog_get_type (void);
-void e_folder_selection_dialog_construct (EFolderSelectionDialog *folder_selection_dialog,
- EStorageSet *storage_set,
- const char *title,
- const char *caption,
- const char *default_path,
- const char *allowed_types[],
- gboolean allow_creation);
-GtkWidget *e_folder_selection_dialog_new (EStorageSet *storage_set,
- const char *title,
- const char *caption,
- const char *default_path,
- const char *allowed_types[],
- gboolean allow_creation);
-
-const char *e_folder_selection_dialog_get_selected_path (EFolderSelectionDialog *folder_selection_dialog);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* E_FOLDER_SELECTION_DIALOG_H */
diff --git a/shell/e-folder-type-registry.c b/shell/e-folder-type-registry.c
deleted file mode 100644
index 81cb18796e..0000000000
--- a/shell/e-folder-type-registry.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-type-registry.c
- *
- * Copyright (C) 2000, 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <gtk/gtktypeutils.h>
-
-#include <gal/util/e-util.h>
-
-#include "e-shell-utils.h"
-
-#include "e-folder-type-registry.h"
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-struct _FolderType {
- char *name;
- char *icon_name;
-
- char *display_name;
- char *description;
-
- gboolean user_creatable;
-
- GList *exported_dnd_types; /* char * */
- GList *accepted_dnd_types; /* char * */
-
- EvolutionShellComponentClient *handler;
-
- /* The icon, standard (48x48) and mini (16x16) versions. */
- GdkPixbuf *icon_pixbuf;
- GdkPixbuf *mini_icon_pixbuf;
-};
-typedef struct _FolderType FolderType;
-
-struct _EFolderTypeRegistryPrivate {
- GHashTable *name_to_type;
-};
-
-
-/* FolderType handling. */
-
-static FolderType *
-folder_type_new (const char *name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- FolderType *new;
- char *icon_path;
- int i;
-
- new = g_new (FolderType, 1);
-
- new->name = g_strdup (name);
- new->icon_name = g_strdup (icon_name);
- new->display_name = g_strdup (display_name);
- new->description = g_strdup (description);
-
- new->user_creatable = user_creatable;
-
- new->exported_dnd_types = NULL;
- for (i = 0; i < num_exported_dnd_types; i++)
- new->exported_dnd_types = g_list_prepend (new->exported_dnd_types,
- g_strdup (exported_dnd_types[i]));
- new->exported_dnd_types = g_list_reverse (new->exported_dnd_types);
-
- new->accepted_dnd_types = NULL;
- for (i = 0; i < num_accepted_dnd_types; i++)
- new->accepted_dnd_types = g_list_prepend (new->accepted_dnd_types,
- g_strdup (accepted_dnd_types[i]));
- new->accepted_dnd_types = g_list_reverse (new->accepted_dnd_types);
-
- new->handler = NULL;
-
- icon_path = e_shell_get_icon_path (icon_name, FALSE);
- if (icon_path == NULL)
- new->icon_pixbuf = NULL;
- else
- new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
-
- g_free (icon_path);
-
- icon_path = e_shell_get_icon_path (icon_name, TRUE);
- if (icon_path != NULL) {
- new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);
- } else {
- if (new->icon_pixbuf != NULL)
- new->mini_icon_pixbuf = g_object_ref (new->icon_pixbuf);
- else
- new->mini_icon_pixbuf = NULL;
- }
-
- g_free (icon_path);
-
- return new;
-}
-
-static void
-folder_type_free (FolderType *folder_type)
-{
- g_free (folder_type->name);
- g_free (folder_type->icon_name);
- g_free (folder_type->display_name);
- g_free (folder_type->description);
-
- if (folder_type->icon_pixbuf != NULL)
- g_object_unref (folder_type->icon_pixbuf);
- if (folder_type->mini_icon_pixbuf != NULL)
- g_object_unref (folder_type->mini_icon_pixbuf);
-
- if (folder_type->handler != NULL)
- g_object_unref (folder_type->handler);
-
- g_free (folder_type);
-}
-
-static FolderType *
-get_folder_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
-
- priv = folder_type_registry->priv;
-
- return g_hash_table_lookup (priv->name_to_type, type_name);
-}
-
-static gboolean
-register_folder_type (EFolderTypeRegistry *folder_type_registry,
- const char *name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- priv = folder_type_registry->priv;
-
- /* Make sure we don't add the same type twice. */
- if (get_folder_type (folder_type_registry, name) != NULL)
- return FALSE;
-
- folder_type = folder_type_new (name, icon_name,
- display_name, description,
- user_creatable,
- num_exported_dnd_types, exported_dnd_types,
- num_accepted_dnd_types, accepted_dnd_types);
- g_hash_table_insert (priv->name_to_type, folder_type->name, folder_type);
-
- return TRUE;
-}
-
-static gboolean
-set_handler (EFolderTypeRegistry *folder_type_registry,
- const char *name,
- EvolutionShellComponentClient *handler)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- priv = folder_type_registry->priv;
-
- folder_type = get_folder_type (folder_type_registry, name);
- if (folder_type == NULL)
- return FALSE;
- if (folder_type->handler != NULL)
- return FALSE;
-
- g_object_ref (handler);
- folder_type->handler = handler;
-
- return TRUE;
-}
-
-
-/* GtkObject methods. */
-
-static void
-hash_forall_free_folder_type (gpointer key,
- gpointer value,
- gpointer data)
-{
- FolderType *folder_type;
-
- folder_type = (FolderType *) value;
- folder_type_free (folder_type);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EFolderTypeRegistry *folder_type_registry;
- EFolderTypeRegistryPrivate *priv;
-
- folder_type_registry = E_FOLDER_TYPE_REGISTRY (object);
- priv = folder_type_registry->priv;
-
- g_hash_table_foreach (priv->name_to_type, hash_forall_free_folder_type, NULL);
- g_hash_table_destroy (priv->name_to_type);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EFolderTypeRegistryClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-}
-
-static void
-init (EFolderTypeRegistry *folder_type_registry)
-{
- EFolderTypeRegistryPrivate *priv;
-
- priv = g_new (EFolderTypeRegistryPrivate, 1);
- priv->name_to_type = g_hash_table_new (g_str_hash, g_str_equal);
-
- folder_type_registry->priv = priv;
-}
-
-
-void
-e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry)
-{
- g_return_if_fail (folder_type_registry != NULL);
- g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry));
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder_type_registry), GTK_FLOATING);
-}
-
-EFolderTypeRegistry *
-e_folder_type_registry_new (void)
-{
- EFolderTypeRegistry *new;
-
- new = g_object_new (e_folder_type_registry_get_type (), NULL);
-
- e_folder_type_registry_construct (new);
-
- return new;
-}
-
-
-gboolean
-e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types)
-{
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
- g_return_val_if_fail (icon_name != NULL, FALSE);
-
- return register_folder_type (folder_type_registry, type_name, icon_name,
- display_name, description, user_creatable,
- num_exported_dnd_types, exported_dnd_types,
- num_accepted_dnd_types, accepted_dnd_types);
-}
-
-gboolean
-e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- EvolutionShellComponentClient *handler)
-{
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (handler), FALSE);
-
- return set_handler (folder_type_registry, type_name, handler);
-}
-
-
-gboolean
-e_folder_type_registry_type_registered (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
-
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
-
- priv = folder_type_registry->priv;
-
- if (get_folder_type (folder_type_registry, type_name) == NULL)
- return FALSE;
-
- return TRUE;
-}
-
-void
-e_folder_type_registry_unregister_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- EFolderTypeRegistryPrivate *priv;
- FolderType *folder_type;
-
- g_return_if_fail (folder_type_registry != NULL);
- g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry));
- g_return_if_fail (type_name != NULL);
-
- priv = folder_type_registry->priv;
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return;
-
- g_hash_table_remove (priv->name_to_type, folder_type->name);
- folder_type_free (folder_type);
-}
-
-
-static void
-get_type_names_hash_forall (void *key,
- void *value,
- void *data)
-{
- GList **type_name_list;
-
- type_name_list = (GList **) data;
-
- *type_name_list = g_list_prepend (*type_name_list, g_strdup ((const char *) key));
-}
-
-GList *
-e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry)
-{
- GList *type_name_list;
- EFolderTypeRegistryPrivate *priv;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
-
- priv = folder_type_registry->priv;
-
- type_name_list = NULL;
- g_hash_table_foreach (priv->name_to_type, get_type_names_hash_forall, &type_name_list);
-
- return type_name_list;
-}
-
-
-const char *
-e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->icon_name;
-}
-
-GdkPixbuf *
-e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- gboolean mini)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- if (mini)
- return folder_type->mini_icon_pixbuf;
- else
- return folder_type->icon_pixbuf;
-}
-
-EvolutionShellComponentClient *
-e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->handler;
-}
-
-gboolean
-e_folder_type_registry_type_is_user_creatable (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
- g_return_val_if_fail (type_name != NULL, FALSE);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->user_creatable;
-}
-
-const char *
-e_folder_type_registry_get_display_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->display_name;
-}
-
-const char *
-e_folder_type_registry_get_description_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return FALSE;
-
- return folder_type->description;
-}
-
-
-GList *
-e_folder_type_registry_get_exported_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->exported_dnd_types;
-}
-
-GList *
-e_folder_type_registry_get_accepted_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name)
-{
- const FolderType *folder_type;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (type_name != NULL, NULL);
-
- folder_type = get_folder_type (folder_type_registry, type_name);
- if (folder_type == NULL)
- return NULL;
-
- return folder_type->accepted_dnd_types;
-}
-
-
-E_MAKE_TYPE (e_folder_type_registry, "EFolderTypeRegistry", EFolderTypeRegistry,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-folder-type-registry.h b/shell/e-folder-type-registry.h
deleted file mode 100644
index 628a5d7d39..0000000000
--- a/shell/e-folder-type-registry.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-folder-type-registry.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef _E_FOLDER_TYPE_REGISTRY_H_
-#define _E_FOLDER_TYPE_REGISTRY_H_
-
-#include <gtk/gtkobject.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "evolution-shell-component-client.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_FOLDER_TYPE_REGISTRY (e_folder_type_registry_get_type ())
-#define E_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistry))
-#define E_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistryClass))
-#define E_IS_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
-#define E_IS_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
-
-
-typedef struct _EFolderTypeRegistry EFolderTypeRegistry;
-typedef struct _EFolderTypeRegistryPrivate EFolderTypeRegistryPrivate;
-typedef struct _EFolderTypeRegistryClass EFolderTypeRegistryClass;
-
-struct _EFolderTypeRegistry {
- GtkObject parent;
-
- EFolderTypeRegistryPrivate *priv;
-};
-
-struct _EFolderTypeRegistryClass {
- GtkObjectClass parent_class;
-};
-
-
-GtkType e_folder_type_registry_get_type (void);
-void e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry);
-EFolderTypeRegistry *e_folder_type_registry_new (void);
-
-gboolean e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- const char *icon_name,
- const char *display_name,
- const char *description,
- gboolean user_creatable,
- int num_exported_dnd_types,
- const char **exported_dnd_types,
- int num_accepted_dnd_types,
- const char **accepted_dnd_types);
-gboolean e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- EvolutionShellComponentClient *handler);
-
-GList *e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry);
-
-gboolean e_folder_type_registry_type_registered (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-void e_folder_type_registry_unregister_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-GdkPixbuf *e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name,
- gboolean mini);
-const char *e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-EvolutionShellComponentClient *e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-gboolean e_folder_type_registry_type_is_user_creatable (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-const char *e_folder_type_registry_get_display_name_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-const char *e_folder_type_registry_get_description_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-GList *e_folder_type_registry_get_exported_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-GList *e_folder_type_registry_get_accepted_dnd_types_for_type (EFolderTypeRegistry *folder_type_registry,
- const char *type_name);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_FOLDER_TYPE_REGISTRY_H_ */
diff --git a/shell/e-local-folder.c b/shell/e-local-folder.c
deleted file mode 100644
index 1df96734f9..0000000000
--- a/shell/e-local-folder.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-folder.c
- *
- * Copyright (C) 2000 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
- */
-
-/* The metafile goes like this:
-
- <?xml version="1.0"?>
- <efolder>
- <type>mail</type>
-
- <name>Inbox</name>
- <name locale="it">Posta in Arrivo</name>
-
- <description>This is the default folder for incoming messages</description>
- <description locale="it">Cartella che contiene i messaggi in arrivo</description>
-
- <homepage>http://www.somewhere.net</homepage>
- </efolder>
-
- FIXME: Do we want to use a namespace for this?
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <unistd.h>
-
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include <libgnome/gnome-util.h>
-
-#include <gal/util/e-util.h>
-#include <gal/util/e-xml-utils.h>
-
-#include <libgnome/gnome-util.h>
-
-#include "e-local-folder.h"
-
-
-#define PARENT_TYPE E_TYPE_FOLDER
-static EFolderClass *parent_class = NULL;
-
-#define URI_PREFIX "file://"
-#define URI_PREFIX_LEN 7
-
-/* This provides the name and the description for a specific locale. */
-struct _I18nInfo {
- char *language_id;
- char *name;
- char *description;
-};
-typedef struct _I18nInfo I18nInfo;
-
-struct _ELocalFolderPrivate {
- GHashTable *language_id_to_i18n_info;
-};
-
-
-/* Locale information. */
-
-static char *global_language_id = NULL;
-
-
-/* I18nInfo handling. */
-
-static I18nInfo *
-i18n_info_new (const char *language_id,
- const char *name,
- const char *description)
-{
- I18nInfo *info;
-
- info = g_new (I18nInfo, 1);
- info->language_id = g_strdup (language_id);
- info->name = g_strdup (name);
- info->description = g_strdup (description);
-
- return info;
-}
-
-static void
-i18n_info_free (I18nInfo *info)
-{
- g_free (info->language_id);
- g_free (info->name);
- g_free (info->description);
-
- g_free (info);
-}
-
-
-/* Language ID -> I18nInfo hash table handling. */
-
-static void
-add_i18n_info_to_hash (GHashTable *language_id_to_i18n_info_hash,
- I18nInfo *i18n_info)
-{
- I18nInfo *existing_i18n_info;
-
- existing_i18n_info = (I18nInfo *) g_hash_table_lookup (language_id_to_i18n_info_hash,
- i18n_info->language_id);
- if (existing_i18n_info != NULL) {
- g_hash_table_remove (language_id_to_i18n_info_hash,
- i18n_info->language_id);
- i18n_info_free (existing_i18n_info);
- }
-
- g_hash_table_insert (language_id_to_i18n_info_hash, i18n_info->language_id, i18n_info);
-}
-
-static void
-language_id_to_i18n_info_hash_foreach_free (void *key,
- void *value,
- void *data)
-{
- i18n_info_free ((I18nInfo *) value);
-}
-
-static I18nInfo *
-get_i18n_info_for_language (ELocalFolder *local_folder,
- const char *language_id)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- priv = local_folder->priv;
-
- if (language_id == NULL)
- language_id = global_language_id;
-
- i18n_info = g_hash_table_lookup (priv->language_id_to_i18n_info, language_id);
-
- /* For locale info like `en_UK@yadda', we try to use `en' as a backup. */
- /* Note: this is exactly the same thing that gnome-config does with the
- I18N value handling. I hope it works. */
- if (i18n_info == NULL) {
- size_t n;
-
- n = strcspn (language_id, "@_");
- if (language_id[n] != '\0') {
- char *simplified_language_id;
-
- simplified_language_id = g_strndup (language_id, n);
- i18n_info = g_hash_table_lookup (priv->language_id_to_i18n_info,
- simplified_language_id);
- }
- }
-
- return i18n_info;
-}
-
-
-/* Locale handling. */
-
-static void
-setup_global_language_id (void)
-{
- /* FIXME: Implement. */
- global_language_id = "C";
-}
-
-/* Update the EFolder attributes according to the current locale. */
-static void
-update_for_global_locale (ELocalFolder *local_folder)
-{
- I18nInfo *i18n_info;
-
- i18n_info = get_i18n_info_for_language (local_folder, NULL);
-
- if (i18n_info == NULL)
- i18n_info = get_i18n_info_for_language (local_folder, "C");
-
- g_assert (i18n_info != NULL);
-
- e_folder_set_name (E_FOLDER (local_folder), i18n_info->name);
- e_folder_set_description (E_FOLDER (local_folder), i18n_info->description);
-}
-
-
-/* XML tree handling. */
-
-static char *
-get_string_value (xmlNode *node,
- const char *name)
-{
- xmlNode *p;
- xmlChar *xml_string;
- char *retval;
-
- p = e_xml_get_child_by_name (node, (xmlChar *) name);
- if (p == NULL)
- return NULL;
-
- p = e_xml_get_child_by_name (p, (xmlChar *) "text");
- if (p == NULL)
- return NULL;
-
- xml_string = xmlNodeListGetString (node->doc, p, TRUE);
- retval = g_strdup ((char *) xml_string);
- xmlFree (xml_string);
-
- return retval;
-}
-
-static void
-retrieve_info_item (ELocalFolder *local_folder,
- xmlNode *node)
-{
- xmlChar *lang;
- char *name;
- char *description;
-
- lang = xmlGetProp (node, "lang");
- name = get_string_value (node, "name");
- description = get_string_value (node, "description");
-
- if (lang == NULL) {
- e_local_folder_add_i18n_info (local_folder, "C", name, description);
- } else {
- e_local_folder_add_i18n_info (local_folder, lang, name, description);
- xmlFree (lang);
- }
-
- g_free (name);
- g_free (description);
-}
-
-static void
-retrieve_info (ELocalFolder *local_folder,
- xmlNode *root_xml_node)
-{
- ELocalFolderPrivate *priv;
- xmlNode *p;
-
- priv = local_folder->priv;
-
- for (p = root_xml_node->children; p != NULL; p = p->next) {
- if (xmlStrcmp (p->name, "info") == 0)
- retrieve_info_item (local_folder, p);
- }
-}
-
-static gboolean
-construct_loading_metadata (ELocalFolder *local_folder,
- const char *path)
-{
- EFolder *folder;
- xmlDoc *doc;
- xmlNode *root;
- char *base_name;
- char *type;
- char *metadata_path;
- char *physical_uri;
-
- folder = E_FOLDER (local_folder);
-
- metadata_path = g_build_filename (path, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
-
- doc = xmlParseFile (metadata_path);
- if (doc == NULL) {
- g_free (metadata_path);
- return FALSE;
- }
-
- root = xmlDocGetRootElement (doc);
- if (root == NULL || root->name == NULL || strcmp (root->name, "efolder") != 0) {
- g_free (metadata_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- type = get_string_value (root, "type");
- if (type == NULL) {
- g_free (metadata_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- base_name = g_path_get_basename (path);
- e_local_folder_construct (local_folder, base_name, type, NULL);
- g_free (base_name);
- g_free (type);
-
- retrieve_info (local_folder, root);
-
- xmlFreeDoc (doc);
-
- physical_uri = g_strconcat (URI_PREFIX, path, NULL);
- e_folder_set_physical_uri (folder, physical_uri);
- g_free (physical_uri);
-
- g_free (metadata_path);
-
- return TRUE;
-}
-
-static gboolean
-save_metadata (ELocalFolder *local_folder)
-{
- EFolder *folder;
- xmlDoc *doc;
- xmlNode *root;
- const char *physical_directory;
- char *physical_path;
-
- folder = E_FOLDER (local_folder);
-
- doc = xmlNewDoc ((xmlChar *) "1.0");
- root = xmlNewDocNode (doc, NULL, (xmlChar *) "efolder", NULL);
- xmlDocSetRootElement (doc, root);
-
- xmlNewChild (root, NULL, (xmlChar *) "type",
- (xmlChar *) e_folder_get_type_string (folder));
-
- if (e_folder_get_description (folder) != NULL)
- xmlNewTextChild (root, NULL, (xmlChar *) "description",
- (xmlChar *) e_folder_get_description (folder));
-
- physical_directory = e_folder_get_physical_uri (folder) + URI_PREFIX_LEN - 1;
- physical_path = g_build_filename (physical_directory, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
-
- if (xmlSaveFile (physical_path, doc) < 0) {
- unlink (physical_path);
- g_free (physical_path);
- xmlFreeDoc (doc);
- return FALSE;
- }
-
- g_free (physical_path);
-
- xmlFreeDoc (doc);
- return TRUE;
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- ELocalFolder *local_folder;
- ELocalFolderPrivate *priv;
-
- local_folder = E_LOCAL_FOLDER (object);
- priv = local_folder->priv;
-
- g_hash_table_foreach (priv->language_id_to_i18n_info,
- language_id_to_i18n_info_hash_foreach_free,
- NULL);
- g_hash_table_destroy (priv->language_id_to_i18n_info);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (ELocalFolderClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(e_folder_get_type ());
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- setup_global_language_id ();
-}
-
-static void
-init (ELocalFolder *local_folder)
-{
- ELocalFolderPrivate *priv;
-
- priv = g_new (ELocalFolderPrivate, 1);
- priv->language_id_to_i18n_info = g_hash_table_new (g_str_hash, g_str_equal);
-
- local_folder->priv = priv;
-}
-
-
-void
-e_local_folder_construct (ELocalFolder *local_folder,
- const char *name,
- const char *type,
- const char *description)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- g_return_if_fail (local_folder != NULL);
- g_return_if_fail (E_IS_LOCAL_FOLDER (local_folder));
- g_return_if_fail (name != NULL);
- g_return_if_fail (type != NULL);
-
- priv = local_folder->priv;
-
- e_folder_construct (E_FOLDER (local_folder), name, type, description);
-
- i18n_info = i18n_info_new ("C", name, description);
- add_i18n_info_to_hash (priv->language_id_to_i18n_info, i18n_info);
-}
-
-EFolder *
-e_local_folder_new (const char *name,
- const char *type,
- const char *description)
-{
- ELocalFolder *local_folder;
-
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (type != NULL, NULL);
-
- local_folder = g_object_new (e_local_folder_get_type (), NULL);
-
- e_local_folder_construct (local_folder, name, type, description);
-
- return E_FOLDER (local_folder);
-}
-
-EFolder *
-e_local_folder_new_from_path (const char *path)
-{
- EFolder *folder;
-
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- folder = g_object_new (e_local_folder_get_type (), NULL);
-
- if (! construct_loading_metadata (E_LOCAL_FOLDER (folder), path)) {
- g_object_unref (folder);
- return NULL;
- }
-
- return folder;
-}
-
-gboolean
-e_local_folder_save (ELocalFolder *local_folder)
-{
- g_return_val_if_fail (local_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_LOCAL_FOLDER (local_folder), FALSE);
- g_return_val_if_fail (e_folder_get_physical_uri (E_FOLDER (local_folder)) != NULL, FALSE);
-
- return save_metadata (local_folder);
-}
-
-
-/**
- * e_local_folder_add_i18n_info:
- * @local_folder: A pointer to an ELocalFolder object
- * @language_id: An I1I8N locale ID
- * @name: Name for @local_folder in the specified @language_id
- * @description: Description for @local_folder in the specified @language_id
- *
- * Set the @name and @description for the specified @language_id locale.
- **/
-void
-e_local_folder_add_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char *name,
- const char *description)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *info;
-
- g_return_if_fail (local_folder != NULL);
- g_return_if_fail (E_IS_LOCAL_FOLDER (local_folder));
- g_return_if_fail (language_id != NULL);
- g_return_if_fail (name != NULL || description != NULL);
-
- priv = local_folder->priv;
-
- info = i18n_info_new (language_id, name, description);
- add_i18n_info_to_hash (priv->language_id_to_i18n_info, info);
-
- update_for_global_locale (local_folder);
-}
-
-/**
- * e_local_folder_get_i18n_info:
- * @local_folder: A pointer to an ELocalFolder object
- * @language_id: The ID of the language whose locale we want to retrieve name
- * and description for
- * @language_id_return: The actual locale ID that the name and description are
- * saved under (e.g. if you ask for an "en_UK@yadda", we might give you the
- * info for just "en")
- * @name_return: A pointer to a pointer that will point to the i18nized name on
- * return. Can be NULL.
- * @description_return: A pointer to a pointer that will point to the i18n
- * description on return. Can be NULL.
- *
- * Retrieve the name and description for @local_folder in the specified locale.
- *
- * Return value: %TRUE if some info is found for that @language_id, %FALSE
- * otherwise.
- **/
-gboolean
-e_local_folder_get_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char **language_id_return,
- const char **name_return,
- const char **description_return)
-{
- ELocalFolderPrivate *priv;
- I18nInfo *i18n_info;
-
- g_return_val_if_fail (local_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_LOCAL_FOLDER (local_folder), FALSE);
- g_return_val_if_fail (language_id != NULL, FALSE);
-
- priv = local_folder->priv;
-
- i18n_info = get_i18n_info_for_language (local_folder, language_id);
-
- if (i18n_info == NULL) {
- if (language_id_return != NULL)
- *language_id_return = NULL;
- if (name_return != NULL)
- *name_return = NULL;
- if (description_return != NULL)
- *description_return = NULL;
-
- return FALSE;
- }
-
- if (language_id_return != NULL)
- *language_id_return = i18n_info->language_id;
- if (name_return != NULL)
- *name_return = i18n_info->name;
- if (description_return != NULL)
- *description_return = i18n_info->description;
-
- return TRUE;
-}
-
-
-E_MAKE_TYPE (e_local_folder, "ELocalFolder", ELocalFolder, class_init, init, PARENT_TYPE)
diff --git a/shell/e-local-folder.h b/shell/e-local-folder.h
deleted file mode 100644
index ca3cf6c364..0000000000
--- a/shell/e-local-folder.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-folder.h
- *
- * Copyright (C) 2000, 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
- */
-
-#ifndef _E_LOCAL_FOLDER_H_
-#define _E_LOCAL_FOLDER_H_
-
-#include <gtk/gtkobject.h>
-
-#include "e-folder.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_LOCAL_FOLDER (e_local_folder_get_type ())
-#define E_LOCAL_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_FOLDER, ELocalFolder))
-#define E_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_FOLDER, ELocalFolderClass))
-#define E_IS_LOCAL_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_FOLDER))
-#define E_IS_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_FOLDER))
-
-#define E_LOCAL_FOLDER_METADATA_FILE_NAME "folder-metadata.xml"
-#define E_LOCAL_FOLDER_METADATA_FILE_NAME_LEN 19
-
-typedef struct _ELocalFolder ELocalFolder;
-typedef struct _ELocalFolderClass ELocalFolderClass;
-typedef struct _ELocalFolderPrivate ELocalFolderPrivate;
-
-struct _ELocalFolder {
- EFolder parent;
-
- ELocalFolderPrivate *priv;
-};
-
-struct _ELocalFolderClass {
- EFolderClass parent_class;
-};
-
-
-GtkType e_local_folder_get_type (void);
-void e_local_folder_construct (ELocalFolder *local_folder,
- const char *name,
- const char *type,
- const char *description);
-EFolder *e_local_folder_new (const char *name,
- const char *type,
- const char *description);
-EFolder *e_local_folder_new_from_path (const char *physical_path);
-gboolean e_local_folder_save (ELocalFolder *local_folder);
-
-void e_local_folder_add_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char *name,
- const char *description);
-gboolean e_local_folder_get_i18n_info (ELocalFolder *local_folder,
- const char *language_id,
- const char **language_id_return,
- const char **name_return,
- const char **description_return);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_LOCAL_FOLDER_H__ */
diff --git a/shell/e-local-storage.c b/shell/e-local-storage.c
deleted file mode 100644
index 01009cb805..0000000000
--- a/shell/e-local-storage.c
+++ /dev/null
@@ -1,1237 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-storage.c
- *
- * Copyright (C) 2000, 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
- */
-
-/* FIXMEs:
- *
- * - If we have `.' or `..' as path elements, we lose.
- *
- * - If the LocalStorage is destroyed and an async operation on a shell component is
- * pending, we get a callback on a bogus object. We need support for cancelling
- * operations on the shell component.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <dirent.h>
-
-#include <gtk/gtksignal.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <libgnome/gnome-util.h>
-
-#include <gal/util/e-util.h>
-
-#include "e-util/e-path.h"
-#include "e-local-folder.h"
-#include "e-shell-constants.h"
-
-#include "evolution-storage.h"
-
-#include "e-local-storage.h"
-
-#include <bonobo/bonobo-exception.h>
-
-#define PARENT_TYPE E_TYPE_STORAGE
-static EStorageClass *parent_class = NULL;
-
-struct _ELocalStoragePrivate {
- EFolderTypeRegistry *folder_type_registry;
- char *base_path;
- EvolutionStorage *bonobo_interface;
-};
-
-
-/* EStorageResult <-> errno mapping. */
-
-static EStorageResult
-errno_to_storage_result (void)
-{
- EStorageResult storage_result;
-
- switch (errno) {
- case EACCES:
- case EROFS:
- storage_result = E_STORAGE_PERMISSIONDENIED;
- break;
- case EEXIST:
- storage_result = E_STORAGE_EXISTS;
- break;
- case ENOSPC:
- storage_result = E_STORAGE_NOSPACE;
- break;
- default:
- storage_result = E_STORAGE_GENERICERROR;
- }
-
- return storage_result;
-}
-
-static EStorageResult
-shell_component_result_to_storage_result (EvolutionShellComponentResult result)
-{
- /* FIXME: Maybe we need better mapping here. */
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_OK:
- return E_STORAGE_OK;
- case EVOLUTION_SHELL_COMPONENT_NOTFOUND:
- return E_STORAGE_NOTFOUND;
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE:
- return E_STORAGE_UNSUPPORTEDTYPE;
- case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION:
- return E_STORAGE_UNSUPPORTEDOPERATION;
- case EVOLUTION_SHELL_COMPONENT_EXISTS:
- return E_STORAGE_EXISTS;
- case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED:
- case EVOLUTION_SHELL_COMPONENT_BUSY:
- case EVOLUTION_SHELL_COMPONENT_CORBAERROR:
- case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS:
- case EVOLUTION_SHELL_COMPONENT_INTERNALERROR:
- case EVOLUTION_SHELL_COMPONENT_INTERRUPTED:
- case EVOLUTION_SHELL_COMPONENT_INVALIDARG:
- case EVOLUTION_SHELL_COMPONENT_INVALIDURI:
- case EVOLUTION_SHELL_COMPONENT_NOSPACE:
- case EVOLUTION_SHELL_COMPONENT_NOTOWNED:
- case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR:
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-/* Utility functions. */
-
-static void
-new_folder (ELocalStorage *local_storage,
- const char *path,
- EFolder *folder)
-{
- ELocalStoragePrivate *priv;
-
- priv = local_storage->priv;
-
- e_storage_new_folder (E_STORAGE (local_storage), path, folder);
-
- evolution_storage_new_folder (EVOLUTION_STORAGE (priv->bonobo_interface),
- path,
- e_folder_get_name (folder),
- e_folder_get_type_string (folder),
- e_folder_get_physical_uri (folder),
- e_folder_get_description (folder),
- e_folder_get_custom_icon_name (folder),
- e_folder_get_unread_count (folder),
- FALSE,
- 0);
-}
-
-static gboolean
-setup_folder_as_stock (ELocalStorage *local_storage,
- const char *path,
- const char *name,
- const char *custom_icon_name)
-{
- EFolder *folder;
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
- if (folder == NULL)
- return FALSE;
-
- e_folder_set_name (folder, name);
- e_folder_set_is_stock (folder, TRUE);
- e_folder_set_custom_icon (folder, custom_icon_name);
-
- return TRUE;
-}
-
-static void
-setup_stock_folders (ELocalStorage *local_storage)
-{
- setup_folder_as_stock (local_storage, "/Calendar", _("Calendar"), NULL);
- setup_folder_as_stock (local_storage, "/Contacts", _("Contacts"), NULL);
- setup_folder_as_stock (local_storage, "/Drafts", _("Drafts"), NULL);
- setup_folder_as_stock (local_storage, "/Inbox", _("Inbox"), "inbox");
- setup_folder_as_stock (local_storage, "/Outbox", _("Outbox"), "outbox");
- setup_folder_as_stock (local_storage, "/Sent", _("Sent"), NULL);
- setup_folder_as_stock (local_storage, "/Tasks", _("Tasks"), NULL);
- setup_folder_as_stock (local_storage, "/Trash", _("Trash"), NULL);
- setup_folder_as_stock (local_storage, "/Spam", _("Spam"), NULL);
-}
-
-static gboolean
-load_folder (const char *physical_path,
- const char *path,
- void *data)
-{
- ELocalStorage *local_storage;
- EFolder *folder;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- folder = e_local_folder_new_from_path (physical_path);
- if (folder == NULL) {
- /* g_warning ("No folder metadata in %s... ignoring", physical_path); FIXME */
- return TRUE;
- }
-
- e_storage_new_folder ((EStorage *)local_storage, path, folder);
- return TRUE;
-}
-
-static void
-setup_corba_storage (ELocalStorage *local_storage,
- const char *path)
-{
- GList *subfolder_paths;
- EFolder *folder;
- GList *p;
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
-
- if (folder != NULL)
- evolution_storage_new_folder (EVOLUTION_STORAGE (local_storage->priv->bonobo_interface),
- path,
- e_folder_get_name (folder),
- e_folder_get_type_string (folder),
- e_folder_get_physical_uri (folder),
- e_folder_get_description (folder),
- e_folder_get_custom_icon_name (folder),
- e_folder_get_unread_count (folder),
- FALSE,
- 0);
-
- subfolder_paths = e_storage_get_subfolder_paths (E_STORAGE (local_storage), path);
-
- for (p = subfolder_paths; p != NULL; p = p->next)
- setup_corba_storage (local_storage, (const char *) p->data);
-
- e_free_string_list (subfolder_paths);
-}
-
-static gboolean
-load_all_folders (ELocalStorage *local_storage)
-{
- const char *base_path;
-
- base_path = e_local_storage_get_base_path (local_storage);
-
- /* Ignore errors, so we set up the local storage even if there is stale
- data that we don't understand in ~/evolution. */
- e_path_find_folders (base_path, load_folder, local_storage);
-
- setup_stock_folders (local_storage);
-
- setup_corba_storage (local_storage, "/");
-
- return TRUE;
-}
-
-static EStorageResult
-storage_result_from_component_result (EvolutionShellComponentResult result)
-{
- switch (result) {
- case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED:
- return E_STORAGE_PERMISSIONDENIED;
- case EVOLUTION_SHELL_COMPONENT_NOSPACE:
- return E_STORAGE_NOSPACE;
- default:
- return E_STORAGE_GENERICERROR;
- }
-}
-
-
-/* Callbacks for the async methods invoked on the `Evolution::ShellComponent's. */
-
-static void
-notify_listener (const Bonobo_Listener listener,
- EStorageResult result,
- const char *physical_path)
-{
- CORBA_any any;
- GNOME_Evolution_Storage_FolderResult folder_result;
- CORBA_Environment ev;
-
- folder_result.result = result;
- folder_result.path = CORBA_string_dup (physical_path ? physical_path : "");
- any._type = TC_GNOME_Evolution_Storage_FolderResult;
- any._value = &folder_result;
-
- CORBA_exception_init (&ev);
- Bonobo_Listener_event (listener, "evolution-shell:folder_created",
- &any, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning ("Exception notifing listener: %s\n",
- CORBA_exception_id (&ev));
- }
- CORBA_exception_free (&ev);
-}
-
-struct _AsyncCreateFolderCallbackData {
- EStorage *storage;
- Bonobo_Listener listener;
-
- char *path;
- char *display_name;
- char *type;
- char *description;
- char *physical_uri;
- char *physical_path;
-
- EStorageResultCallback callback;
- void *callback_data;
-};
-typedef struct _AsyncCreateFolderCallbackData AsyncCreateFolderCallbackData;
-
-static void
-component_async_create_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data)
-{
- AsyncCreateFolderCallbackData *callback_data;
- EStorageResult storage_result;
-
- callback_data = (AsyncCreateFolderCallbackData *) data;
-
- storage_result = shell_component_result_to_storage_result (result);
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- /* XXX: This assumes the component won't leave any files in the directory. */
- rmdir (callback_data->physical_path);
- } else {
- EFolder *folder;
-
- folder = e_local_folder_new (callback_data->display_name,
- callback_data->type,
- callback_data->description);
-
- e_folder_set_physical_uri (folder, callback_data->physical_uri);
-
- if (e_local_folder_save (E_LOCAL_FOLDER (folder))) {
- new_folder (E_LOCAL_STORAGE (callback_data->storage),
- callback_data->path, folder);
- } else {
- rmdir (callback_data->physical_path);
- g_object_unref (folder);
- storage_result = E_STORAGE_IOERROR;
- }
- }
-
- g_object_unref (shell_component_client);
-
- if (callback_data->listener != CORBA_OBJECT_NIL)
- notify_listener (callback_data->listener, storage_result,
- callback_data->physical_path);
-
- if (callback_data->callback != NULL)
- (* callback_data->callback) (callback_data->storage,
- storage_result,
- callback_data->callback_data);
-
- g_free (callback_data->path);
- g_free (callback_data->display_name);
- g_free (callback_data->type);
- g_free (callback_data->description);
- g_free (callback_data->physical_uri);
- g_free (callback_data->physical_path);
- g_free (callback_data);
-}
-
-
-/* Implementation for the folder operations. */
-
-static EStorageResult
-create_folder_directory (ELocalStorage *local_storage,
- const char *path,
- const char *type,
- const char *description,
- char **physical_path_return)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- char *parent_path;
- char *physical_path;
-
- storage = E_STORAGE (local_storage);
- priv = local_storage->priv;
-
- *physical_path_return = NULL;
- g_assert (g_path_is_absolute (path));
-
- parent_path = g_path_get_dirname(path);
-
- if (strlen(parent_path) > 1) {
- char *subfolders_directory_physical_path;
- char *parent;
-
- /* Create the `subfolders' subdirectory under the parent. */
- parent = g_strdup_printf ("%s/", parent_path);
- subfolders_directory_physical_path = e_path_to_physical (priv->base_path, parent);
-
- if (mkdir (subfolders_directory_physical_path, 0700) == -1 && errno != EEXIST) {
- g_free (subfolders_directory_physical_path);
- g_free (parent);
- return errno_to_storage_result ();
- }
-
- g_free (subfolders_directory_physical_path);
- g_free (parent);
- }
-
- g_free (parent_path);
-
- physical_path = e_path_to_physical (priv->base_path, path);
-
- /* Create the directory that holds the folder. */
-
- *physical_path_return = physical_path;
- if (mkdir (physical_path, 0700) == -1) {
- return errno_to_storage_result ();
- }
-
- return E_STORAGE_OK;
-}
-
-static void
-create_folder (ELocalStorage *local_storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- EvolutionShellComponentClient *component_client;
- AsyncCreateFolderCallbackData *callback_data;
- EStorageResult result;
- char *folder_name;
- char *physical_path;
- char *physical_uri;
-
- storage = E_STORAGE (local_storage);
- priv = local_storage->priv;
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- type);
- if (component_client == NULL) {
- if (listener != CORBA_OBJECT_NIL)
- notify_listener (listener, E_STORAGE_INVALIDTYPE, NULL);
- if (callback != NULL)
- (* callback) (storage, E_STORAGE_INVALIDTYPE, data);
- return;
- }
-
- g_assert (g_path_is_absolute (path));
-
- result = create_folder_directory (local_storage, path, type, description, &physical_path);
- if (result != E_STORAGE_OK) {
- if (callback != NULL)
- (* callback) (storage, result, data);
- if (listener != CORBA_OBJECT_NIL)
- notify_listener (listener, result, NULL);
-
- g_free (physical_path);
- return;
- }
-
- folder_name = g_path_get_basename (path);
-
- /* Finally tell the component to do the job of creating the physical files in it. */
-
- /* FIXME: We should put the operations on a queue so that we can cancel them when
- the ELocalStorage is destroyed. */
-
- physical_uri = g_strconcat ("file://", physical_path, NULL);
-
- callback_data = g_new (AsyncCreateFolderCallbackData, 1);
- callback_data->storage = E_STORAGE (local_storage);
- callback_data->path = g_strdup (path);
- callback_data->display_name = g_strdup (folder_name);
- callback_data->type = g_strdup (type);
- callback_data->description = g_strdup (description);
- callback_data->physical_uri = physical_uri;
- callback_data->physical_path = physical_path;
- callback_data->listener = listener;
- callback_data->callback = callback;
- callback_data->callback_data = data;
-
- g_object_ref (component_client);
-
- evolution_shell_component_client_async_create_folder (component_client,
- physical_uri,
- type,
- component_async_create_folder_callback,
- callback_data);
-
- g_free (folder_name);
-}
-
-struct _AsyncRemoveFolderCallbackData {
- EStorage *storage;
- GList *next_paths_to_delete;
-};
-typedef struct _AsyncRemoveFolderCallbackData AsyncRemoveFolderCallbackData;
-
-static EStorageResult
-remove_folder_directory (ELocalStorage *local_storage,
- const char *path)
-{
- EStorage *storage;
- ELocalStoragePrivate *priv;
- char *folder_name;
- char *file_name;
- char *physical_path;
-
- priv = local_storage->priv;
-
- storage = E_STORAGE (local_storage);
- folder_name = g_path_get_basename (path);
-
- /* Delete the metadata file associated with this folder. */
- physical_path = e_path_to_physical (priv->base_path, path);
- file_name = g_build_filename (physical_path, E_LOCAL_FOLDER_METADATA_FILE_NAME, NULL);
- unlink (file_name);
- g_free (file_name);
-
- /* Delete the physical directory. */
- if (rmdir (physical_path) == -1) {
- g_free (physical_path);
- g_free (folder_name);
- return E_STORAGE_GENERICERROR;
- }
-
- g_free (physical_path);
-
- /* Delete the 'subfolders' directory that this folder lies in */
- if (folder_name != path + 1) {
- char *subfolders_directory_physical_path;
- char *parent_path;
-
- parent_path = g_strndup (path, strlen (path) - strlen (folder_name));
- subfolders_directory_physical_path = e_path_to_physical (priv->base_path, parent_path);
- g_free (parent_path);
-
- rmdir (subfolders_directory_physical_path);
- g_free (subfolders_directory_physical_path);
- }
-
- g_free (folder_name);
- return E_STORAGE_OK;
-}
-
-static gboolean remove_folder_step (AsyncRemoveFolderCallbackData *callback_data);
-
-static void
-component_async_remove_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data)
-{
- ELocalStoragePrivate *priv;
- AsyncRemoveFolderCallbackData *callback_data;
- EStorageResult storage_result;
- gboolean success;
- const char *path;
-
- callback_data = (AsyncRemoveFolderCallbackData *) data;
- priv = E_LOCAL_STORAGE (callback_data->storage)->priv;
- path = (const char *) callback_data->next_paths_to_delete->data;
-
- storage_result = shell_component_result_to_storage_result (result);
-
- if (result == EVOLUTION_SHELL_COMPONENT_OK) {
- result = remove_folder_directory (E_LOCAL_STORAGE (callback_data->storage), path);
- e_storage_removed_folder (E_STORAGE (callback_data->storage), path);
- evolution_storage_removed_folder (EVOLUTION_STORAGE (priv->bonobo_interface), path);
- } else {
- /* FIXME: Handle errors. */
- g_print ("...Error removing %s!\n", path);
- }
-
- g_object_unref (shell_component_client);
-
- /* Now go on and delete the next subfolder in the list that still
- exists, deallocating the elements in the list in the process. */
- do {
- char *path;
-
- path = callback_data->next_paths_to_delete->data;
- g_free (path);
-
- callback_data->next_paths_to_delete
- = g_list_remove_link (callback_data->next_paths_to_delete,
- callback_data->next_paths_to_delete);
-
- /* Check if we are done. */
- if (callback_data->next_paths_to_delete == NULL) {
- g_free (callback_data);
- return;
- }
-
- /* Remove the folder; if the folder has disappeared from the
- tree for some reason (this is an async callback!), just go
- on with the next one. */
- success = remove_folder_step (callback_data);
- } while (! success);
-}
-
-static gboolean
-remove_folder_step (AsyncRemoveFolderCallbackData *callback_data)
-{
- EvolutionShellComponentClient *client;
- ELocalStoragePrivate *priv;
- EFolder *folder;
- const char *path;
- const char *type;
- char *physical_path;
- char *physical_uri;
-
- g_assert (callback_data->next_paths_to_delete != NULL);
- path = (const char *) callback_data->next_paths_to_delete->data;
-
- folder = e_storage_get_folder (callback_data->storage, path);
- if (folder == NULL)
- return FALSE;
-
- priv = E_LOCAL_STORAGE (callback_data->storage)->priv;
-
- physical_path = e_path_to_physical (priv->base_path, path);
- physical_uri = g_strconcat ("file://", physical_path, NULL);
-
- type = e_folder_get_type_string (folder);
- client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry, type);
-
- g_object_ref (client);
-
- evolution_shell_component_client_async_remove_folder (client, physical_uri, type,
- component_async_remove_folder_callback,
- callback_data);
-
- g_free (physical_path);
- g_free (physical_uri);
-
- return TRUE;
-}
-
-static GList *
-create_subfolder_list (ELocalStorage *local_storage,
- const char *path)
-{
- GList *subfolders;
- GList *list;
- GList *p;
-
- subfolders = e_storage_get_subfolder_paths (E_STORAGE (local_storage), path);
-
- list = NULL;
- for (p = subfolders; p != NULL; p = p->next) {
- char *path;
-
- path = (char *) p->data;
-
- list = g_list_concat (list, create_subfolder_list (local_storage, path));
- list = g_list_append (list, path);
- }
-
- g_list_free (subfolders);
-
- return list;
-}
-
-static EStorageResult
-remove_folder (ELocalStorage *local_storage,
- const char *path)
-{
- ELocalStoragePrivate *priv;
- EStorage *storage;
- AsyncRemoveFolderCallbackData *callback_data;
- EvolutionShellComponentClient *component_client;
- EFolder *folder;
- GList *next_paths_to_delete;
-
- priv = local_storage->priv;
-
- storage = E_STORAGE (local_storage);
- folder = e_storage_get_folder (storage, path);
-
- if (e_folder_get_is_stock (folder))
- return E_STORAGE_CANTCHANGESTOCKFOLDER;
-
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- e_folder_get_type_string (folder));
- if (component_client == NULL)
- return E_STORAGE_INVALIDTYPE;
-
- next_paths_to_delete = create_subfolder_list (E_LOCAL_STORAGE (storage), path);
- next_paths_to_delete = g_list_append (next_paths_to_delete, g_strdup (path));
-
- callback_data = g_new (AsyncRemoveFolderCallbackData, 1);
- callback_data->storage = E_STORAGE (local_storage);
- callback_data->next_paths_to_delete = next_paths_to_delete;
-
- if (! remove_folder_step (callback_data)) {
- /* Eek, something wacky happened. */
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- }
-
- return EVOLUTION_SHELL_COMPONENT_OK;
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
- CORBA_Environment ev;
-
- local_storage = E_LOCAL_STORAGE (object);
- priv = local_storage->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->folder_type_registry != NULL) {
- g_object_unref (priv->folder_type_registry);
- priv->folder_type_registry = NULL;
- }
-
- if (priv->bonobo_interface != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->bonobo_interface));
- priv->bonobo_interface = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
-
- local_storage = E_LOCAL_STORAGE (object);
- priv = local_storage->priv;
-
- g_free (priv->base_path);
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Creating folders. */
-
-static void
-impl_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (storage);
-
- create_folder (local_storage, CORBA_OBJECT_NIL, path, type, description, callback, data);
-}
-
-
-/* Removing folders. */
-
-static void
-impl_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- ELocalStorage *local_storage;
- EStorageResult result;
-
- local_storage = E_LOCAL_STORAGE (storage);
-
- result = remove_folder (local_storage, path);
-
- if (callback != NULL)
- (* callback) (E_STORAGE (local_storage), result, data);
-}
-
-
-
-/* Transferring folders. */
-
-struct _XferItem {
- char *source_path;
- char *destination_path;
-};
-typedef struct _XferItem XferItem;
-
-static XferItem *
-xfer_item_new (char *source_path,
- char *destination_path)
-{
- XferItem *new;
-
- new = g_new (XferItem, 1);
- new->source_path = source_path;
- new->destination_path = destination_path;
-
- return new;
-}
-
-static void
-xfer_item_free (XferItem *item)
-{
- g_free (item->source_path);
- g_free (item->destination_path);
- g_free (item);
-}
-
-static void
-append_xfer_item_list (EStorage *storage,
- char *source_path,
- char *destination_path,
- GList **list)
-{
- GList *subfolders;
- GList *p;
-
- *list = g_list_prepend (*list, xfer_item_new (source_path, destination_path));
-
- subfolders = e_storage_get_subfolder_paths (storage, source_path);
- for (p = subfolders; p != NULL; p = p->next) {
- char *base_name;
- char *source_subpath;
- char *destination_subpath;
-
- source_subpath = g_strdup ((const char *) p->data);
- base_name = g_path_get_basename (source_subpath);
- destination_subpath = g_build_filename (destination_path, base_name, NULL);
- append_xfer_item_list (storage, source_subpath, destination_subpath, list);
- g_free (base_name);
- }
-
- e_free_string_list (subfolders);
-}
-
-struct _XferData {
- /* The storage on which we are performing the xfer operation. */
- ELocalStorage *local_storage;
-
- /* List of source/destination path couples to copy, in the right
- order. */
- GList *folder_items;
-
- /* Pointer into `folder_items'. The folder item pointed by this is the
- one handled by the previous CORBA invocation. */
- GList *current_folder_item;
-
- /* Whether we want to remove the source too. */
- gboolean remove_source;
-
- /* The callback, with its data. */
- EStorageResultCallback callback;
- void *callback_data;
-};
-typedef struct _XferData XferData;
-
-static void
-async_xfer_folder_step (ELocalStorage *local_storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EvolutionShellComponentClientCallback component_client_callback,
- void *component_client_callback_data)
-{
- ELocalStoragePrivate *priv;
- EFolder *source_folder;
- EvolutionShellComponentClient *component_client;
- char *physical_path;
- char *physical_uri;
-
- priv = local_storage->priv;
-
- source_folder = e_storage_get_folder (E_STORAGE (local_storage), source_path);
- g_assert (source_folder != NULL);
-
- create_folder_directory (local_storage, destination_path,
- e_folder_get_type_string (source_folder),
- e_folder_get_description (source_folder),
- &physical_path);
-
- physical_uri = g_strconcat ("file://", physical_path, NULL);
- g_free (physical_path);
-
- component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry,
- e_folder_get_type_string (source_folder));
- g_assert (component_client != NULL);
-
- evolution_shell_component_client_async_xfer_folder (component_client,
- e_folder_get_physical_uri (source_folder),
- physical_uri,
- e_folder_get_type_string (source_folder),
- remove_source,
- component_client_callback,
- component_client_callback_data);
- g_free (physical_uri);
-}
-
-static void
-async_xfer_folder_complete (XferData *xfer_data,
- gboolean success)
-{
- ELocalStorage *local_storage;
- GList *p;
-
- local_storage = xfer_data->local_storage;
-
- if (success && xfer_data->remove_source) {
- EStorageResult result;
-
- /* Remove all the source physical directories, and also the
- corresponding folders from the folder tree. */
-
- for (p = g_list_last (xfer_data->folder_items); p != NULL; p = p->prev) {
- XferItem *item;
-
- item = (XferItem *) p->data;
-
- result = remove_folder_directory (local_storage, item->source_path);
-
- /* FIXME handle failure differently? This should be n
- unlikely situation. */
- if (result == E_STORAGE_OK) {
- e_storage_removed_folder (E_STORAGE (local_storage), item->source_path);
-
- evolution_storage_removed_folder (EVOLUTION_STORAGE (local_storage->priv->bonobo_interface),
- item->source_path);
- }
- }
- }
-
- /* Free the data. */
-
- for (p = xfer_data->folder_items; p != NULL; p = p->next) {
- XferItem *item;
-
- item = (XferItem *) p->data;
- xfer_item_free (item);
- }
- g_list_free (xfer_data->folder_items);
-
- g_free (xfer_data);
-}
-
-static void
-async_xfer_folder_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *callback_data)
-{
- XferData *xfer_data;
- XferItem *item;
- EFolder *source_folder;
- EFolder *destination_folder;
- char *dest_physical_path;
- char *new_physical_uri;
-
- xfer_data = (XferData *) callback_data;
-
- item = (XferItem *) xfer_data->current_folder_item->data;
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- (* xfer_data->callback) (E_STORAGE (xfer_data->local_storage),
- storage_result_from_component_result (result),
- xfer_data->callback_data);
- async_xfer_folder_complete (xfer_data, FALSE);
- return;
- }
-
- source_folder = e_storage_get_folder (E_STORAGE (xfer_data->local_storage), item->source_path);
- destination_folder = e_local_folder_new (e_folder_get_name (source_folder),
- e_folder_get_type_string (source_folder),
- e_folder_get_description (source_folder));
-
- dest_physical_path = e_path_to_physical (xfer_data->local_storage->priv->base_path, item->destination_path);
- new_physical_uri = g_strconcat ("file://", dest_physical_path, NULL);
- g_free (dest_physical_path);
- e_folder_set_physical_uri (destination_folder, new_physical_uri);
- g_free (new_physical_uri);
-
- e_local_folder_save (E_LOCAL_FOLDER (destination_folder)); /* FIXME check for errors */
- new_folder (xfer_data->local_storage, item->destination_path, destination_folder);
-
- xfer_data->current_folder_item = xfer_data->current_folder_item->next;
- if (xfer_data->current_folder_item == NULL) {
- (* xfer_data->callback) (E_STORAGE (xfer_data->local_storage), E_STORAGE_OK, xfer_data->callback_data);
- async_xfer_folder_complete (xfer_data, TRUE);
- return;
- }
-
- item = (XferItem *) xfer_data->current_folder_item->data;
-
- async_xfer_folder_step (xfer_data->local_storage,
- item->source_path,
- item->destination_path,
- xfer_data->remove_source,
- async_xfer_folder_callback,
- xfer_data);
-}
-
-static void
-impl_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *callback_data)
-{
- ELocalStorage *local_storage;
- ELocalStoragePrivate *priv;
- XferData *xfer_data;
- GList *folder_items; /* <XferItem> */
- XferItem *first_item;
-
- local_storage = E_LOCAL_STORAGE (storage);
- priv = local_storage->priv;
-
- if (remove_source && e_folder_get_is_stock (e_storage_get_folder (storage, source_path))) {
- (* callback) (storage, E_STORAGE_CANTCHANGESTOCKFOLDER, callback_data);
- return;
- }
-
- folder_items = NULL;
- append_xfer_item_list (storage, g_strdup (source_path), g_strdup (destination_path), &folder_items);
- folder_items = g_list_reverse (folder_items); /* lame */
-
- xfer_data = g_new (XferData, 1);
- xfer_data->local_storage = local_storage;
- xfer_data->folder_items = folder_items;
- xfer_data->current_folder_item = folder_items;
- xfer_data->remove_source = remove_source;
- xfer_data->callback = callback;
- xfer_data->callback_data = callback_data;
-
- first_item = (XferItem *) xfer_data->folder_items->data;
-
- async_xfer_folder_step (E_LOCAL_STORAGE (storage),
- first_item->source_path,
- first_item->destination_path,
- remove_source,
- async_xfer_folder_callback,
- xfer_data);
-}
-
-
-/* Callbacks for the `Evolution::Storage' interface we are exposing to the outside world. */
-static void
-bonobo_interface_create_folder_cb (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *type,
- const char *description,
- const char *parent_physical_uri,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- create_folder (local_storage, listener, path, type, description, NULL, NULL);
-}
-
-static int
-bonobo_interface_remove_folder_cb (EvolutionStorage *storage,
- const Bonobo_Listener listener,
- const char *path,
- const char *physical_uri,
- void *data)
-{
- ELocalStorage *local_storage;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- return remove_folder (local_storage, path);
-}
-
-static void
-bonobo_interface_update_folder_cb (EvolutionStorage *storage,
- const char *path,
- int unread_count,
- void *data)
-{
- ELocalStorage *local_storage;
- EFolder *folder;
-
- local_storage = E_LOCAL_STORAGE (data);
-
- folder = e_storage_get_folder (E_STORAGE (local_storage), path);
- if (folder == NULL)
- return;
-
- e_folder_set_unread_count (folder, unread_count);
- return;
-}
-
-
-/* Initialization. */
-
-static void
-class_init (ELocalStorageClass *class)
-{
- EStorageClass *storage_class;
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(e_storage_get_type ());
-
- object_class = G_OBJECT_CLASS (class);
- storage_class = E_STORAGE_CLASS (class);
-
- object_class->finalize = impl_finalize;
- object_class->dispose = impl_dispose;
-
- storage_class->async_create_folder = impl_async_create_folder;
- storage_class->async_remove_folder = impl_async_remove_folder;
- storage_class->async_xfer_folder = impl_async_xfer_folder;
-}
-
-static void
-init (ELocalStorage *local_storage)
-{
- ELocalStoragePrivate *priv;
-
- priv = g_new (ELocalStoragePrivate, 1);
-
- priv->base_path = NULL;
- priv->folder_type_registry = NULL;
- priv->bonobo_interface = NULL;
-
- local_storage->priv = priv;
-}
-
-
-static gboolean
-construct (ELocalStorage *local_storage,
- EFolderTypeRegistry *folder_type_registry,
- const char *base_path)
-{
- ELocalStoragePrivate *priv;
- EFolder *root_folder;
- int base_path_len;
- char *uri;
-
- root_folder = e_folder_new (_("Local Folders"), "noselect", "");
- uri = g_strdup_printf("file://%s;noselect", base_path);
- e_folder_set_physical_uri(root_folder, uri);
- g_free(uri);
- e_storage_construct (E_STORAGE (local_storage),
- E_LOCAL_STORAGE_NAME,
- root_folder);
-
- priv = local_storage->priv;
-
- base_path_len = strlen (base_path);
- while (base_path_len > 0 && base_path[base_path_len - 1] == E_PATH_SEPARATOR)
- base_path_len--;
-
- g_return_val_if_fail (base_path_len != 0, FALSE);
-
- g_assert (priv->folder_type_registry == NULL);
- g_object_ref (folder_type_registry);
- priv->folder_type_registry = folder_type_registry;
-
- g_assert (priv->base_path == NULL);
- priv->base_path = g_strndup (base_path, base_path_len);
-
- g_assert (priv->bonobo_interface == NULL);
- priv->bonobo_interface = evolution_storage_new (E_LOCAL_STORAGE_NAME, FALSE);
-
- g_signal_connect (priv->bonobo_interface, "create_folder",
- G_CALLBACK (bonobo_interface_create_folder_cb),
- local_storage);
- g_signal_connect (priv->bonobo_interface, "remove_folder",
- G_CALLBACK (bonobo_interface_remove_folder_cb),
- local_storage);
- g_signal_connect (priv->bonobo_interface, "update_folder",
- G_CALLBACK (bonobo_interface_update_folder_cb),
- local_storage);
-
- return load_all_folders (local_storage);
-}
-
-EStorage *
-e_local_storage_open (EFolderTypeRegistry *folder_type_registry,
- const char *base_path)
-{
- EStorage *new;
-
- g_return_val_if_fail (folder_type_registry != NULL, NULL);
- g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
- g_return_val_if_fail (base_path != NULL, NULL);
-
- new = g_object_new (e_local_storage_get_type (), NULL);
-
- if (! construct (E_LOCAL_STORAGE (new), folder_type_registry, base_path)) {
- g_object_unref (new);
- return NULL;
- }
-
- return new;
-}
-
-const char *
-e_local_storage_get_base_path (ELocalStorage *local_storage)
-{
- g_return_val_if_fail (local_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_LOCAL_STORAGE (local_storage), NULL);
-
- return local_storage->priv->base_path;
-}
-
-
-const GNOME_Evolution_Storage
-e_local_storage_get_corba_interface (ELocalStorage *local_storage)
-{
- ELocalStoragePrivate *priv;
- GNOME_Evolution_Storage corba_interface;
-
- g_return_val_if_fail (local_storage != NULL, NULL);
- g_return_val_if_fail (E_IS_LOCAL_STORAGE (local_storage), NULL);
-
- priv = local_storage->priv;
- corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (priv->bonobo_interface));
-
- return corba_interface;
-}
-
-
-E_MAKE_TYPE (e_local_storage, "ELocalStorage", ELocalStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-local-storage.h b/shell/e-local-storage.h
deleted file mode 100644
index c640c29b70..0000000000
--- a/shell/e-local-storage.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-local-storage.h
- *
- * Copyright (C) 2000, 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
- */
-
-#ifndef _E_LOCAL_STORAGE_H_
-#define _E_LOCAL_STORAGE_H_
-
-#include "e-folder-type-registry.h"
-#include "e-storage.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_LOCAL_STORAGE (e_local_storage_get_type ())
-#define E_LOCAL_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_STORAGE, ELocalStorage))
-#define E_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_STORAGE, ELocalStorageClass))
-#define E_IS_LOCAL_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_STORAGE))
-#define E_IS_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_STORAGE))
-
-typedef struct _ELocalStorage ELocalStorage;
-typedef struct _ELocalStoragePrivate ELocalStoragePrivate;
-typedef struct _ELocalStorageClass ELocalStorageClass;
-
-struct _ELocalStorage {
- EStorage parent;
-
- ELocalStoragePrivate *priv;
-};
-
-struct _ELocalStorageClass {
- EStorageClass parent_class;
-};
-
-
-GtkType e_local_storage_get_type (void);
-
-EStorage *e_local_storage_open (EFolderTypeRegistry *folder_type_registry,
- const char *base_path);
-const char *e_local_storage_get_base_path (ELocalStorage *storage);
-
-const GNOME_Evolution_Storage e_local_storage_get_corba_interface (ELocalStorage *storage);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_LOCAL_STORAGE_H__ */
diff --git a/shell/e-setup.c b/shell/e-setup.c
index b152afb5ac..200528e6b7 100644
--- a/shell/e-setup.c
+++ b/shell/e-setup.c
@@ -27,7 +27,6 @@
#include "e-setup.h"
-#include "e-local-folder.h"
#include "e-shell-constants.h"
#include "e-util/e-dialog-utils.h"
diff --git a/shell/e-shell-folder-selection-dialog.c b/shell/e-shell-folder-selection-dialog.c
deleted file mode 100644
index 0715a1d9ae..0000000000
--- a/shell/e-shell-folder-selection-dialog.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-selection-dialog.c
- *
- * Copyright (C) 2000, 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-folder-selection-dialog.h"
-
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-#include "e-storage-set-view.h"
-#include "e-storage-set.h"
-
-#include "e-shell-folder-creation-dialog.h"
-
-#include <libgnome/gnome-i18n.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkscrolledwindow.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE (gtk_dialog_get_type ())
-static GtkDialogClass *parent_class = NULL;
-
-struct _EShellFolderSelectionDialogPrivate {
- EShell *shell;
- GList *allowed_types;
- EStorageSet *storage_set;
- GtkWidget *storage_set_view;
-
- gboolean allow_creation;
-};
-
-enum {
- FOLDER_SELECTED,
- CANCELLED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum {
- RESPONSE_NEW
-};
-
-
-/* Utility functions. */
-
-static gboolean
-check_folder_type_valid (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
- const char *selected_path;
- EFolder *folder;
- const char *folder_type;
- GList *p;
-
- priv = folder_selection_dialog->priv;
- if (priv->allowed_types == NULL)
- return TRUE;
-
- selected_path = e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog);
- if (selected_path == NULL)
- return FALSE;
-
- folder = e_storage_set_get_folder (priv->storage_set, selected_path);
- if (folder == NULL)
- return FALSE;
-
- folder_type = e_folder_get_type_string (folder);
-
- for (p = priv->allowed_types; p != NULL; p = p->next) {
- const char *type, *slash;
-
- type = (const char *) p->data;
- if (strcmp (folder_type, type) == 0)
- return TRUE;
- slash = strchr (type, '/');
- if (slash && slash[1] == '*' && strncmp (folder_type, type, slash - type) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-set_default_folder (EShellFolderSelectionDialog *shell_folder_selection_dialog,
- const char *default_uri)
-{
- EShellFolderSelectionDialogPrivate *priv;
- char *default_path;
-
- g_assert (default_uri != NULL);
-
- priv = shell_folder_selection_dialog->priv;
-
- if (strncmp (default_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) {
- /* `evolution:' URI. */
- default_path = g_strdup (default_uri + E_SHELL_URI_PREFIX_LEN);
- } else {
- /* Physical URI. */
- default_path = e_storage_set_get_path_for_physical_uri (priv->storage_set,
- default_uri);
- }
-
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view),
- default_path);
-
- g_free (default_path);
-}
-
-
-/* Folder creation dialog callback. */
-
-static void
-folder_creation_dialog_result_cb (EShell *shell,
- EShellFolderCreationDialogResult result,
- const char *path,
- void *data)
-{
- EShellFolderSelectionDialog *dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- dialog = E_SHELL_FOLDER_SELECTION_DIALOG (data);
- priv = dialog->priv;
-
- if (priv == NULL) {
- g_warning ("dialog->priv is NULL, and should not be");
- return;
- }
-
- if (result == E_SHELL_FOLDER_CREATION_DIALOG_RESULT_SUCCESS)
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view),
- path);
-}
-
-
-/* GtkObject methods. */
-
-/* Saves the expanded state of the tree to a common filename */
-static void
-save_expanded_state (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
- char *filename;
-
- priv = folder_selection_dialog->priv;
-
- filename = g_strdup_printf ("%s/config/storage-set-view-expanded:folder-selection-dialog",
- e_shell_get_local_directory (priv->shell));
- e_tree_save_expanded_state (E_TREE (priv->storage_set_view), filename);
- g_free (filename);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- if (priv->storage_set != NULL) {
- save_expanded_state (folder_selection_dialog);
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- if (priv->shell != NULL) {
- g_object_weak_unref (G_OBJECT (priv->shell), (GWeakNotify) gtk_widget_destroy, folder_selection_dialog);
- priv->shell = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (object);
- priv = folder_selection_dialog->priv;
-
- e_free_string_list (priv->allowed_types);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* GtkDialog methods. */
-
-static void
-impl_response (GtkDialog *dialog,
- int response)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
- EShellFolderSelectionDialogPrivate *priv;
- EStorageSetView *storage_set_view;
- const char *default_parent_folder;
- const char *default_subtype;
- char *default_type;
-
- folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (dialog);
- priv = folder_selection_dialog->priv;
-
- switch (response) {
- case GTK_RESPONSE_OK:
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
- break;
-
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- g_signal_emit (folder_selection_dialog, signals[CANCELLED], 0);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- break;
-
- case RESPONSE_NEW:
- storage_set_view = E_STORAGE_SET_VIEW (priv->storage_set_view);
- default_parent_folder = e_storage_set_view_get_current_folder (storage_set_view);
-
- /* The default type in the folder creation dialog will be the
- first of the allowed types. If all types are allowed,
- hardcode to "mail". */
- if (priv->allowed_types == NULL)
- default_type = g_strdup ("mail");
- else {
- default_subtype = (const char *) priv->allowed_types->data;
- default_type = g_strndup (default_subtype,
- strcspn (default_subtype, "/"));
- }
-
- e_shell_show_folder_creation_dialog (priv->shell, GTK_WINDOW (dialog),
- default_parent_folder,
- default_type,
- folder_creation_dialog_result_cb,
- dialog);
- g_free (default_type);
-
- break;
- }
-}
-
-
-/* GTK+ type initialization. */
-
-static void
-class_init (EShellFolderSelectionDialogClass *klass)
-{
- GObjectClass *object_class;
- GtkDialogClass *dialog_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
- object_class = G_OBJECT_CLASS (klass);
- dialog_class = GTK_DIALOG_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- dialog_class->response = impl_response;
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellFolderSelectionDialogClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[CANCELLED]
- = g_signal_new ("cancelled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EShellFolderSelectionDialogClass, cancelled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-static void
-init (EShellFolderSelectionDialog *shell_folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
-
- priv = g_new (EShellFolderSelectionDialogPrivate, 1);
- priv->shell = NULL;
- priv->storage_set = NULL;
- priv->storage_set_view = NULL;
- priv->allowed_types = NULL;
- priv->allow_creation = TRUE;
-
- shell_folder_selection_dialog->priv = priv;
-}
-
-
-/* ETable callbacks. */
-
-static void
-folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellFolderSelectionDialog *dialog;
-
- dialog = E_SHELL_FOLDER_SELECTION_DIALOG (data);
-
- if (check_folder_type_valid (dialog))
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, TRUE);
- else
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE);
-}
-
-static void
-double_click_cb (EStorageSetView *essv,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event,
- EShellFolderSelectionDialog *folder_selection_dialog)
-{
- g_return_if_fail (folder_selection_dialog != NULL);
-
- if (check_folder_type_valid (folder_selection_dialog)) {
- g_signal_emit (folder_selection_dialog, signals[FOLDER_SELECTED], 0,
- e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog));
- gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog));
- }
-}
-
-
-/**
- * e_shell_folder_selection_dialog_construct:
- * @folder_selection_dialog: A folder selection dialog widget
- * @shell: The this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_uri: The URI of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Construct @folder_selection_dialog.
- **/
-void
-e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog,
- EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EShellFolderSelectionDialogPrivate *priv;
- GtkWidget *scrolled_window;
- GtkWidget *caption_label;
- int i;
- char *filename;
-
- g_return_if_fail (folder_selection_dialog != NULL);
- g_return_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog));
- g_return_if_fail (shell != NULL);
- g_return_if_fail (E_IS_SHELL (shell));
-
- priv = folder_selection_dialog->priv;
-
- /* Basic dialog setup. */
-
- gtk_window_set_default_size (GTK_WINDOW (folder_selection_dialog), 350, 300);
- gtk_window_set_modal (GTK_WINDOW (folder_selection_dialog), TRUE);
- gtk_window_set_title (GTK_WINDOW (folder_selection_dialog), title);
- gtk_container_set_border_width (GTK_CONTAINER (folder_selection_dialog), 6);
-
- if (allow_creation)
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_NEW, RESPONSE_NEW,
- NULL);
-
- gtk_dialog_add_buttons (GTK_DIALOG (folder_selection_dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- NULL);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK, FALSE);
- gtk_dialog_set_default_response (GTK_DIALOG (folder_selection_dialog), GTK_RESPONSE_OK);
-
- /* Make sure we get destroyed if the shell gets destroyed. */
-
- priv->shell = shell;
- g_object_weak_ref (G_OBJECT (shell), (GWeakNotify) gtk_widget_destroy, folder_selection_dialog);
-
- /* Set up the label. */
-
- if (caption != NULL) {
- caption_label = gtk_label_new (caption);
- gtk_label_set_justify (GTK_LABEL (caption_label), GTK_JUSTIFY_LEFT);
- gtk_widget_show (caption_label);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- caption_label, FALSE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- 6);
-
-
- }
-
- /* Set up the storage set and its view. */
-
- priv->storage_set = e_shell_get_storage_set (shell);
- g_object_ref (priv->storage_set);
-
- priv->storage_set_view = e_storage_set_create_new_view (priv->storage_set, NULL);
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
- e_storage_set_view_enable_search (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-
- /* Load the expanded state for this StorageSetView */
- filename = g_strdup_printf ("%s/config/storage-set-view-expanded:folder-selection-dialog",
- e_shell_get_local_directory (priv->shell));
-
- e_tree_load_expanded_state (E_TREE (priv->storage_set_view),
- filename);
-
- g_free (filename);
-
- g_signal_connect (priv->storage_set_view, "double_click", G_CALLBACK (double_click_cb), folder_selection_dialog);
- g_signal_connect (priv->storage_set_view, "folder_selected", G_CALLBACK (folder_selected_cb), folder_selection_dialog);
-
- g_assert (priv->allowed_types == NULL);
- if (allowed_types != NULL) {
- for (i = 0; allowed_types[i] != NULL; i++)
- priv->allowed_types = g_list_prepend (priv->allowed_types,
- g_strdup (allowed_types[i]));
-
- /* Preserve the order so we can use the first type listed as
- the default for the folder creation dialog invoked by the
- "New..." button. */
- priv->allowed_types = g_list_reverse (priv->allowed_types);
- }
-
- if (default_uri != NULL)
- set_default_folder (folder_selection_dialog, default_uri);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), priv->storage_set_view);
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox),
- scrolled_window, TRUE, TRUE, 6);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (folder_selection_dialog)->vbox), 6);
-
- gtk_widget_show (priv->storage_set_view);
- gtk_widget_show (scrolled_window);
-
- GTK_WIDGET_SET_FLAGS (priv->storage_set_view, GTK_CAN_FOCUS);
- gtk_widget_grab_focus (priv->storage_set_view);
-}
-
-/**
- * e_shell_folder_selection_dialog_new:
- * @shell: The this folder selection dialog is for
- * @title: Title of the window
- * @caption: A brief text to be put on top of the storage view
- * @default_uri: The URI of the folder to be selected by default
- * @allowed_types: List of the names of the allowed types
- *
- * Create a new folder selection dialog widget. @default_uri can be either an
- * `evolution:' URI or a physical URI (all the non-`evolution:' URIs are
- * considered to be physical URIs).
- *
- * Return value:
- **/
-GtkWidget *
-e_shell_folder_selection_dialog_new (EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation)
-{
- EShellFolderSelectionDialog *folder_selection_dialog;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- folder_selection_dialog = g_object_new (e_shell_folder_selection_dialog_get_type (), NULL);
- e_shell_folder_selection_dialog_construct (folder_selection_dialog, shell,
- title, caption, default_uri, allowed_types,
- allow_creation);
-
- return GTK_WIDGET (folder_selection_dialog);
-}
-
-
-const char *
-e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog)
-{
- EShellFolderSelectionDialogPrivate *priv;
-
- g_return_val_if_fail (folder_selection_dialog != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog), NULL);
-
- priv = folder_selection_dialog->priv;
-
- return e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
-}
-
-
-E_MAKE_TYPE (e_shell_folder_selection_dialog, "EShellFolderSelectionDialog", EShellFolderSelectionDialog,
- class_init, init, PARENT_TYPE)
diff --git a/shell/e-shell-folder-selection-dialog.h b/shell/e-shell-folder-selection-dialog.h
deleted file mode 100644
index 05b1e46281..0000000000
--- a/shell/e-shell-folder-selection-dialog.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-folder-selection-dialog.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef E_SHELL_FOLDER_SELECTION_DIALOG_H
-#define E_SHELL_FOLDER_SELECTION_DIALOG_H
-
-#include <gtk/gtkdialog.h>
-
-#include "e-shell.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define E_TYPE_SHELL_FOLDER_SELECTION_DIALOG (e_shell_folder_selection_dialog_get_type ())
-#define E_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialog))
-#define E_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialogClass))
-#define E_IS_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG))
-#define E_IS_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG))
-
-
-typedef struct _EShellFolderSelectionDialog EShellFolderSelectionDialog;
-typedef struct _EShellFolderSelectionDialogPrivate EShellFolderSelectionDialogPrivate;
-typedef struct _EShellFolderSelectionDialogClass EShellFolderSelectionDialogClass;
-
-struct _EShellFolderSelectionDialog {
- GtkDialog parent;
-
- EShellFolderSelectionDialogPrivate *priv;
-};
-
-struct _EShellFolderSelectionDialogClass {
- GtkDialogClass parent_class;
-
- void (* folder_selected) (EShellFolderSelectionDialog *folder_selection_dialog,
- const char *path);
- void (* cancelled) (EShellFolderSelectionDialog *folder_selection_dialog);
-};
-
-
-GtkType e_shell_folder_selection_dialog_get_type (void);
-void e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog,
- EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation);
-GtkWidget *e_shell_folder_selection_dialog_new (EShell *shell,
- const char *title,
- const char *caption,
- const char *default_uri,
- const char *allowed_types[],
- gboolean allow_creation);
-
-const char *e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* E_SHELL_FOLDER_SELECTION_DIALOG_H */
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
deleted file mode 100644
index ba94aa0ed3..0000000000
--- a/shell/e-shell-view.c
+++ /dev/null
@@ -1,2948 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view.c
- *
- * Copyright (C) 2000, 2001, 2002 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.
- *
- * Authors:
- * Ettore Perazzoli <ettore@ximian.com>
- * Miguel de Icaza <miguel@ximian.com>
- * Matt Loper <matt@ximian.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-shell-view.h"
-
-#include "evolution-shell-view.h"
-
-#include "e-shell-marshal.h"
-
-#include "e-history.h"
-#include "e-icon-factory.h"
-#include "e-shell-constants.h"
-#include "e-shell-folder-title-bar.h"
-#include "e-shell-utils.h"
-#include "e-shell-view-menu.h"
-#include "e-shell.h"
-#include "e-shortcuts-view.h"
-#include "e-storage-set-view.h"
-#include "e-title-bar.h"
-
-#include "e-util/e-gtk-utils.h"
-
-#include "widgets/misc/e-clipped-label.h"
-
-#include <gtk/gtkwidget.h>
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <libgnome/libgnome.h>
-#include <libgnomeui/gnome-window.h>
-#include <libgnomeui/gnome-window-icon.h>
-#include <libgnomeui/gnome-app.h>
-
-#include <gtk/gtkscrolledwindow.h>
-#include <gconf/gconf-client.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-socket.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-ui-container.h>
-#include <bonobo/bonobo-ui-engine.h>
-#include <bonobo/bonobo-widget.h>
-#include <bonobo/bonobo-window.h>
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-
-static BonoboWindowClass *parent_class = NULL;
-
-struct _View {
- char *uri;
- GtkWidget *control;
- EFolder *folder;
-};
-typedef struct _View View;
-
-struct _EShellViewPrivate {
- /* The shell. */
- EShell *shell;
-
- /* EvolutionShellView Bonobo object for implementing the
- Evolution::ShellView interface. */
- GNOME_Evolution_ShellView corba_interface;
-
- /* The UI handler & container. */
- BonoboUIComponent *ui_component;
- BonoboUIContainer *ui_container;
-
- /* History of visited (evolution:) URIs. */
- EHistory *history;
-
- /* Currently displayed URI. */
- char *uri;
-
- /* Delayed selection, used when a path doesn't exist in an EStorage.
- Cleared when we're signaled with "folder_selected". */
- char *delayed_selection;
-
- /* uri to go to at timeout */
- unsigned int set_folder_timeout;
- char *set_folder_uri;
-
- /* Tooltips. */
- GtkTooltips *tooltips;
-
- /* The widgetry. */
- GtkWidget *appbar;
- GtkWidget *hpaned;
- GtkWidget *view_vbox;
- GtkWidget *folder_title_bar;
- GtkWidget *view_hpaned;
- GtkWidget *contents;
- GtkWidget *notebook;
- GtkWidget *shortcut_frame;
- GtkWidget *shortcut_bar;
- GtkWidget *storage_set_title_bar;
- GtkWidget *storage_set_view;
- GtkWidget *storage_set_view_box;
-
- /* The status bar widgetry. */
- GtkWidget *status_bar;
- GtkWidget *offline_toggle;
- GtkWidget *offline_toggle_image;
- GtkWidget *menu_hint_label;
- GtkWidget *task_bar;
-
- /* The pop-up window for the folder-tree (i.e. the one we create when
- the user clicks on the folder title. */
- GtkWidget *folder_bar_popup;
-
- /* The views we have already open. */
- GHashTable *uri_to_view;
-
- /* Position of the handles in the paneds, to be restored when we show elements
- after hiding them. */
- unsigned int hpaned_position;
- unsigned int view_hpaned_position;
-
- /* Whether the shortcut and folder bars are visible or not. */
- unsigned int shortcut_bar_shown : 1;
- unsigned int folder_bar_shown : 1;
-
- /* List of sockets we created. */
- GList *sockets;
-};
-
-enum {
- SHORTCUT_BAR_VISIBILITY_CHANGED,
- FOLDER_BAR_VISIBILITY_CHANGED,
- VIEW_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-#define DEFAULT_SHORTCUT_BAR_WIDTH 100
-
-#define DEFAULT_TREE_WIDTH 130
-#define MIN_POPUP_TREE_WIDTH 130
-
-#define DEFAULT_WIDTH 705
-#define DEFAULT_HEIGHT 550
-
-#define SET_FOLDER_DELAY 250
-
-/* URI to display when the currently displayed folder is removed from the
- storage. */
-#define FALLBACK_URI E_SUMMARY_URI
-
-
-/* The icons for the offline/online status. */
-
-static GdkPixmap *offline_pixmap = NULL;
-static GdkBitmap *offline_mask = NULL;
-
-static GdkPixmap *online_pixmap = NULL;
-static GdkBitmap *online_mask = NULL;
-
-
-static void update_for_current_uri (EShellView *shell_view);
-static void update_offline_toggle_status (EShellView *shell_view);
-static void update_send_receive_sensitivity (EShellView *shell_view);
-static const char *get_storage_set_path_from_uri (const char *uri);
-
-
-/* Boo. */
-static void new_folder_cb (EStorageSet *storage_set, const char *path, void *data);
-static gboolean display_uri (EShellView *shell_view, const char *uri,
- gboolean add_to_history, gboolean queue);
-
-
-/* View handling. */
-
-static View *
-view_new (const char *uri,
- GtkWidget *control)
-{
- View *new;
-
- new = g_new (View, 1);
- new->uri = g_strdup (uri);
- new->control = control;
-
- return new;
-}
-
-static void
-view_destroy (View *view)
-{
- g_free (view->uri);
- g_free (view);
-}
-
-
-/* Utility functions. */
-
-static void
-update_other_users_folder_items_sensitivity (EShellView *shell_view)
-{
- EShellViewPrivate *priv = shell_view->priv;
- gboolean a_storage_supports_shared_folders;
- GList *storage_list, *p;
-
- storage_list = e_storage_set_get_storage_list (e_shell_get_storage_set (priv->shell));
- a_storage_supports_shared_folders = FALSE;
- for (p = storage_list; p != NULL; p = p->next) {
- if (e_storage_supports_shared_folders (E_STORAGE (p->data)))
- a_storage_supports_shared_folders = TRUE;
- }
-
- if (a_storage_supports_shared_folders) {
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
- "sensitive", "1", NULL);
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
- "sensitive", "1", NULL);
- } else {
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
- "sensitive", "0", NULL);
- bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
- "sensitive", "0", NULL);
- }
-
- g_list_foreach (storage_list, (GFunc) g_object_unref, NULL);
- g_list_free (storage_list);
-}
-
-static GtkWidget *
-create_label_for_empty_page (void)
-{
- GtkWidget *label;
-
- label = e_clipped_label_new (_("(No folder displayed)"), PANGO_WEIGHT_NORMAL, 1.0);
- gtk_widget_show (label);
-
- return label;
-}
-
-/* Initialize the icons. */
-static void
-load_images (void)
-{
- GdkPixbuf *pixbuf;
-
- pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "/offline.png", NULL);
- if (pixbuf == NULL) {
- g_warning ("Cannot load `%s'", EVOLUTION_IMAGES "/offline.png");
- } else {
- gdk_pixbuf_render_pixmap_and_mask (pixbuf, &offline_pixmap, &offline_mask, 128);
- g_object_unref (pixbuf);
- }
-
- pixbuf = gdk_pixbuf_new_from_file (EVOLUTION_IMAGES "/online.png", NULL);
- if (pixbuf == NULL) {
- g_warning ("Cannot load `%s'", EVOLUTION_IMAGES "/online.png");
- } else {
- gdk_pixbuf_render_pixmap_and_mask (pixbuf, &online_pixmap, &online_mask, 128);
- g_object_unref (pixbuf);
- }
-}
-
-static void
-cleanup_delayed_selection (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- if (priv->delayed_selection != NULL) {
- g_free (priv->delayed_selection);
- priv->delayed_selection = NULL;
- g_signal_handlers_disconnect_by_func (e_shell_get_storage_set (priv->shell),
- G_CALLBACK (new_folder_cb), shell_view);
- }
-}
-
-static GtkWidget *
-find_socket (GtkContainer *container)
-{
- GList *children, *tmp;
-
- children = gtk_container_get_children(container);
- while (children) {
- if (BONOBO_IS_SOCKET (children->data))
- return children->data;
- else if (GTK_IS_CONTAINER (children->data)) {
- GtkWidget *socket = find_socket (children->data);
- if (socket)
- return socket;
- }
- tmp = children->next;
- g_list_free_1 (children);
- children = tmp;
- }
- return NULL;
-}
-
-static void
-setup_verb_sensitivity_for_folder (EShellView *shell_view,
- const char *path)
-{
- EShellViewPrivate *priv;
- BonoboUIComponent *ui_component;
- EFolder *folder;
- const char *prop;
-
- priv = shell_view->priv;
-
- ui_component = e_shell_view_get_bonobo_ui_component (shell_view);
-
- if (path == NULL)
- folder = NULL;
- else
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- /* Adjust sensitivity for menu options depending on whether the folder
- selected can actually be manipulated or not. */
-
- if (folder != NULL
- && ! e_folder_get_is_stock (folder)
- && e_folder_get_physical_uri (folder) != NULL)
- prop = "1";
- else
- prop = "0";
- bonobo_ui_component_set_prop (ui_component, "/commands/MoveFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/CopyFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/DeleteFolder", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/RenameFolder", "sensitive", prop, NULL);
-
- /* Adjust sensitivity for menu options depending on whether the user
- right-clicked a folder whose contents can be viewed. */
-
- if (folder != NULL
- && e_folder_type_registry_get_handler_for_type (e_shell_get_folder_type_registry (e_shell_view_get_shell (shell_view)),
- e_folder_get_type_string (folder)) != NULL)
- prop = "1";
- else
- prop = "0";
- bonobo_ui_component_set_prop (ui_component, "/commands/ActivateView", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/OpenFolderInNewWindow", "sensitive", prop, NULL);
- bonobo_ui_component_set_prop (ui_component, "/commands/AddFolderToShortcutBar", "sensitive", prop, NULL);
-}
-
-
-static void
-update_navigation_buttons (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- e_shell_folder_title_bar_update_navigation_buttons (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- e_history_has_prev (priv->history),
- e_history_has_next (priv->history));
-}
-
-static int
-history_uri_matching_func (const void *a,
- const void *b)
-{
- const char *s1, *s2;
-
- s1 = (const char *) a;
- s2 = (const char *) b;
-
- return strcmp (s1, s2);
-}
-
-static void
-remove_uri_from_history (EShellView *shell_view,
- const char *uri)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- e_history_remove_matching (priv->history, uri, history_uri_matching_func);
-}
-
-
-static void
-setup_defaults (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EShortcutBar *shortcut_bar;
- GConfClient *client;
- char *file_name;
- int shortcut_group;
- int width;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
- shortcut_bar = E_SHORTCUT_BAR (priv->shortcut_bar);
-
- client = gconf_client_get_default ();
-
- gtk_window_set_default_size (GTK_WINDOW (shell_view),
- gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/width", NULL),
- gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/height", NULL));
-
- shortcut_group = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/selected_shortcut_group", NULL);
- e_shell_view_set_current_shortcuts_group_num (shell_view, shortcut_group);
-
- e_shell_view_show_folder_bar (shell_view,
- gconf_client_get_bool (client, "/apps/evolution/shell/view_defaults/show_folder_bar", NULL));
- e_shell_view_show_shortcut_bar (shell_view,
- gconf_client_get_bool (client, "/apps/evolution/shell/view_defaults/show_shortcut_bar", NULL));
-
- width = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width", NULL);
- if (priv->shortcut_bar_shown)
- gtk_paned_set_position (GTK_PANED (priv->hpaned), width);
- priv->hpaned_position = width;
-
- width = gconf_client_get_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width", NULL);
- if (priv->folder_bar_shown)
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), width);
- priv->view_hpaned_position = width;
-
- /* Load the expanded state for the ShellView's StorageSetView */
- file_name = g_strdup_printf ("%s/config/storage-set-view-expanded:default",
- e_shell_get_local_directory (priv->shell));
- e_tree_load_expanded_state (E_TREE (priv->storage_set_view),
- file_name);
- g_free (file_name);
-}
-
-
-/* This implements the behavior for when the folder which is currently displayed
- gets deleted. */
-
-/* Find the path for an Inbox in the specified storage. This is not really
- 100% correct, but should work for most cases. */
-static char *
-find_inbox_in_storage (EShellView *shell_view,
- const char *storage_name)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EStorage *storage;
- char *casefold_i18n_inbox_name;
- GList *subfolder_paths;
- GList *p;
-
- priv = shell_view->priv;
- storage_set = e_shell_get_storage_set (priv->shell);
- storage = e_storage_set_get_storage (storage_set, storage_name);
-
- casefold_i18n_inbox_name = g_utf8_casefold (_("Inbox"), -1);
-
- subfolder_paths = e_storage_get_subfolder_paths (storage, "/");
- for (p = subfolder_paths; p != NULL; p = p->next) {
- const char *path;
- char *casefold_path;
-
- path = (const char *) p->data;
-
- casefold_path = g_utf8_casefold (path, -1);
-
- if (g_utf8_collate (casefold_path, "/inbox") == 0
- || g_utf8_collate (casefold_path + 1, casefold_i18n_inbox_name) == 0) {
- char *return_path;
-
- return_path = g_strconcat ("/", storage_name, path, NULL);
- e_free_string_list (subfolder_paths);
-
- g_free (casefold_i18n_inbox_name);
- g_free (casefold_path);
- return return_path;
- }
-
- g_free (casefold_path);
- }
-
- g_free (casefold_i18n_inbox_name);
- e_free_string_list (subfolder_paths);
-
- return NULL;
-}
-
-static void
-handle_current_folder_removed (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- const char *current_path;
- const char *p;
- char *new_path;
-
- /* Note: we assume that priv->uri is an evolution: URI. */
-
- priv = shell_view->priv;
-
- current_path = priv->uri + E_SHELL_URI_PREFIX_LEN;
-
- g_assert (*current_path == E_PATH_SEPARATOR);
-
- new_path = NULL;
-
- /* If we have a parent folder (not a parent storage), try to display
- that one. */
-
- p = strrchr (current_path + 1, E_PATH_SEPARATOR);
- if (p != NULL && p[1] != '\0' && strchr (current_path + 1, E_PATH_SEPARATOR) != p) {
- new_path = g_strndup (current_path, p - current_path);
- } else {
- /* We don't have a parent folder, so try to see if there is an
- Inbox folder in the same storage. */
-
- /* Extract the storage name. */
- p = strchr (current_path + 1, E_PATH_SEPARATOR);
- if (p == NULL) {
- /* The URL points itself to a storage, so just redirect
- to the default case. */
- new_path = NULL;
- } else {
- char *storage_name;
-
- storage_name = g_strndup (current_path + 1, p - current_path - 1);
-
- new_path = find_inbox_in_storage (shell_view, storage_name);
- if (new_path == NULL) {
- char *storage_uri;
-
- /* No Inbox in this storage -- fallback to the storage. */
- storage_uri = g_strconcat (E_SHELL_URI_PREFIX, "/", storage_name, NULL);
- e_shell_view_display_uri (shell_view, storage_uri, TRUE);
-
- g_free (storage_uri);
- g_free (storage_name);
- return;
- }
-
- g_free (storage_name);
- }
- }
-
- if (new_path == NULL) {
- e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
- } else {
- EFolder *folder;
-
- /* Check that the folder we have chosen exists; if it doesn't,
- we just use the fallback URI. */
-
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), new_path);
- if (folder == NULL) {
- e_shell_view_display_uri (shell_view, FALLBACK_URI, TRUE);
- } else {
- char *new_uri;
-
- new_uri = g_strconcat (E_SHELL_URI_PREFIX, new_path, NULL);
- e_shell_view_display_uri (shell_view, new_uri, TRUE);
- g_free (new_uri);
- }
-
- g_free (new_path);
- }
-}
-
-
-/* Callbacks for the EStorageSet. */
-
-static void
-storage_set_new_storage_callback (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- if (e_storage_supports_shared_folders (storage))
- update_other_users_folder_items_sensitivity (E_SHELL_VIEW (data));
-}
-
-static void
-storage_set_removed_storage_callback (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EShellView *shell_view = E_SHELL_VIEW (data);
-
- if (! e_storage_supports_shared_folders (storage))
- return;
-
- update_other_users_folder_items_sensitivity (shell_view);
-}
-
-static void
-storage_set_removed_folder_callback (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- GtkWidget *socket;
- View *view;
- int destroy_connection_id;
- int page_num;
- char *uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
-
- remove_uri_from_history (shell_view, uri);
- update_navigation_buttons (shell_view);
-
- /* (Note that at this point the current URI in the history might have
- been changed and not match the current view. But we catch this case
- when checking if this was the current view, below.) */
-
- view = g_hash_table_lookup (priv->uri_to_view, uri);
-
- g_free (uri);
-
- if (view == NULL)
- return;
-
- socket = find_socket (GTK_CONTAINER (view->control));
- priv->sockets = g_list_remove (priv->sockets, socket);
-
- destroy_connection_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (socket), "e_shell_view_destroy_connection_id"));
- g_signal_handler_disconnect((socket), destroy_connection_id);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
-
- bonobo_control_frame_control_deactivate (BONOBO_CONTROL_FRAME (bonobo_widget_get_control_frame (BONOBO_WIDGET (view->control))));
- gtk_widget_destroy (view->control);
-
- g_hash_table_remove (priv->uri_to_view, view->uri);
- view_destroy (view);
-
- gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), page_num);
-
- /* Check if it was the URI that was being displayed. */
- if (strncmp (priv->uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0
- && strcmp (priv->uri + E_SHELL_URI_PREFIX_LEN, path) == 0) {
- handle_current_folder_removed (shell_view);
- }
-}
-
-
-/* Folder bar pop-up handling. */
-
-static void
-reparent (GtkWidget *widget,
- GtkContainer *new_container)
-{
- gtk_widget_ref (widget);
- gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
- gtk_container_add (GTK_CONTAINER (new_container), widget);
- gtk_widget_unref (widget);
-}
-
-static void
-reparent_storage_set_view_box_and_destroy_popup (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- if (priv->folder_bar_popup == NULL)
- return;
-
- gtk_widget_ref (priv->storage_set_view_box);
- gtk_container_remove (GTK_CONTAINER (priv->folder_bar_popup), priv->storage_set_view_box);
- gtk_paned_pack1 (GTK_PANED (priv->view_hpaned), priv->storage_set_view_box, FALSE, FALSE);
- gtk_widget_unref (priv->storage_set_view_box);
-
- gtk_widget_destroy (priv->folder_bar_popup);
- priv->folder_bar_popup = NULL;
-
- /* Re-enable DnD on the StorageSetView (it got disabled when displaying
- the pop-up). */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-}
-
-static void
-popdown_transient_folder_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (priv->storage_set_view_box);
-
- reparent_storage_set_view_box_and_destroy_popup (shell_view);
- gtk_widget_hide (priv->storage_set_view_box);
-
- e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), FALSE);
-
- /* Re-enable DnD on the StorageSetView (it got disabled when displaying
- the pop-up). */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), TRUE);
-}
-
-static int
-storage_set_view_box_button_release_event_cb (GtkWidget *widget,
- GdkEventButton *button_event,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (button_event->window == GTK_PANED (priv->view_hpaned)->handle
- || button_event->button != 1)
- return FALSE;
-
- popdown_transient_folder_bar (shell_view);
- return TRUE;
-}
-
-static void
-storage_set_view_folder_opened_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- /* Pop down for top level nodes, see #31303. */
- if (strchr (path + 1, E_PATH_SEPARATOR) == NULL)
- popdown_transient_folder_bar (E_SHELL_VIEW (data));
-}
-
-static void
-popup_storage_set_view_button_clicked (ETitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- g_assert (priv->folder_bar_popup != NULL);
-
- reparent_storage_set_view_box_and_destroy_popup (shell_view);
-
- e_shell_view_show_folder_bar (shell_view, TRUE);
- e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), FALSE);
-}
-
-static void
-folder_bar_popup_map_callback (GtkWidget *widget,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- guint32 current_time;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- current_time = GDK_CURRENT_TIME;
-
- if (gdk_pointer_grab (widget->window, TRUE,
- (GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_RELEASE_MASK
- | GDK_ENTER_NOTIFY_MASK
- | GDK_LEAVE_NOTIFY_MASK
- | GDK_POINTER_MOTION_MASK),
- NULL, NULL, current_time) != 0) {
- g_warning ("e-shell-view.c:folder_bar_popup_map_callback() -- pointer grab failed.");
- return;
- }
-
- if (gdk_keyboard_grab (widget->window, TRUE, 0) != 0) {
- g_warning ("e-shell-view.c:folder_bar_popup_map_callback() -- keyboard grab failed.");
- gdk_pointer_ungrab (current_time);
- return;
- }
-
- gtk_grab_add (widget);
-
- e_signal_connect_while_alive (widget, "button_release_event",
- G_CALLBACK (storage_set_view_box_button_release_event_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_view, "folder_opened",
- G_CALLBACK (storage_set_view_folder_opened_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_view, "button_release_event",
- G_CALLBACK (storage_set_view_box_button_release_event_cb),
- shell_view, priv->folder_bar_popup);
- e_signal_connect_while_alive (priv->storage_set_title_bar, "button_clicked",
- G_CALLBACK (popup_storage_set_view_button_clicked),
- shell_view, priv->folder_bar_popup);
-}
-
-static void
-pop_up_folder_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- int x, y;
- int orig_x, orig_y;
-
- priv = shell_view->priv;
-
- g_assert (! priv->folder_bar_shown);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_PIN);
-
- priv->folder_bar_popup = gtk_window_new (GTK_WINDOW_POPUP);
-
- /* We need to show the storage set view box and do a pointer grab to catch the
- mouse clicks. But until the box is shown, we cannot grab. So we connect to
- the "map" signal; `storage_set_view_box_map_cb()' will do the grab. */
- g_signal_connect (priv->folder_bar_popup, "map",
- G_CALLBACK (folder_bar_popup_map_callback), shell_view);
-
- x = priv->folder_title_bar->allocation.x;
- y = priv->folder_title_bar->allocation.y + priv->folder_title_bar->allocation.height;
-
- gdk_window_get_origin (priv->folder_title_bar->window, &orig_x, &orig_y);
- x += orig_x;
- y += orig_y + 2;
-
- priv->view_hpaned_position = MAX (priv->view_hpaned_position, MIN_POPUP_TREE_WIDTH);
-
- gtk_window_set_default_size (GTK_WINDOW (priv->folder_bar_popup),
- priv->view_hpaned_position,
- priv->view_hpaned->allocation.height);
-
- reparent (priv->storage_set_view_box, GTK_CONTAINER (priv->folder_bar_popup));
-
- gtk_widget_show (priv->storage_set_view_box);
-
- gtk_window_move (GTK_WINDOW (priv->folder_bar_popup), x, y);
- gtk_widget_show (priv->folder_bar_popup);
-
- /* Disable DnD or "interesting" things will happen. */
- e_storage_set_view_set_allow_dnd (E_STORAGE_SET_VIEW (priv->storage_set_view), FALSE);
-}
-
-
-
-/* Switching views on a tree view click. */
-
-static int
-set_folder_timeout (gpointer data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- /* Set to 0 so we don't remove it in _display_uri(). */
- priv->set_folder_timeout = 0;
- e_shell_view_display_uri (shell_view, priv->set_folder_uri, TRUE);
-
- return FALSE;
-}
-
-static int
-popdown_transient_folder_bar_idle (void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- popdown_transient_folder_bar (shell_view);
-
- g_object_unref (shell_view);
-
- return FALSE;
-}
-
-static void
-switch_on_folder_tree_click (EShellView *shell_view,
- const char *path)
-{
- EShellViewPrivate *priv;
- char *uri;
-
- priv = shell_view->priv;
-
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
- gtk_grab_remove (priv->storage_set_view_box);
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- if (priv->uri != NULL && !strcmp (uri, priv->uri)) {
- g_free (uri);
- return;
- }
-
- if (priv->set_folder_timeout != 0)
- gtk_timeout_remove (priv->set_folder_timeout);
-
- g_free (priv->set_folder_uri);
- priv->set_folder_uri = NULL;
-
- cleanup_delayed_selection (shell_view);
-
- if (priv->folder_bar_popup != NULL) {
- e_shell_view_display_uri (shell_view, uri, TRUE);
- g_free (uri);
-
- g_object_ref (shell_view);
- gtk_idle_add (popdown_transient_folder_bar_idle, shell_view);
- return;
- }
-
- priv->set_folder_uri = uri;
-
- priv->set_folder_timeout = gtk_timeout_add (SET_FOLDER_DELAY, set_folder_timeout, shell_view);
-}
-
-
-/* Callbacks. */
-
-/* Callback when a new folder is added. Removed when we clear the
- delayed_selection. */
-static void
-new_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- char *delayed_path;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- delayed_path = strchr (priv->delayed_selection, ':');
- if (delayed_path) {
- delayed_path ++;
- if (!strcmp(path, delayed_path)) {
- char *uri;
-
- uri = g_strdup (priv->delayed_selection);
- cleanup_delayed_selection (shell_view);
- e_shell_view_display_uri (shell_view, uri, FALSE);
- g_free (uri);
- }
- }
-}
-
-/* Callback called when an icon on the shortcut bar gets clicked. */
-static void
-activate_shortcut_cb (EShortcutsView *shortcut_view,
- EShortcuts *shortcuts,
- const char *uri,
- gboolean in_new_window,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (in_new_window) {
- EShellView *new_view;
-
- new_view = e_shell_create_view (e_shell_view_get_shell (shell_view), uri, shell_view);
- e_shell_view_show_shortcut_bar (new_view, FALSE);
- e_shell_view_show_folder_bar (new_view, FALSE);
- } else {
- e_shell_view_display_uri (shell_view, uri, TRUE);
- }
-}
-
-/* Callback when user chooses "Hide shortcut bar" via a right click */
-static void
-hide_requested_cb (EShortcutsView *shortcut_view,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- e_shell_view_show_shortcut_bar (shell_view, FALSE);
-}
-
-/* Callback called when a folder on the tree view gets clicked. */
-static void
-folder_selected_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, path);
- switch_on_folder_tree_click (shell_view, path);
-}
-
-/* Callbacks for the folder context menu in the folder bar. */
-
-static void
-folder_context_menu_popping_up_cb (EStorageSetView *storage_set_view,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, path);
-}
-
-static void
-folder_context_menu_popped_down_cb (EStorageSetView *storage_set_view,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- setup_verb_sensitivity_for_folder (shell_view, e_shell_view_get_current_path (shell_view));
-
- if (shell_view->priv->folder_bar_popup != NULL)
- popdown_transient_folder_bar (shell_view);
-}
-
-/* Callback called when the button on the tree's title bar is clicked. */
-static void
-storage_set_view_button_clicked_cb (ETitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (shell_view->priv->folder_bar_popup == NULL)
- e_shell_view_show_folder_bar (shell_view, FALSE);
-}
-
-/* Callback called when the title bar button is clicked. */
-static void
-title_bar_toggled_cb (EShellFolderTitleBar *title_bar,
- gboolean state,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
-
- if (! state)
- return;
-
- if (shell_view->priv->folder_bar_popup == NULL)
- pop_up_folder_bar (shell_view);
-}
-
-/* Callback called when the offline toggle button is clicked. */
-static void
-offline_toggle_clicked_cb (GtkButton *button,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- switch (e_shell_get_line_status (priv->shell)) {
- case E_SHELL_LINE_STATUS_ONLINE:
- e_shell_go_offline (priv->shell, shell_view);
- break;
- case E_SHELL_LINE_STATUS_OFFLINE:
- e_shell_go_online (priv->shell, shell_view);
- break;
- default:
- g_assert_not_reached ();
- }
-}
-
-
-/* Navigation button callbacks. */
-
-static void
-back_clicked_callback (EShellFolderTitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *new_uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (! e_history_has_prev (priv->history))
- return;
-
- new_uri = (const char *) e_history_prev (priv->history);
-
- display_uri (shell_view, new_uri, FALSE, TRUE);
-}
-
-static void
-forward_clicked_callback (EShellFolderTitleBar *title_bar,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *new_uri;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- if (! e_history_has_next (priv->history))
- return;
-
- new_uri = (const char *) e_history_next (priv->history);
-
- display_uri (shell_view, new_uri, FALSE, TRUE);
-}
-
-
-/* Widget setup. */
-
-static void
-setup_storage_set_subwindow (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *storage_set_view;
- GtkWidget *vbox;
- GtkWidget *scrolled_window;
-
- priv = shell_view->priv;
-
- storage_set_view = e_storage_set_create_new_view (e_shell_get_storage_set (priv->shell),
- priv->ui_container);
- g_signal_connect (storage_set_view, "folder_selected",
- G_CALLBACK (folder_selected_cb), shell_view);
- g_signal_connect (storage_set_view, "folder_context_menu_popping_up",
- G_CALLBACK (folder_context_menu_popping_up_cb), shell_view);
- g_signal_connect (storage_set_view, "folder_context_menu_popped_down",
- G_CALLBACK (folder_context_menu_popped_down_cb), shell_view);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_SHADOW_IN);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), storage_set_view);
-
- vbox = gtk_vbox_new (FALSE, 0);
-
- priv->storage_set_title_bar = e_title_bar_new (_("Folders"));
-
- gtk_box_pack_start (GTK_BOX (vbox), priv->storage_set_title_bar, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
-
- g_signal_connect (priv->storage_set_title_bar, "button_clicked",
- G_CALLBACK (storage_set_view_button_clicked_cb), shell_view);
-
- gtk_widget_show (storage_set_view);
- gtk_widget_show (priv->storage_set_title_bar);
- gtk_widget_show (scrolled_window);
-
- priv->storage_set_view_box = vbox;
- priv->storage_set_view = storage_set_view;
-
- /* Notice we don't show the vbox here yet. By default it's hidden. */
-}
-
-static void
-setup_offline_toggle (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *toggle;
- GtkWidget *image;
-
- priv = shell_view->priv;
-
- toggle = gtk_button_new ();
- GTK_WIDGET_UNSET_FLAGS (toggle, GTK_CAN_FOCUS);
- gtk_button_set_relief (GTK_BUTTON (toggle), GTK_RELIEF_NONE);
-
- g_signal_connect (toggle, "clicked",
- G_CALLBACK (offline_toggle_clicked_cb), shell_view);
-
- image = gtk_image_new_from_pixmap (offline_pixmap, offline_mask);
-
- gtk_container_add (GTK_CONTAINER (toggle), image);
-
- gtk_widget_show (toggle);
- gtk_widget_show (image);
-
- priv->offline_toggle = toggle;
- priv->offline_toggle_image = image;
-
- update_offline_toggle_status (shell_view);
-
- g_assert (priv->status_bar != NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->offline_toggle, FALSE, TRUE, 0);
-}
-
-static void
-setup_menu_hint_label (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->menu_hint_label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (priv->menu_hint_label), 0.0, 0.5);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->menu_hint_label, TRUE, TRUE, 0);
-}
-
-static void
-setup_task_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->task_bar = e_task_bar_new ();
-
- g_assert (priv->status_bar != NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->status_bar), priv->task_bar, TRUE, TRUE, 0);
- gtk_widget_show (priv->task_bar);
-}
-
-static void
-create_status_bar (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = shell_view->priv;
-
- priv->status_bar = gtk_hbox_new (FALSE, 2);
- gtk_widget_show (priv->status_bar);
-
- setup_offline_toggle (shell_view);
- setup_menu_hint_label (shell_view);
- setup_task_bar (shell_view);
-}
-
-
-/* Menu hints for the status bar. */
-
-static void
-ui_engine_add_hint_callback (BonoboUIEngine *engine,
- const char *hint,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- gtk_label_set_text (GTK_LABEL (priv->menu_hint_label), hint);
- gtk_widget_show (priv->menu_hint_label);
- gtk_widget_hide (priv->task_bar);
-}
-
-static void
-ui_engine_remove_hint_callback (BonoboUIEngine *engine,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- gtk_widget_hide (priv->menu_hint_label);
- gtk_widget_show (priv->task_bar);
-}
-
-static void
-setup_statusbar_hints (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- BonoboUIEngine *ui_engine;
-
- priv = shell_view->priv;
-
- g_assert (priv->status_bar != NULL);
-
- ui_engine = bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view));
-
- g_signal_connect (ui_engine, "add_hint",
- G_CALLBACK (ui_engine_add_hint_callback), shell_view);
- g_signal_connect (ui_engine, "remove_hint",
- G_CALLBACK (ui_engine_remove_hint_callback), shell_view);
-}
-
-
-static void
-setup_widgets (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GtkWidget *contents_vbox;
- GtkWidget *gray_bar;
-
- priv = shell_view->priv;
-
- /* The shortcut bar. */
-
- priv->shortcut_bar = e_shortcuts_new_view (e_shell_get_shortcuts (priv->shell));
- g_signal_connect (priv->shortcut_bar, "activate_shortcut",
- G_CALLBACK (activate_shortcut_cb), shell_view);
-
- g_signal_connect (priv->shortcut_bar, "hide_requested",
- G_CALLBACK (hide_requested_cb), shell_view);
-
- priv->shortcut_frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (priv->shortcut_frame), GTK_SHADOW_IN);
-
- /* The storage set view. */
-
- setup_storage_set_subwindow (shell_view);
-
- /* The tabless notebook which we used to contain the views. */
-
- priv->notebook = gtk_notebook_new ();
- gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
-
- /* Page for "No URL displayed" message. */
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), create_label_for_empty_page (), NULL);
-
- /* Put things into a paned and the paned into the GnomeApp. */
-
- priv->view_vbox = gtk_vbox_new (FALSE, 0);
-
- priv->folder_title_bar = e_shell_folder_title_bar_new ();
- g_signal_connect (priv->folder_title_bar, "title_toggled",
- G_CALLBACK (title_bar_toggled_cb), shell_view);
- g_signal_connect (priv->folder_title_bar, "back_clicked",
- G_CALLBACK (back_clicked_callback), shell_view);
- g_signal_connect (priv->folder_title_bar, "forward_clicked",
- G_CALLBACK (forward_clicked_callback), shell_view);
-
- priv->view_hpaned = gtk_hpaned_new ();
- gtk_paned_pack1 (GTK_PANED (priv->view_hpaned), priv->storage_set_view_box, TRUE, FALSE);
- gtk_paned_pack2 (GTK_PANED (priv->view_hpaned), priv->notebook, TRUE, FALSE);
-
- gray_bar = gtk_event_box_new ();
- gtk_container_add (GTK_CONTAINER (gray_bar), priv->folder_title_bar);
- gtk_box_pack_start (GTK_BOX (priv->view_vbox), gray_bar, FALSE, FALSE, 2);
-
- gtk_box_pack_start (GTK_BOX (priv->view_vbox), priv->view_hpaned, TRUE, TRUE, 0);
-
- priv->hpaned = gtk_hpaned_new ();
- gtk_container_add (GTK_CONTAINER (priv->shortcut_frame), priv->shortcut_bar);
- gtk_paned_pack1 (GTK_PANED (priv->hpaned), priv->shortcut_frame, TRUE, FALSE);
- gtk_paned_pack2 (GTK_PANED (priv->hpaned), priv->view_vbox, TRUE, FALSE);
- gtk_paned_set_position (GTK_PANED (priv->hpaned), DEFAULT_SHORTCUT_BAR_WIDTH);
-
- /* The status bar. */
-
- create_status_bar (shell_view);
- setup_statusbar_hints (shell_view);
-
- /* The contents. */
-
- contents_vbox = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (contents_vbox), priv->hpaned, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (contents_vbox), priv->status_bar, FALSE, TRUE, 0);
- gtk_widget_show (contents_vbox);
-
- bonobo_window_set_contents (BONOBO_WINDOW (shell_view), contents_vbox);
-
- /* Show stuff. */
-
- gtk_widget_show (priv->shortcut_frame);
- gtk_widget_show (priv->shortcut_bar);
- gtk_widget_show (priv->storage_set_view);
- gtk_widget_show (priv->notebook);
- gtk_widget_show (priv->hpaned);
- gtk_widget_show (priv->view_hpaned);
- gtk_widget_show (priv->view_vbox);
- gtk_widget_show (priv->folder_title_bar);
- gtk_widget_show (priv->status_bar);
-
- gtk_widget_show (gray_bar);
-
- priv->shortcut_bar_shown = TRUE;
- priv->folder_bar_shown = FALSE;
-
- /* FIXME: Session management and stuff? */
- gtk_window_set_default_size (GTK_WINDOW (shell_view), DEFAULT_WIDTH, DEFAULT_HEIGHT);
-}
-
-
-/* GObject methods. */
-
-static void
-hash_foreach_destroy_view (void *name,
- void *value,
- void *data)
-{
- View *view;
-
- view = (View *) value;
-
- gtk_widget_destroy (view->control);
-
- view_destroy (view);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- GList *p;
-
- shell_view = E_SHELL_VIEW (object);
- priv = shell_view->priv;
-
- /* This is necessary to remove the signal handler for folder_new on the
- storage set used for the delayed selection mechanism. */
- cleanup_delayed_selection (shell_view);
-
- if (priv->tooltips != NULL) {
- g_object_unref (priv->tooltips);
- priv->tooltips = NULL;
- }
-
- if (priv->history != NULL) {
- g_object_unref (priv->history);
- priv->history = NULL;
- }
-
- if (priv->shell != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->shell));
- priv->shell = NULL;
- }
-
- if (priv->corba_interface != CORBA_OBJECT_NIL) {
- bonobo_object_release_unref (priv->corba_interface, NULL);
- priv->corba_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->folder_bar_popup != NULL) {
- gtk_widget_destroy (priv->folder_bar_popup);
- priv->folder_bar_popup = NULL;
- }
-
- for (p = priv->sockets; p != NULL; p = p->next) {
- GtkWidget *socket_widget;
- int destroy_connection_id;
-
- socket_widget = GTK_WIDGET (p->data);
- destroy_connection_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (socket_widget),
- "e_shell_view_destroy_connection_id"));
- g_signal_handler_disconnect((socket_widget), destroy_connection_id);
- }
- g_list_free (priv->sockets);
- priv->sockets = NULL;
-
- if (priv->uri_to_view != NULL) {
- g_hash_table_foreach (priv->uri_to_view, hash_foreach_destroy_view, NULL);
- g_hash_table_destroy (priv->uri_to_view);
- priv->uri_to_view = NULL;
- }
-
- if (priv->ui_component != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->ui_component));
- priv->ui_component = NULL;
- }
-
- if (priv->set_folder_timeout != 0) {
- gtk_timeout_remove (priv->set_folder_timeout);
- priv->set_folder_timeout = 0;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- shell_view = E_SHELL_VIEW (object);
- priv = shell_view->priv;
-
- g_free (priv->uri);
- g_free (priv->set_folder_uri);
- g_free (priv->delayed_selection);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-class_init (EShellViewClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(BONOBO_TYPE_WINDOW);
-
- signals[SHORTCUT_BAR_VISIBILITY_CHANGED]
- = g_signal_new ("shortcut_bar_visibility_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, shortcut_bar_visibility_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[FOLDER_BAR_VISIBILITY_CHANGED]
- = g_signal_new ("folder_bar_visibility_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, folder_bar_visibility_changed),
- NULL, NULL,
- e_shell_marshal_NONE__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[VIEW_CHANGED]
- = g_signal_new ("view_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EShellViewClass, view_changed),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING_STRING_STRING,
- G_TYPE_NONE, 4,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- load_images ();
-}
-
-static void
-init (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- priv = g_new (EShellViewPrivate, 1);
-
- priv->shell = NULL;
- priv->corba_interface = CORBA_OBJECT_NIL;
- priv->ui_component = NULL;
- priv->history = e_history_new ((EHistoryItemFreeFunc) g_free);
- priv->uri = NULL;
- priv->delayed_selection = NULL;
-
- priv->tooltips = gtk_tooltips_new ();
- g_object_ref (priv->tooltips);
- gtk_object_sink (GTK_OBJECT (priv->tooltips));
-
- priv->appbar = NULL;
- priv->hpaned = NULL;
- priv->view_hpaned = NULL;
- priv->contents = NULL;
- priv->notebook = NULL;
-
- priv->storage_set_title_bar = NULL;
- priv->storage_set_view = NULL;
- priv->storage_set_view_box = NULL;
- priv->shortcut_bar = NULL;
-
- priv->status_bar = NULL;
- priv->offline_toggle = NULL;
- priv->offline_toggle_image = NULL;
- priv->menu_hint_label = NULL;
- priv->task_bar = NULL;
-
- priv->folder_bar_popup = NULL;
-
- priv->shortcut_bar_shown = FALSE;
- priv->folder_bar_shown = FALSE;
-
- priv->hpaned_position = 0;
- priv->view_hpaned_position = 0;
-
- priv->uri_to_view = g_hash_table_new (g_str_hash, g_str_equal);
-
- priv->sockets = NULL;
-
- priv->set_folder_timeout = 0;
- priv->set_folder_uri = NULL;
-
- shell_view->priv = priv;
-}
-
-
-/* EvolutionShellView interface callbacks. */
-
-static void
-corba_interface_set_message_cb (EvolutionShellView *shell_view,
- const char *message,
- gboolean busy,
- void *data)
-{
- /* Don't do anything here anymore. The interface is going to be
- deprecated soon. */
-}
-
-static void
-corba_interface_unset_message_cb (EvolutionShellView *shell_view,
- void *data)
-{
- /* Don't do anything here anymore. The interface is going to be
- deprecated soon. */
-}
-
-static void
-corba_interface_change_current_view_cb (EvolutionShellView *shell_view,
- const char *uri,
- void *data)
-{
- EShellView *view;
-
- view = E_SHELL_VIEW (data);
-
- g_return_if_fail (view != NULL);
-
- e_shell_view_display_uri (view, uri, TRUE);
-}
-
-static void
-corba_interface_set_title (EvolutionShellView *shell_view,
- const char *title,
- void *data)
-{
- EShellView *view;
-
- view = E_SHELL_VIEW (data);
-
- g_return_if_fail (view != NULL);
-
- gtk_window_set_title (GTK_WINDOW (view), title);
-}
-
-static void
-corba_interface_set_folder_bar_label (EvolutionShellView *evolution_shell_view,
- const char *text,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (data));
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- e_shell_folder_title_bar_set_folder_bar_label (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- text);
-}
-
-static void
-corba_interface_show_settings (EvolutionShellView *evolution_shell_view,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
-
- g_return_if_fail (data != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (data));
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- e_shell_view_show_settings (shell_view);
-}
-
-static void
-unmerge_on_error (BonoboObject *object,
- CORBA_Object cobject,
- CORBA_Environment *ev)
-{
-#if 0
- BonoboWindow *window;
- BonoboUIEngine *ui_engine;
-
- /* FIXME changes.txt says we should be able to do this but bonobo_ui_engine_get_view()
- is marked as internal in bonoob-ui-engine.h! */
- ui_engine = bonobo_ui_container_get_engine (BONOBO_UI_CONTAINER (object));
- window = BONOBO_WINDOW (bonobo_ui_engine_get_view (ui_engine));
-
- if (window != NULL)
- bonobo_ui_engine_deregister_component_by_ref (ui_engine, cobject);
-#endif
-}
-
-static void
-updated_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- const char *view_path;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- view_path = get_storage_set_path_from_uri (priv->uri);
- if (view_path && strcmp (path, view_path) != 0)
- return;
-
- /* Update the folder title bar and the window title bar */
- update_for_current_uri (shell_view);
-}
-
-
-/* Shell callbacks. */
-
-static void
-shell_line_status_changed_cb (EShell *shell,
- EShellLineStatus new_status,
- void *data)
-{
- EShellView *shell_view;
-
- shell_view = E_SHELL_VIEW (data);
- update_offline_toggle_status (shell_view);
- update_send_receive_sensitivity (shell_view);
-}
-
-static int
-delete_event_cb (GtkWidget *widget,
- GdkEventAny *ev,
- void *data)
-{
- return FALSE;
-}
-
-
-EShellView *
-e_shell_view_construct (EShellView *shell_view,
- EShell *shell,
- const char *uri)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EShellView *view;
- char *uri_to_load;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- priv = shell_view->priv;
-
- view = E_SHELL_VIEW (bonobo_window_construct (BONOBO_WINDOW (shell_view),
- bonobo_ui_container_new (),
- "evolution", "Ximian Evolution"));
-
- if (!view) {
- g_object_unref (shell_view);
- return NULL;
- }
-
- priv->shell = shell;
- bonobo_object_ref (BONOBO_OBJECT (priv->shell));
-
- g_signal_connect (view, "delete_event",
- G_CALLBACK (delete_event_cb), NULL);
-
- priv->ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (view));
- g_signal_connect (priv->ui_container, "system_exception",
- G_CALLBACK (unmerge_on_error), NULL);
-
- priv->ui_component = bonobo_ui_component_new ("evolution");
- bonobo_ui_component_set_container (priv->ui_component,
- bonobo_object_corba_objref (BONOBO_OBJECT (priv->ui_container)),
- NULL);
-
- bonobo_ui_component_freeze (priv->ui_component, NULL);
-
- bonobo_ui_util_set_ui (priv->ui_component, PREFIX,
- EVOLUTION_UIDIR "/evolution.xml",
- "evolution-1.4", NULL);
-
- setup_widgets (shell_view);
-
- bonobo_ui_engine_config_set_path (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)),
- "/evolution/UIConf/kvps");
- e_shell_view_menu_setup (shell_view);
-
- e_shell_view_show_folder_bar (shell_view, FALSE);
-
- bonobo_ui_component_thaw (priv->ui_component, NULL);
-
- g_signal_connect_object (shell, "line_status_changed",
- G_CALLBACK (shell_line_status_changed_cb), shell_view, 0);
-
- storage_set = e_shell_get_storage_set (shell);
- e_signal_connect_while_alive (storage_set, "updated_folder",
- G_CALLBACK (updated_folder_cb), shell_view, shell_view);
- g_signal_connect_object (storage_set, "new_storage",
- G_CALLBACK (storage_set_new_storage_callback), shell_view, 0);
- g_signal_connect_object (storage_set, "removed_storage",
- G_CALLBACK (storage_set_removed_storage_callback), shell_view, 0);
- g_signal_connect_object (storage_set, "removed_folder",
- G_CALLBACK (storage_set_removed_folder_callback), shell_view, 0);
-
- e_shell_user_creatable_items_handler_attach_menus (e_shell_get_user_creatable_items_handler (priv->shell),
- shell_view);
-
- setup_defaults (view);
- update_other_users_folder_items_sensitivity (view);
- update_send_receive_sensitivity (view);
-
- if (uri != NULL) {
- uri_to_load = g_strdup (uri);
- } else {
- GConfClient *client = gconf_client_get_default ();
- char *path = gconf_client_get_string (client, "/apps/evolution/shell/view_defaults/folder_path", NULL);
-
- uri_to_load = g_strconcat (E_SHELL_URI_PREFIX, path, NULL);
- g_free (path);
- g_object_unref (client);
- }
-
- if (! e_shell_view_display_uri (shell_view, uri_to_load, FALSE)) {
- e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, FALSE);
- e_shell_view_display_uri (shell_view, uri_to_load, TRUE);
- }
-
- g_free (uri_to_load);
-
- return view;
-}
-
-/* WARNING: Don't use `e_shell_view_new()' to create new views for the shell
- unless you know what you are doing; this is just the standard GTK+
- constructor thing and it won't allow the shell to do the required
- bookkeeping for the created views. Instead, the right way to create a new
- view is calling `e_shell_create_view()'. */
-EShellView *
-e_shell_view_new (EShell *shell,
- const char *uri)
-{
- GtkWidget *new;
-
- g_return_val_if_fail (shell != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL (shell), NULL);
-
- new = g_object_new (e_shell_view_get_type (), NULL);
-
- return e_shell_view_construct (E_SHELL_VIEW (new), shell, uri);
-}
-
-const GNOME_Evolution_ShellView
-e_shell_view_get_corba_interface (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- g_return_val_if_fail (shell_view != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), CORBA_OBJECT_NIL);
-
- priv = shell_view->priv;
-
- return priv->corba_interface;
-}
-
-
-static const char *
-get_storage_set_path_from_uri (const char *uri)
-{
- const char *colon;
-
- if (uri == NULL)
- return NULL;
-
- if (g_path_is_absolute (uri))
- return NULL;
-
- colon = strchr (uri, ':');
- if (colon == NULL || colon == uri || colon[1] == '\0')
- return NULL;
-
- if (! g_path_is_absolute (colon + 1))
- return NULL;
-
- if (g_ascii_strncasecmp (uri, E_SHELL_URI_PREFIX, colon - uri) != 0)
- return NULL;
-
- return colon + 1;
-}
-
-static void
-update_window_icon (EShellView *shell_view,
- const char *type)
-{
- EShellViewPrivate *priv;
- const char *icon_name;
- char *icon_path;
-
- priv = shell_view->priv;
-
- if (type == NULL) {
- icon_path = NULL;
- } else {
- EFolderTypeRegistry *folder_type_registry;
-
- folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
- icon_name = e_folder_type_registry_get_icon_name_for_type (folder_type_registry, type);
- if (icon_name == NULL)
- icon_path = NULL;
- else
- icon_path = e_shell_get_icon_path (icon_name, FALSE);
- }
-
- if (icon_path == NULL) {
- gnome_window_icon_set_from_default (GTK_WINDOW (shell_view));
- } else {
- gnome_window_icon_set_from_file (GTK_WINDOW (shell_view), icon_path);
- g_free (icon_path);
- }
-}
-
-static void
-update_folder_title_bar (EShellView *shell_view,
- const char *title,
- EFolder *folder)
-{
- EShellViewPrivate *priv;
- GdkPixbuf *folder_icon;
-
- priv = shell_view->priv;
-
- if (folder == NULL) {
- folder_icon = NULL;
- } else {
- const char *icon_name;
-
- icon_name = e_folder_get_custom_icon_name (folder);
- if (icon_name != NULL) {
- folder_icon = e_icon_factory_get_icon (icon_name, TRUE);
- } else {
- EFolderTypeRegistry *folder_type_registry;
-
- folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
- folder_icon = e_folder_type_registry_get_icon_for_type (folder_type_registry,
- e_folder_get_type_string (folder),
- TRUE);
- g_object_ref (folder_icon);
- }
- }
-
- e_shell_folder_title_bar_set_icon (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- folder_icon);
-
- if (folder_icon != NULL)
- g_object_unref (folder_icon);
-
- if (title != NULL)
- e_shell_folder_title_bar_set_title (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), title);
-}
-
-static void
-update_for_current_uri (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EFolder *folder;
- const char *path;
- const char *curr_path;
- const char *type;
- const char *folder_name;
- char *title;
- char *window_title;
- int unread_count;
-
- priv = shell_view->priv;
-
- /* If we update when there is a timeout set, the selection will jump
- around against the user's wishes. So we just return. */
- if (priv->set_folder_timeout != 0)
- return;
-
- path = get_storage_set_path_from_uri (priv->uri);
-
- folder = NULL;
- folder_name = NULL;
- type = NULL;
- unread_count = 0;
-
- if (path != NULL) {
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- if (folder != NULL) {
- folder_name = e_folder_get_name (folder);
- type = e_folder_get_type_string (folder);
- unread_count = e_folder_get_unread_count (folder);
- }
- }
-
- if (unread_count > 0)
- title = g_strdup_printf (_("%s (%d)"), folder_name, unread_count);
- else if (folder_name == NULL)
- title = g_strdup (_("(None)"));
- else
- title = g_strdup (folder_name);
-
- window_title = g_strdup_printf ("%s - Ximian Evolution", title);
-
- gtk_window_set_title (GTK_WINDOW (shell_view), window_title);
-
- update_folder_title_bar (shell_view, title, folder);
- update_window_icon (shell_view, type);
-
- g_free (window_title);
- g_free (title);
-
- g_signal_handlers_block_by_func (priv->storage_set_view,
- G_CALLBACK (folder_selected_cb), shell_view);
-
- curr_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
- if (path != NULL && (curr_path == NULL || strcmp(path, curr_path)))
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), path);
-
- g_signal_handlers_unblock_by_func (priv->storage_set_view,
- G_CALLBACK (folder_selected_cb), shell_view);
-}
-
-static void
-update_offline_toggle_status (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- GdkPixmap *icon_pixmap;
- GdkBitmap *icon_mask;
- const char *tooltip;
- gboolean sensitive;
-
- priv = shell_view->priv;
-
- switch (e_shell_get_line_status (priv->shell)) {
- case E_SHELL_LINE_STATUS_ONLINE:
- icon_pixmap = online_pixmap;
- icon_mask = online_mask;
- sensitive = TRUE;
- tooltip = _("Ximian Evolution is currently online. "
- "Click on this button to work offline.");
- break;
- case E_SHELL_LINE_STATUS_GOING_OFFLINE:
- icon_pixmap = online_pixmap;
- icon_mask = online_mask;
- sensitive = FALSE;
- tooltip = _("Ximian Evolution is in the process of going offline.");
- break;
- case E_SHELL_LINE_STATUS_OFFLINE:
- icon_pixmap = offline_pixmap;
- icon_mask = offline_mask;
- sensitive = TRUE;
- tooltip = _("Ximian Evolution is currently offline. "
- "Click on this button to work online.");
- break;
- default:
- g_assert_not_reached ();
- return;
- }
-
- gtk_image_set_from_pixmap (GTK_IMAGE (priv->offline_toggle_image), icon_pixmap, icon_mask);
- gtk_widget_set_sensitive (priv->offline_toggle, sensitive);
- gtk_tooltips_set_tip (priv->tooltips, priv->offline_toggle, tooltip, NULL);
-}
-
-static void
-update_send_receive_sensitivity (EShellView *shell_view)
-{
- if (e_shell_get_line_status (shell_view->priv->shell) == E_SHELL_LINE_STATUS_OFFLINE)
- bonobo_ui_component_set_prop (shell_view->priv->ui_component,
- "/commands/SendReceive",
- "sensitive", "0", NULL);
- else
- bonobo_ui_component_set_prop (shell_view->priv->ui_component,
- "/commands/SendReceive",
- "sensitive", "1", NULL);
-}
-
-
-/* This displays the specified page, doing the appropriate Bonobo activation/deactivation
- magic to make sure things work nicely. FIXME: Crappy way to solve the issue. */
-static void
-set_current_notebook_page (EShellView *shell_view,
- int page_num)
-{
- EShellViewPrivate *priv;
- GtkNotebook *notebook;
- GtkWidget *current;
- BonoboControlFrame *old_control_frame = NULL;
- BonoboControlFrame *new_control_frame;
- int current_page;
-
- priv = shell_view->priv;
- notebook = GTK_NOTEBOOK (priv->notebook);
-
- current_page = gtk_notebook_get_current_page (notebook);
- if (current_page == page_num)
- return;
-
- if (current_page != -1 && current_page != 0) {
- current = gtk_notebook_get_nth_page (notebook, current_page);
- old_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current));
- bonobo_control_frame_set_autoactivate (old_control_frame, FALSE);
- }
-
- e_shell_folder_title_bar_set_folder_bar_label (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar), "");
- gtk_notebook_set_current_page (notebook, page_num);
-
- if (page_num == -1 || page_num == 0)
- return;
-
- current = gtk_notebook_get_nth_page (notebook, page_num);
- new_control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current));
- bonobo_control_frame_set_autoactivate (new_control_frame, FALSE);
-
- bonobo_control_frame_control_activate (new_control_frame);
- if (old_control_frame)
- bonobo_control_frame_control_deactivate (old_control_frame);
-}
-
-static void
-setup_corba_interface (EShellView *shell_view,
- GtkWidget *control)
-{
- EShellViewPrivate *priv;
- BonoboControlFrame *control_frame;
- EvolutionShellView *corba_interface;
- CORBA_Environment ev;
-
- g_return_if_fail (control != NULL);
-
- priv = shell_view->priv;
-
- control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (control));
- corba_interface = evolution_shell_view_new ();
-
- g_signal_connect_object (corba_interface, "set_message",
- G_CALLBACK (corba_interface_set_message_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "unset_message",
- G_CALLBACK (corba_interface_unset_message_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "change_current_view",
- G_CALLBACK (corba_interface_change_current_view_cb), shell_view, 0);
- g_signal_connect_object (corba_interface, "set_title",
- G_CALLBACK (corba_interface_set_title), shell_view, 0);
- g_signal_connect_object (corba_interface, "set_folder_bar_label",
- G_CALLBACK (corba_interface_set_folder_bar_label), shell_view, 0);
- g_signal_connect_object (corba_interface, "show_settings",
- G_CALLBACK (corba_interface_show_settings), shell_view, 0);
-
- bonobo_object_add_interface (BONOBO_OBJECT (control_frame),
- BONOBO_OBJECT (corba_interface));
-
-
- /* Get rid of the existing one first */
- bonobo_object_release_unref (priv->corba_interface, NULL);
-
- /* Now find the existing one */
- CORBA_exception_init (&ev);
- priv->corba_interface = Bonobo_Unknown_queryInterface (BONOBO_OBJREF (control_frame),
- "IDL:GNOME/Evolution/ShellView:1.0",
- &ev);
- if (BONOBO_EX (&ev))
- priv->corba_interface = CORBA_OBJECT_NIL;
- CORBA_exception_free (&ev);
-}
-
-
-/* Socket destruction handling. */
-
-static void
-socket_destroy_cb (GtkWidget *socket_widget, gpointer data)
-{
- EShellView *shell_view;
- EShellViewPrivate *priv;
- EFolder *folder;
- View *view;
- const char *uri;
- gboolean viewing_closed_uri;
- const char *current_uri;
- const char *path;
- const char *folder_type;
-
- shell_view = E_SHELL_VIEW (data);
- priv = shell_view->priv;
-
- uri = (const char *) g_object_get_data (G_OBJECT (socket_widget), "e_shell_view_folder_uri");
-
- view = g_hash_table_lookup (priv->uri_to_view, uri);
- if (view == NULL) {
- g_warning ("What?! Destroyed socket for non-existing URI? -- %s", uri);
- return;
- }
-
- priv->sockets = g_list_remove (priv->sockets, socket_widget);
-
- gtk_widget_destroy (view->control);
-
- g_hash_table_remove (priv->uri_to_view, view->uri);
- view_destroy (view);
-
- path = get_storage_set_path_from_uri (uri);
- folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), path);
-
- if (folder != NULL)
- folder_type = e_folder_get_type_string (folder);
- else
- folder_type = NULL;
-
- /* See if we were actively viewing the uri for the socket that's being closed */
- current_uri = e_shell_view_get_current_uri (shell_view);
- if (current_uri == NULL) {
- viewing_closed_uri = FALSE;
- } else {
- if (strcmp (uri, current_uri) == 0)
- viewing_closed_uri = TRUE;
- else
- viewing_closed_uri = FALSE;
- }
-
- if (viewing_closed_uri)
- e_shell_view_display_uri (shell_view, NULL, TRUE);
-
- e_shell_component_maybe_crashed (priv->shell, uri, folder_type, shell_view);
-
- /* We were actively viewing the component that just crashed, so flip to the default URI */
- if (viewing_closed_uri)
- e_shell_view_display_uri (shell_view, E_SHELL_VIEW_DEFAULT_URI, TRUE);
-}
-
-
-static const char *
-get_type_for_folder (EShellView *shell_view,
- const char *path,
- const char **physical_uri_return)
-{
- EShellViewPrivate *priv;
- EStorageSet *storage_set;
- EFolder *folder;
-
- priv = shell_view->priv;
-
- storage_set = e_shell_get_storage_set (priv->shell);
- folder = e_storage_set_get_folder (storage_set, path);
- if (!folder)
- return NULL;
-
- if (physical_uri_return != NULL)
- *physical_uri_return = e_folder_get_physical_uri (folder);
-
- return e_folder_get_type_string (folder);
-}
-
-/* Create a new view for @uri with @control. It assumes a view for @uri does not exist yet. */
-static View *
-get_view_for_uri (EShellView *shell_view,
- const char *uri,
- const char *view_info)
-{
- EShellViewPrivate *priv;
- CORBA_Environment ev;
- EvolutionShellComponentClient *handler_client;
- EFolderTypeRegistry *folder_type_registry;
- GNOME_Evolution_ShellComponent handler;
- Bonobo_UIContainer container;
- GtkWidget *control;
- GtkWidget *socket;
- Bonobo_Control corba_control;
- const char *path;
- const char *physical_uri;
- const char *folder_type;
- int destroy_connection_id;
-
- priv = shell_view->priv;
-
- path = strchr (uri, ':');
- if (path == NULL)
- return NULL;
-
- path++;
- if (*path == '\0')
- return NULL;
-
- folder_type = get_type_for_folder (shell_view, path, &physical_uri);
- if (folder_type == NULL || physical_uri == NULL)
- return NULL;
-
- folder_type_registry = e_shell_get_folder_type_registry (e_shell_view_get_shell (shell_view));
-
- handler_client = e_folder_type_registry_get_handler_for_type (folder_type_registry, folder_type);
- if (handler_client == CORBA_OBJECT_NIL)
- return NULL;
-
- handler = evolution_shell_component_client_corba_objref (handler_client);
-
- CORBA_exception_init (&ev);
-
- corba_control = GNOME_Evolution_ShellComponent_createView (handler, physical_uri, folder_type, view_info, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION) {
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
-
- if (corba_control == CORBA_OBJECT_NIL)
- return NULL;
-
- container = bonobo_ui_component_get_container (priv->ui_component);
- control = bonobo_widget_new_control_from_objref (corba_control, container);
- bonobo_object_release_unref (corba_control, NULL);
-
- socket = find_socket (GTK_CONTAINER (control));
- destroy_connection_id = g_signal_connect (socket, "destroy",
- G_CALLBACK (socket_destroy_cb),
- shell_view);
- g_object_set_data (G_OBJECT (socket), "e_shell_view_destroy_connection_id", GINT_TO_POINTER (destroy_connection_id));
- g_object_set_data_full (G_OBJECT (socket), "e_shell_view_folder_uri", g_strdup (uri), g_free);
-
- priv->sockets = g_list_prepend (priv->sockets, socket);
-
- setup_corba_interface (shell_view, control);
-
- return view_new (uri, control);
-}
-
-static gboolean
-show_existing_view (EShellView *shell_view,
- const char *uri,
- View *view)
-{
- EShellViewPrivate *priv;
- int notebook_page;
-
- priv = shell_view->priv;
-
- notebook_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
- g_assert (notebook_page != -1);
-
- g_free (priv->uri);
- priv->uri = g_strdup (uri);
-
- set_current_notebook_page (shell_view, notebook_page);
-
- return TRUE;
-}
-
-static gboolean
-create_new_view_for_uri (EShellView *shell_view,
- const char *uri,
- const char *view_info)
-{
- View *view;
- EShellViewPrivate *priv;
- int page_num;
-
- priv = shell_view->priv;
-
- view = get_view_for_uri (shell_view, uri, view_info);
- if (view == NULL)
- return FALSE;
-
- g_free (priv->uri);
- priv->uri = g_strdup (uri);
-
- gtk_widget_show (view->control);
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), view->control, NULL);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), view->control);
- g_assert (page_num != -1);
- set_current_notebook_page (shell_view, page_num);
-
- g_hash_table_insert (priv->uri_to_view, view->uri, view);
-
- return TRUE;
-}
-
-static char *
-evolution_uri_for_default_uri (EShell *shell,
- const char *default_uri)
-{
- char *uri;
- char *path;
- char *extra;
-
- if (! e_shell_parse_uri (shell, default_uri, &path, &extra))
- return NULL;
-
- uri = g_strconcat (E_SHELL_URI_PREFIX, path, "#", extra, NULL);
-
- g_free (path);
- g_free (extra);
-
- return uri;
-}
-
-static gboolean
-display_uri (EShellView *shell_view,
- const char *uri,
- gboolean add_to_history,
- gboolean queue)
-{
- EShellViewPrivate *priv;
- View *view;
- gboolean retval;
- const char *view_info;
- char *real_uri = NULL;
- char *allocated_uri = NULL;
-
- priv = shell_view->priv;
-
- if (uri == NULL && priv->uri == NULL)
- return TRUE;
-
- if (priv->uri != NULL && uri != NULL && strcmp (priv->uri, uri) == 0)
- return TRUE;
-
- bonobo_ui_engine_freeze (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)));
-
- if (uri == NULL) {
- gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), 0);
- gtk_notebook_prepend_page (GTK_NOTEBOOK (priv->notebook), create_label_for_empty_page (), NULL);
-
- set_current_notebook_page (shell_view, 0);
-
- g_free (priv->uri);
- priv->uri = real_uri = NULL;
-
- retval = TRUE;
- goto end;
- }
-
- if (strncmp (uri, E_SHELL_DEFAULTURI_PREFIX, E_SHELL_DEFAULTURI_PREFIX_LEN) == 0) {
- allocated_uri = evolution_uri_for_default_uri (e_shell_view_get_shell (shell_view), uri);
- if (allocated_uri == NULL) {
- retval = FALSE;
- goto end;
- }
-
- uri = allocated_uri;
- }
-
- view_info = strchr (uri, '#');
- if (view_info) {
- real_uri = g_strndup (uri, view_info - uri);
- view_info++;
- } else {
- view_info = "";
- real_uri = g_strdup (uri);
- }
-
- if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0) {
- retval = FALSE;
- goto end;
- }
-
- view = g_hash_table_lookup (priv->uri_to_view, real_uri);
- if (view != NULL) {
- show_existing_view (shell_view, real_uri, view);
- } else if (! create_new_view_for_uri (shell_view, real_uri, view_info)) {
- if (! queue) {
- retval = FALSE;
- goto end;
- }
-
- cleanup_delayed_selection (shell_view);
- priv->delayed_selection = g_strdup (real_uri);
- g_signal_connect_after (e_shell_get_storage_set (priv->shell),
- "new_folder", G_CALLBACK (new_folder_cb), shell_view);
- retval = TRUE;
- goto end;
- }
-
- retval = TRUE;
-
- end:
- g_free (real_uri);
-
- if (add_to_history && retval == TRUE && priv->uri != NULL)
- e_history_add (priv->history, g_strdup (priv->uri));
-
- update_navigation_buttons (shell_view);
-
- g_free (priv->set_folder_uri);
- priv->set_folder_uri = NULL;
-
- if (priv->set_folder_timeout != 0) {
- gtk_timeout_remove (priv->set_folder_timeout);
- priv->set_folder_timeout = 0;
- }
-
- update_for_current_uri (shell_view);
-
- bonobo_ui_engine_thaw (bonobo_window_get_ui_engine (BONOBO_WINDOW (shell_view)));
-
- g_signal_emit (shell_view, signals[VIEW_CHANGED], 0,
- e_shell_view_get_current_path (shell_view),
- e_shell_view_get_current_uri (shell_view),
- e_shell_view_get_current_folder_type (shell_view),
- e_shell_view_get_current_component_id (shell_view));
-
- g_free (allocated_uri);
-
- return retval;
-}
-
-gboolean
-e_shell_view_display_uri (EShellView *shell_view,
- const char *uri,
- gboolean queue)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return display_uri (shell_view, uri, TRUE, queue);
-}
-
-
-void
-e_shell_view_show_shortcut_bar (EShellView *shell_view,
- gboolean show)
-{
- EShellViewPrivate *priv;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- if (!! show == priv->shortcut_bar_shown)
- return;
-
- if (show) {
- if (! GTK_WIDGET_VISIBLE (priv->shortcut_frame)) {
- gtk_widget_show (priv->shortcut_frame);
- gtk_paned_set_position (GTK_PANED (priv->hpaned), priv->hpaned_position);
- }
- } else {
- if (GTK_WIDGET_VISIBLE (priv->shortcut_frame)) {
- /* FIXME this is a private field! */
- priv->hpaned_position = GTK_PANED (priv->hpaned)->child1_size;
-
- gtk_widget_hide (priv->shortcut_frame);
- }
- gtk_paned_set_position (GTK_PANED (priv->hpaned), 0);
- }
-
- priv->shortcut_bar_shown = !! show;
-
- g_signal_emit (shell_view, signals[SHORTCUT_BAR_VISIBILITY_CHANGED], 0,
- priv->shortcut_bar_shown);
-}
-
-void
-e_shell_view_show_folder_bar (EShellView *shell_view,
- gboolean show)
-{
- EShellViewPrivate *priv;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- if (!! show == priv->folder_bar_shown)
- return;
-
- if (show) {
- gtk_widget_show (priv->storage_set_view_box);
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), priv->view_hpaned_position);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_CLOSE);
-
- e_shell_folder_title_bar_set_title_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- FALSE);
- } else {
- if (GTK_WIDGET_VISIBLE (priv->storage_set_view_box)) {
- /* FIXME this is a private field! */
- priv->view_hpaned_position = GTK_PANED (priv->view_hpaned)->child1_size;
- gtk_widget_hide (priv->storage_set_view_box);
- }
-
- gtk_paned_set_position (GTK_PANED (priv->view_hpaned), 0);
-
- e_title_bar_set_button_mode (E_TITLE_BAR (priv->storage_set_title_bar),
- E_TITLE_BAR_BUTTON_MODE_PIN);
-
- e_shell_folder_title_bar_set_title_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->folder_title_bar),
- TRUE);
- }
-
- priv->folder_bar_shown = !! show;
-
- g_signal_emit (shell_view, signals[FOLDER_BAR_VISIBILITY_CHANGED], 0,
- priv->folder_bar_shown);
-}
-
-void
-e_shell_view_show_settings (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- const char *type;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- type = e_shell_view_get_current_folder_type (shell_view);
- e_shell_show_settings (priv->shell, type, shell_view);
-}
-
-gboolean
-e_shell_view_shortcut_bar_shown (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return shell_view->priv->shortcut_bar_shown;
-}
-
-gboolean
-e_shell_view_folder_bar_shown (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, FALSE);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE);
-
- return shell_view->priv->folder_bar_shown;
-}
-
-
-ETaskBar *
-e_shell_view_get_task_bar (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return E_TASK_BAR (shell_view->priv->task_bar);
-}
-
-EShell *
-e_shell_view_get_shell (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->shell;
-}
-
-BonoboUIComponent *
-e_shell_view_get_bonobo_ui_component (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->ui_component;
-}
-
-BonoboUIContainer *
-e_shell_view_get_bonobo_ui_container (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->ui_container;
-}
-
-GtkWidget *
-e_shell_view_get_appbar (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->appbar;
-}
-
-/**
- * e_shell_view_get_current_uri:
- * @shell_view: A pointer to an EShellView object
- *
- * Get the URI currently displayed by this shell view.
- *
- * Return value:
- **/
-const char *
-e_shell_view_get_current_uri (EShellView *shell_view)
-{
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return shell_view->priv->uri;
-}
-
-/**
- * e_shell_view_get_current_path:
- * @shell_view: A pointer to an EShellView object
- *
- * Get the path of the current displayed folder.
- *
- * Return value:
- **/
-const char *
-e_shell_view_get_current_path (EShellView *shell_view)
-{
- const char *current_uri;
- const char *current_path;
-
- current_uri = e_shell_view_get_current_uri (shell_view);
- if (current_uri == NULL)
- return NULL;
-
- if (strncmp (current_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0)
- current_path = current_uri + E_SHELL_URI_PREFIX_LEN;
- else
- current_path = NULL;
-
- return current_path;
-}
-
-const char *
-e_shell_view_get_current_physical_uri (EShellView *shell_view)
-{
- const char *current_path;
- const char *physical_uri;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- current_path = e_shell_view_get_current_path (shell_view);
- if (current_path == NULL)
- return NULL;
-
- if (get_type_for_folder (shell_view, current_path, &physical_uri) == NULL)
- return NULL;
- else
- return physical_uri;
-}
-
-const char *
-e_shell_view_get_current_folder_type (EShellView *shell_view)
-{
- const char *current_path;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- current_path = e_shell_view_get_current_path (shell_view);
- if (current_path == NULL)
- return NULL;
-
- return get_type_for_folder (shell_view, current_path, NULL);
-}
-
-const char *
-e_shell_view_get_current_component_id (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EFolderTypeRegistry *type_registry;
- EvolutionShellComponentClient *component_client;
- const char *current_folder_type;
-
- priv = shell_view->priv;
-
- type_registry = e_shell_get_folder_type_registry (priv->shell);
-
- current_folder_type = e_shell_view_get_current_folder_type (shell_view);
- if (current_folder_type == NULL)
- return NULL;
-
- component_client = e_folder_type_registry_get_handler_for_type (type_registry, current_folder_type);
- if (component_client == NULL)
- return NULL;
-
- return evolution_shell_component_client_get_id (component_client);
-}
-
-
-/**
- * e_shell_view_save_defaults:
- * @shell_view:
- **/
-void
-e_shell_view_save_defaults (EShellView *shell_view)
-{
- GConfClient *client;
- EShellViewPrivate *priv;
- EShortcutBar *shortcut_bar;
- const char *uri;
- char *file_name;
- struct stat temp;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
- shortcut_bar = E_SHORTCUT_BAR (priv->shortcut_bar);
-
- client = gconf_client_get_default ();
-
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/width",
- GTK_WIDGET (shell_view)->allocation.width, NULL);
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/height",
- GTK_WIDGET (shell_view)->allocation.height, NULL);
-
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/selected_shortcut_group",
- e_shell_view_get_current_shortcuts_group_num (shell_view), NULL);
-
- gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/show_folder_bar",
- e_shell_view_folder_bar_shown (shell_view), NULL);
- gconf_client_set_bool (client, "/apps/evolution/shell/view_defaults/show_shortcut_bar",
- e_shell_view_shortcut_bar_shown (shell_view), NULL);
-
- if (priv->shortcut_bar_shown)
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width",
- GTK_PANED (priv->hpaned)->child1_size, NULL);
- else
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/shortcut_bar/width",
- priv->hpaned_position, NULL);
-
- if (priv->folder_bar_shown)
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width",
- GTK_PANED (priv->view_hpaned)->child1_size, NULL);
- else
- gconf_client_set_int (client, "/apps/evolution/shell/view_defaults/folder_bar/width",
- priv->view_hpaned_position, NULL);
-
- uri = e_shell_view_get_current_uri (shell_view);
- if (uri != NULL)
- gconf_client_set_string (client, "/apps/evolution/shell/view_defaults/folder_path",
- uri + E_SHELL_URI_PREFIX_LEN, NULL);
- else
- gconf_client_unset (client, "/apps/evolution/shell/view_defaults/folder_path", NULL);
-
- /* If ~/evolution/config/ doesn't exist yet, make it */
- file_name = g_strdup_printf ("%s/config/", e_shell_get_local_directory (priv->shell));
- if (stat (file_name, &temp) != 0)
- mkdir (file_name, S_IRWXU);
- g_free (file_name);
-
- /* Save the expanded state for the StorageSetView. */
-
- file_name = g_strdup_printf ("%s/config/storage-set-view-expanded:default",
- e_shell_get_local_directory (priv->shell));
- e_tree_save_expanded_state (E_TREE (priv->storage_set_view),
- file_name);
- g_free (file_name);
-
- g_object_unref (client);
-}
-
-
-/* FIXME: This function could become static */
-void
-e_shell_view_set_current_shortcuts_group_num (EShellView *shell_view, int group_num)
-{
- EShellViewPrivate *priv;
- EShortcutsView *shortcuts_view;
-
- g_return_if_fail (shell_view != NULL);
- g_return_if_fail (E_IS_SHELL_VIEW (shell_view));
-
- priv = shell_view->priv;
-
- shortcuts_view = E_SHORTCUTS_VIEW (priv->shortcut_bar);
-
- e_group_bar_set_current_group_num (E_GROUP_BAR (E_SHORTCUT_BAR (shortcuts_view)), group_num, FALSE);
-}
-
-int
-e_shell_view_get_current_shortcuts_group_num (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
- EShortcutsView *shortcuts_view;
- int group;
-
- g_return_val_if_fail (shell_view != NULL, -1);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), -1);
-
- priv = shell_view->priv;
-
- shortcuts_view = E_SHORTCUTS_VIEW (priv->shortcut_bar);
-
- group = e_group_bar_get_current_group_num (E_GROUP_BAR (E_SHORTCUT_BAR (shortcuts_view)));
-
- return group;
-}
-
-
-const char *
-e_shell_view_get_folder_bar_right_click_path (EShellView *shell_view)
-{
- EShellViewPrivate *priv;
-
- g_return_val_if_fail (shell_view != NULL, NULL);
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- priv = shell_view->priv;
-
- return e_storage_set_view_get_right_click_path (E_STORAGE_SET_VIEW (priv->storage_set_view));
-}
-
-
-E_MAKE_TYPE (e_shell_view, "EShellView", EShellView, class_init, init, BONOBO_TYPE_WINDOW)
diff --git a/shell/e-shell-view.h b/shell/e-shell-view.h
deleted file mode 100644
index 7e3ec94806..0000000000
--- a/shell/e-shell-view.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-shell-view.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef _E_SHELL_VIEW_H_
-#define _E_SHELL_VIEW_H_
-
-#include "e-task-bar.h"
-
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-ui-component.h>
-#include <bonobo/bonobo-ui-container.h>
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-
-#define E_TYPE_SHELL_VIEW (e_shell_view_get_type ())
-#define E_SHELL_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_VIEW, EShellView))
-#define E_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_VIEW, EShellViewClass))
-#define E_IS_SHELL_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_VIEW))
-#define E_IS_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_VIEW))
-
-typedef struct _EShellView EShellView;
-typedef struct _EShellViewPrivate EShellViewPrivate;
-typedef struct _EShellViewClass EShellViewClass;
-
-#include "e-shell.h"
-
-#define E_SHELL_VIEW_DEFAULT_URI "evolution:/summary"
-
-struct _EShellView {
- BonoboWindow parent;
-
- EShellViewPrivate *priv;
-};
-
-struct _EShellViewClass {
- BonoboWindowClass parent_class;
-
- /* Signals. */
-
- void (* shortcut_bar_visibility_changed) (EShellView *shell_view,
- gboolean visible);
- void (* folder_bar_visibility_changed) (EShellView *shell_view,
- gboolean visible);
-
- void (* view_changed) (EShellView *shell_view,
- const char *evolution_path,
- const char *physical_uri,
- const char *folder_type,
- const char *component_id);
-};
-
-
-/* WARNING: Don't use `e_shell_view_new()' to create new views for the shell
- unless you know what you are doing; this is just the standard GTK+
- constructor thing and it won't allow the shell to do the required
- bookkeeping for the created views. Instead, the right way to create a new
- view is calling `e_shell_new_view()'. */
-
-GtkType e_shell_view_get_type (void);
-EShellView *e_shell_view_construct (EShellView *shell_view,
- EShell *shell,
- const char *uri);
-EShellView *e_shell_view_new (EShell *shell,
- const char *uri);
-
-const GNOME_Evolution_ShellView e_shell_view_get_corba_interface (EShellView *view);
-
-gboolean e_shell_view_display_uri (EShellView *shell_view,
- const char *uri,
- gboolean queue);
-
-void e_shell_view_show_shortcut_bar (EShellView *shell_view,
- gboolean show);
-gboolean e_shell_view_shortcut_bar_shown (EShellView *shell_view);
-void e_shell_view_show_folder_bar (EShellView *shell_view,
- gboolean show);
-gboolean e_shell_view_folder_bar_shown (EShellView *shell_view);
-
-void e_shell_view_show_settings (EShellView *shell_view);
-
-ETaskBar *e_shell_view_get_task_bar (EShellView *shell_view);
-EShell *e_shell_view_get_shell (EShellView *shell_view);
-BonoboUIComponent *e_shell_view_get_bonobo_ui_component (EShellView *shell_view);
-BonoboUIContainer *e_shell_view_get_bonobo_ui_container (EShellView *shell_view);
-GtkWidget *e_shell_view_get_appbar (EShellView *shell_view);
-const char *e_shell_view_get_current_uri (EShellView *shell_view);
-const char *e_shell_view_get_current_physical_uri (EShellView *shell_view);
-const char *e_shell_view_get_current_folder_type (EShellView *shell_view);
-const char *e_shell_view_get_current_component_id (EShellView *shell_view);
-const char *e_shell_view_get_current_path (EShellView *shell_view);
-
-void e_shell_view_save_defaults (EShellView *shell_view);
-
-int e_shell_view_get_current_shortcuts_group_num (EShellView *shell_view);
-void e_shell_view_set_current_shortcuts_group_num (EShellView *shell_view,
- int group_num);
-
-/* Private -- */
-const char *e_shell_view_get_folder_bar_right_click_path (EShellView *shell_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_SHELL_VIEW_H_ */
diff --git a/shell/e-shell.c b/shell/e-shell.c
index 9b803efb2a..22cb17e7b4 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -32,11 +32,9 @@
#include "e-shell-constants.h"
#include "e-shell-settings-dialog.h"
#include "e-shell-startup-wizard.h"
-#include "e-uri-schema-registry.h"
#include "e-shell-marshal.h"
-#include "evolution-shell-component-client.h"
#include "evolution-shell-component-utils.h"
#include "importer/intelligent.h"
@@ -79,7 +77,7 @@ struct _EShellPrivate {
GList *windows;
EUserCreatableItemsHandler *user_creatable_items_handler;
- EUriSchemaRegistry *uri_schema_registry;
+ /* EUriSchemaRegistry *uri_schema_registry; FIXME */
EComponentRegistry *component_registry;
/* Names for the types of the folders that have maybe crashed. */
@@ -195,6 +193,7 @@ impl_Shell_handleURI (PortableServer_Servant servant,
const CORBA_char *uri,
CORBA_Environment *ev)
{
+#if 0
EvolutionShellComponentClient *schema_handler;
EShell *shell;
EShellPrivate *priv;
@@ -239,6 +238,7 @@ impl_Shell_handleURI (PortableServer_Servant servant,
ex_GNOME_Evolution_Shell_NotFound, NULL);
return;
}
+#endif
}
static void
@@ -360,10 +360,12 @@ impl_dispose (GObject *object)
priv->user_creatable_items_handler = NULL;
}
+#if 0 /* FIXME */
if (priv->uri_schema_registry != NULL) {
g_object_unref (priv->uri_schema_registry);
priv->uri_schema_registry = NULL;
}
+#endif
for (p = priv->windows; p != NULL; p = p->next) {
EShellWindow *window;
@@ -644,6 +646,7 @@ e_shell_request_close_window (EShell *shell,
}
+#if 0 /* FIXME */
/**
* e_shell_peek_uri_schema_registry:
* @shell: An EShell object.
@@ -659,6 +662,8 @@ e_shell_peek_uri_schema_registry (EShell *shell)
return shell->priv->uri_schema_registry;
}
+#endif
+
/**
* e_shell_peek_component_registry:
diff --git a/shell/e-shell.h b/shell/e-shell.h
index 84f73f3b1d..712fda8033 100644
--- a/shell/e-shell.h
+++ b/shell/e-shell.h
@@ -39,7 +39,6 @@ typedef struct _EShellClass EShellClass;
#include "e-component-registry.h"
#include "e-shell-window.h"
-#include "e-uri-schema-registry.h"
#include "e-user-creatable-items-handler.h"
@@ -108,7 +107,10 @@ gboolean e_shell_request_close_window (EShell *shell,
EShellWindow *window);
+#if 0
EUriSchemaRegistry *e_shell_peek_uri_schema_registry (EShell *shell);
+#endif
+
EComponentRegistry *e_shell_peek_component_registry (EShell *shell);
gboolean e_shell_save_settings (EShell *shell);
diff --git a/shell/e-storage-browser.c b/shell/e-storage-browser.c
deleted file mode 100644
index d487144b83..0000000000
--- a/shell/e-storage-browser.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-browser.c
- *
- * Copyright (C) 2003 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>
- */
-
-/* TODO:
-
- - Currently it assumes that the starting path always exists, and you
- can't remove it. It might be a limitation, but it makes the logic
- very simple and robust.
-
- - Doesn't save expansion state for nodes.
-
- - Context menu handling?
-
-*/
-
-#include <config.h>
-
-#include "e-storage-browser.h"
-
-#include "e-shell-marshal.h"
-#include "e-storage-set-view.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtknotebook.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <string.h>
-
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-
-struct _EStorageBrowserPrivate {
- char *starting_path;
- char *current_path;
-
- GtkWidget *view_notebook;
- GtkWidget *storage_set_view;
- GtkWidget *storage_set_view_scrolled;
-
- GHashTable *path_to_view; /* (char *, GtkWidget *) */
-
- EStorageBrowserCreateViewCallback create_view_callback;
- void *create_view_callback_data;
-};
-
-
-enum {
- WIDGETS_GONE,
- PAGE_SWITCHED,
- NUM_SIGNALS
-};
-
-static unsigned int signals[NUM_SIGNALS] = { 0 };
-
-
-/* Callbacks. */
-
-static void
-storage_set_view_folder_selected_callback (EStorageSetView *storage_set_view,
- const char *path,
- EStorageBrowser *browser)
-{
- if (! e_storage_browser_show_path (browser, path)) {
- /* Make the selection go back to where it was. */
- e_storage_browser_show_path (browser, browser->priv->current_path);
- }
-}
-
-static void
-storage_set_removed_folder_callback (EStorageSet *storage_set,
- const char *path,
- EStorageBrowser *browser)
-{
- if (g_hash_table_lookup (browser->priv->path_to_view, path) != NULL)
- e_storage_browser_remove_view_for_path (browser, path);
-}
-
-static void
-view_notebook_weak_notify (EStorageBrowser *browser)
-{
- browser->priv->view_notebook = NULL;
-
- if (browser->priv->storage_set_view == NULL)
- g_signal_emit (browser, signals[WIDGETS_GONE], 0);
-}
-
-static void
-storage_set_view_weak_notify (EStorageBrowser *browser)
-{
- browser->priv->storage_set_view = NULL;
-
- if (browser->priv->view_notebook == NULL)
- g_signal_emit (browser, signals[WIDGETS_GONE], 0);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EStorageBrowserPrivate *priv = E_STORAGE_BROWSER (object)->priv;
-
- if (priv->view_notebook != NULL) {
- g_object_weak_unref (G_OBJECT (priv->view_notebook),
- (GWeakNotify) view_notebook_weak_notify,
- object);
- priv->view_notebook = NULL;
- }
-
- if (priv->storage_set_view != NULL) {
- g_object_weak_unref (G_OBJECT (priv->storage_set_view),
- (GWeakNotify) storage_set_view_weak_notify,
- object);
- priv->storage_set_view = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EStorageBrowserPrivate *priv = E_STORAGE_BROWSER (object)->priv;
-
- g_free (priv->starting_path);
- g_free (priv->current_path);
-
- g_hash_table_destroy (priv->path_to_view);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* Initialization. */
-
-static void
-class_init (EStorageBrowserClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_peek_parent (class);
-
- signals[WIDGETS_GONE]
- = g_signal_new ("widgets_gone",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EStorageBrowserClass, widgets_gone),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[PAGE_SWITCHED]
- = g_signal_new ("page_switched",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EStorageBrowserClass, page_switched),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER_POINTER,
- G_TYPE_NONE, 2,
- G_TYPE_POINTER, G_TYPE_POINTER);
-}
-
-static void
-init (EStorageBrowser *browser)
-{
- EStorageBrowserPrivate *priv;
-
- priv = g_new0 (EStorageBrowserPrivate, 1);
-
- priv->path_to_view = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_object_unref);
-
- priv->view_notebook = gtk_notebook_new ();
- g_object_weak_ref (G_OBJECT (priv->view_notebook), (GWeakNotify) view_notebook_weak_notify, browser);
-
- gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->view_notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->view_notebook), FALSE);
-
- browser->priv = priv;
-}
-
-
-EStorageBrowser *
-e_storage_browser_new (EStorageSet *storage_set,
- const char *starting_path,
- EStorageBrowserCreateViewCallback create_view_callback,
- void *callback_data)
-{
- EStorageBrowser *new;
-
- g_return_val_if_fail (create_view_callback != NULL, NULL);
-
- new = g_object_new (e_storage_browser_get_type (), NULL);
-
- new->priv->create_view_callback = create_view_callback;
- new->priv->create_view_callback_data = callback_data;
- new->priv->starting_path = g_strdup (starting_path);
-
- new->priv->storage_set_view = e_storage_set_create_new_view (storage_set, NULL);
- gtk_widget_show (new->priv->storage_set_view);
-
- new->priv->storage_set_view_scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (new->priv->storage_set_view_scrolled), GTK_SHADOW_IN);
- gtk_container_add (GTK_CONTAINER (new->priv->storage_set_view_scrolled), new->priv->storage_set_view);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (new->priv->storage_set_view_scrolled),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- g_object_weak_ref (G_OBJECT (new->priv->storage_set_view), (GWeakNotify) storage_set_view_weak_notify, new);
-
- g_signal_connect_object (new->priv->storage_set_view,
- "folder_selected", G_CALLBACK (storage_set_view_folder_selected_callback),
- G_OBJECT (new), 0);
- g_signal_connect_object (e_storage_set_view_get_storage_set (E_STORAGE_SET_VIEW (new->priv->storage_set_view)),
- "removed_folder", G_CALLBACK (storage_set_removed_folder_callback),
- G_OBJECT (new), 0);
-
- if (! e_storage_browser_show_path (new, starting_path)) {
- g_object_unref (new);
- return NULL;
- }
-
- return new;
-}
-
-
-GtkWidget *
-e_storage_browser_peek_tree_widget (EStorageBrowser *browser)
-{
- return browser->priv->storage_set_view;
-}
-
-GtkWidget *
-e_storage_browser_peek_tree_widget_scrolled (EStorageBrowser *browser)
-{
- return browser->priv->storage_set_view_scrolled;
-}
-
-GtkWidget *
-e_storage_browser_peek_view_widget (EStorageBrowser *browser)
-{
- return browser->priv->view_notebook;
-}
-
-EStorageSet *
-e_storage_browser_peek_storage_set (EStorageBrowser *browser)
-{
- return e_storage_set_view_get_storage_set (E_STORAGE_SET_VIEW (browser->priv->storage_set_view));
-}
-
-gboolean
-e_storage_browser_show_path (EStorageBrowser *browser,
- const char *path)
-{
- EStorageBrowserPrivate *priv = browser->priv;
- GtkWidget *current_view;
- GtkWidget *existing_view;
- GtkWidget *new_view;
- GtkNotebook *notebook;
-
- notebook = GTK_NOTEBOOK (priv->view_notebook);
-
- current_view = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->view_notebook),
- gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->view_notebook)));
-
- existing_view = g_hash_table_lookup (priv->path_to_view, path);
- if (existing_view != NULL) {
- gtk_notebook_set_current_page (notebook, gtk_notebook_page_num (notebook, existing_view));
- g_print ("page switched\n");
- g_signal_emit (browser, signals[PAGE_SWITCHED], 0, current_view, existing_view);
- return TRUE;
- }
-
- new_view = (* priv->create_view_callback) (browser, path, priv->create_view_callback_data);
- if (new_view == NULL)
- return FALSE;
-
- gtk_widget_show (new_view);
- gtk_notebook_append_page (notebook, new_view, NULL);
- gtk_notebook_set_current_page (notebook, gtk_notebook_page_num (notebook, new_view));
-
- g_print ("page switched\n");
- g_signal_emit (browser, signals[PAGE_SWITCHED], 0, current_view, new_view);
-
- g_object_ref(new_view);
- g_hash_table_insert (priv->path_to_view, g_strdup (path), new_view);
-
- g_free (priv->current_path);
- priv->current_path = g_strdup (path);
-
- e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), path);
-
- return TRUE;
-}
-
-void
-e_storage_browser_remove_view_for_path (EStorageBrowser *browser,
- const char *path)
-{
- GtkWidget *view;
-
- if (strcmp (path, browser->priv->starting_path) == 0) {
- g_warning (G_GNUC_FUNCTION ": cannot remove starting view");
- return;
- }
-
- view = g_hash_table_lookup (browser->priv->path_to_view, path);
- if (view == NULL) {
- g_warning (G_GNUC_FUNCTION ": no view for %s", path);
- return;
- }
-
- g_hash_table_remove (browser->priv->path_to_view, path);
- gtk_widget_destroy (view);
-
- e_storage_browser_show_path (browser, browser->priv->starting_path);
-}
-
-
-E_MAKE_TYPE (e_storage_browser, "EStorageBrowser", EStorageBrowser, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-browser.h b/shell/e-storage-browser.h
deleted file mode 100644
index f500134704..0000000000
--- a/shell/e-storage-browser.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-browser.h
- *
- * Copyright (C) 2003 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_STORAGE_BROWSER_H_
-#define _E_STORAGE_BROWSER_H_
-
-#include "e-storage-set.h"
-
-#include <glib-object.h>
-#include <gtk/gtkwidget.h>
-
-
-#define E_TYPE_STORAGE_BROWSER (e_storage_browser_get_type ())
-#define E_STORAGE_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_STORAGE_BROWSER, EStorageBrowser))
-#define E_STORAGE_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_BROWSER, EStorageBrowserClass))
-#define E_IS_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_STORAGE_BROWSER))
-#define E_IS_BROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_BROWSER))
-
-
-typedef struct _EStorageBrowser EStorageBrowser;
-typedef struct _EStorageBrowserPrivate EStorageBrowserPrivate;
-typedef struct _EStorageBrowserClass EStorageBrowserClass;
-
-/* FIXME: Use a GClosure instead of void *? */
-typedef GtkWidget * (* EStorageBrowserCreateViewCallback) (EStorageBrowser *browser,
- const char *path,
- void *data);
-
-
-struct _EStorageBrowser {
- GObject parent;
-
- EStorageBrowserPrivate *priv;
-};
-
-struct _EStorageBrowserClass {
- GObjectClass parent_class;
-
- void (* widgets_gone) (EStorageBrowser *browser);
-
- void (* page_switched) (EStorageBrowser *browser,
- GtkWidget *old_page,
- GtkWidget *new_page);
-};
-
-
-GType e_storage_browser_get_type (void);
-
-EStorageBrowser *e_storage_browser_new (EStorageSet *storage_set,
- const char *starting_path,
- EStorageBrowserCreateViewCallback create_view_callback,
- void *create_view_callback_data);
-
-GtkWidget *e_storage_browser_peek_tree_widget (EStorageBrowser *browser);
-GtkWidget *e_storage_browser_peek_tree_widget_scrolled (EStorageBrowser *browser);
-GtkWidget *e_storage_browser_peek_view_widget (EStorageBrowser *browser);
-EStorageSet *e_storage_browser_peek_storage_set (EStorageBrowser *browser);
-
-gboolean e_storage_browser_show_path (EStorageBrowser *browser,
- const char *path);
-void e_storage_browser_remove_view_for_path (EStorageBrowser *browser,
- const char *path);
-
-
-#endif /* _E_STORAGE_BROWSER_H_ */
diff --git a/shell/e-storage-set-view.c b/shell/e-storage-set-view.c
deleted file mode 100644
index 1738836216..0000000000
--- a/shell/e-storage-set-view.c
+++ /dev/null
@@ -1,2042 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set-view.c
- *
- * Copyright (C) 2000, 2001, 2002 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
- * Etree-ification: Chris Toshok
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage-set-view.h"
-
-#include "e-util/e-gtk-utils.h"
-
-#include "e-corba-storage.h"
-#include "e-icon-factory.h"
-#include "e-folder-dnd-bridge.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <gal/util/e-util.h>
-#include <gal/widgets/e-gui-utils.h>
-#include <gal/e-table/e-tree-memory-callbacks.h>
-#include <gal/e-table/e-cell-text.h>
-#include <gal/e-table/e-cell-toggle.h>
-#include <gal/e-table/e-cell-tree.h>
-
-#include <libgnome/gnome-util.h>
-#include <libgnomeui/gnome-popup-menu.h>
-
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-ui-util.h>
-
-#include <gtk/gtksignal.h>
-
-#include <string.h>
-
-#include "check-empty.xpm"
-#include "check-filled.xpm"
-#include "check-missing.xpm"
-
-
-static GdkPixbuf *checks [3];
-
-/*#define DEBUG_XML*/
-
-#define ROOT_NODE_NAME "/RootNode"
-
-#define PARENT_TYPE E_TREE_TYPE
-static ETreeClass *parent_class = NULL;
-
-struct _EStorageSetViewPrivate {
- EStorageSet *storage_set;
-
- BonoboUIComponent *ui_component;
- BonoboUIContainer *ui_container;
-
- ETreeModel *etree_model;
- ETreePath root_node;
-
- GHashTable *path_to_etree_node;
-
- GHashTable *type_name_to_pixbuf;
-
- const GtkTargetEntry *drag_types;
- int num_drag_types;
-
- const GtkTargetEntry *drop_types;
- int num_drop_types;
-
- /* Path of the row selected by the latest "cursor_activated" signal. */
- char *selected_row_path;
-
- /* Path of the row selected by a right click. */
- char *right_click_row_path;
-
- unsigned int show_folders : 1;
- unsigned int show_checkboxes : 1;
- unsigned int allow_dnd : 1;
- unsigned int search_enabled : 1;
-
- /* The `Evolution::ShellComponentDnd::SourceFolder' interface for the
- folder we are dragging from, or CORBA_OBJECT_NIL if no dragging is
- happening. */
- GNOME_Evolution_ShellComponentDnd_SourceFolder drag_corba_source_interface;
-
- /* Source context information. NULL if no dragging is in progress. */
- GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *drag_corba_source_context;
-
- /* The data. */
- GNOME_Evolution_ShellComponentDnd_Data *drag_corba_data;
-
- GHashTable *checkboxes;
-
- /* Callback to determine whether the row should have a checkbox or
- not, when show_checkboxes is TRUE. */
- EStorageSetViewHasCheckBoxFunc has_checkbox_func;
- void *has_checkbox_func_data;
-};
-
-
-enum {
- FOLDER_SELECTED,
- FOLDER_OPENED,
- FOLDER_DRAGGED,
- FOLDER_RECEIVE_DROP,
- FOLDER_CONTEXT_MENU_POPPING_UP,
- FOLDER_CONTEXT_MENU_POPPED_DOWN,
- CHECKBOXES_CHANGED,
- LAST_SIGNAL
-};
-
-static unsigned int signals[LAST_SIGNAL] = { 0 };
-
-
-/* Forward declarations. */
-
-static void setup_folder_changed_callbacks (EStorageSetView *storage_set_view,
- EFolder *folder,
- const char *path);
-/* Sorting callbacks. */
-
-static int
-storage_sort_callback (ETreeMemory *etmm,
- ETreePath node1,
- ETreePath node2,
- void *closure)
-{
- char *folder_path_1;
- char *folder_path_2;
- gboolean path_1_local;
- gboolean path_2_local;
-
- folder_path_1 = e_tree_memory_node_get_data(etmm, node1);
- folder_path_2 = e_tree_memory_node_get_data(etmm, node2);
-
- /* FIXME bad hack to put the "my evolution" and "local" storages on
- top. */
-
- if (strcmp (folder_path_1, E_PATH_SEPARATOR_S E_SUMMARY_STORAGE_NAME) == 0)
- return -1;
- if (strcmp (folder_path_2, E_PATH_SEPARATOR_S E_SUMMARY_STORAGE_NAME) == 0)
- return +1;
-
- path_1_local = ! strcmp (folder_path_1, E_PATH_SEPARATOR_S E_LOCAL_STORAGE_NAME);
- path_2_local = ! strcmp (folder_path_2, E_PATH_SEPARATOR_S E_LOCAL_STORAGE_NAME);
-
- if (path_1_local && path_2_local)
- return 0;
- if (path_1_local)
- return -1;
- if (path_2_local)
- return 1;
-
- return g_utf8_collate (e_tree_model_value_at (E_TREE_MODEL (etmm), node1, 0),
- e_tree_model_value_at (E_TREE_MODEL (etmm), node2, 0));
-}
-
-static int
-folder_sort_callback (ETreeMemory *etmm,
- ETreePath node1,
- ETreePath node2,
- void *closure)
-{
- EStorageSetViewPrivate *priv;
- EFolder *folder_1, *folder_2;
- const char *folder_path_1, *folder_path_2;
- int priority_1, priority_2;
-
- priv = E_STORAGE_SET_VIEW (closure)->priv;
-
- folder_path_1 = e_tree_memory_node_get_data(etmm, node1);
- folder_path_2 = e_tree_memory_node_get_data(etmm, node2);
-
- folder_1 = e_storage_set_get_folder (priv->storage_set, folder_path_1);
- folder_2 = e_storage_set_get_folder (priv->storage_set, folder_path_2);
-
- priority_1 = e_folder_get_sorting_priority (folder_1);
- priority_2 = e_folder_get_sorting_priority (folder_2);
-
- if (priority_1 == priority_2)
- return g_utf8_collate (e_tree_model_value_at (E_TREE_MODEL (etmm), node1, 0),
- e_tree_model_value_at (E_TREE_MODEL (etmm), node2, 0));
- else if (priority_1 < priority_2)
- return -1;
- else /* priority_1 > priority_2 */
- return +1;
-}
-
-
-/* Helper functions. */
-
-static gboolean
-add_node_to_hash (EStorageSetView *storage_set_view,
- const char *path,
- ETreePath node)
-{
- EStorageSetViewPrivate *priv;
- char *hash_path;
-
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage_set_view->priv;
-
- if (g_hash_table_lookup (priv->path_to_etree_node, path) != NULL) {
- g_warning ("EStorageSetView: Node already existing while adding -- %s", path);
- return FALSE;
- }
-
- hash_path = g_strdup (path);
-
- g_hash_table_insert (priv->path_to_etree_node, hash_path, node);
-
- return TRUE;
-}
-
-static ETreePath
-lookup_node_in_hash (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL)
- g_warning ("EStorageSetView: Node not found while updating -- %s", path);
-
- return node;
-}
-
-static ETreePath
-remove_node_from_hash (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL) {
- g_warning ("EStorageSetView: Node not found while removing -- %s", path);
- return NULL;
- }
-
- g_hash_table_remove (priv->path_to_etree_node, path);
-
- return node;
-}
-
-static GdkPixbuf *
-get_pixbuf_for_folder (EStorageSetView *storage_set_view,
- EFolder *folder)
-{
- const char *type_name;
- EStorageSetViewPrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
- EStorageSet *storage_set;
- GdkPixbuf *icon_pixbuf;
- GdkPixbuf *scaled_pixbuf;
- const char *custom_icon_name;
- int icon_pixbuf_width, icon_pixbuf_height;
-
- priv = storage_set_view->priv;
-
- custom_icon_name = e_folder_get_custom_icon_name (folder);
- if (custom_icon_name != NULL)
- return e_icon_factory_get_icon (custom_icon_name, TRUE);
-
- type_name = e_folder_get_type_string (folder);
-
- scaled_pixbuf = g_hash_table_lookup (priv->type_name_to_pixbuf, type_name);
- if (scaled_pixbuf != NULL)
- return scaled_pixbuf;
-
- storage_set = priv->storage_set;
- folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
-
- icon_pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry,
- type_name, TRUE);
-
- if (icon_pixbuf == NULL)
- return NULL;
-
- icon_pixbuf_width = gdk_pixbuf_get_width (icon_pixbuf);
- icon_pixbuf_height = gdk_pixbuf_get_height (icon_pixbuf);
-
- if (icon_pixbuf_width == E_SHELL_MINI_ICON_SIZE && icon_pixbuf_height == E_SHELL_MINI_ICON_SIZE) {
- scaled_pixbuf = g_object_ref (icon_pixbuf);
- } else {
- scaled_pixbuf = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (icon_pixbuf),
- gdk_pixbuf_get_has_alpha (icon_pixbuf),
- gdk_pixbuf_get_bits_per_sample (icon_pixbuf),
- E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE);
-
- gdk_pixbuf_scale (icon_pixbuf, scaled_pixbuf,
- 0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE,
- 0.0, 0.0,
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_width (icon_pixbuf),
- (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_height (icon_pixbuf),
- GDK_INTERP_HYPER);
- }
-
- g_hash_table_insert (priv->type_name_to_pixbuf, g_strdup (type_name), scaled_pixbuf);
-
- return scaled_pixbuf;
-}
-
-/* The weakref callback for priv->ui_component. */
-
-static void
-ui_container_destroy_notify (void *data, GObject *deadbeef)
-{
- EStorageSetViewPrivate *priv = (EStorageSetViewPrivate *) data;
-
- priv->ui_container = NULL;
-}
-
-static GtkTargetList *
-create_target_list_for_node (EStorageSetView *view, ETreePath node)
-{
- EStorageSetViewPrivate *priv = view->priv;
- GtkTargetList *target_list;
-
- target_list = gtk_target_list_new (priv->drag_types, priv->num_drag_types);
-
- return target_list;
-}
-
-/* Folder context menu. */
-
-struct _FolderPropertyItemsData {
- EStorageSetView *storage_set_view;
- ECorbaStorage *corba_storage;
- int num_items;
-};
-typedef struct _FolderPropertyItemsData FolderPropertyItemsData;
-
-static void
-folder_property_item_verb_callback (BonoboUIComponent *component,
- void *user_data,
- const char *cname)
-{
- FolderPropertyItemsData *data;
- GtkWidget *toplevel_widget;
- const char *p, *path;
- int item_number;
-
- data = (FolderPropertyItemsData *) user_data;
-
- p = strrchr (cname, ':');
- g_assert (p != NULL);
-
- item_number = atoi (p + 1) - 1;
- g_assert (item_number >= 0);
-
- toplevel_widget = gtk_widget_get_toplevel (GTK_WIDGET (data->storage_set_view));
-
- path = strchr (data->storage_set_view->priv->right_click_row_path + 1, E_PATH_SEPARATOR);
- if (path == NULL)
- path = "/";
- e_corba_storage_show_folder_properties (data->corba_storage, path,
- item_number, toplevel_widget->window);
-}
-
-static FolderPropertyItemsData *
-setup_folder_properties_items_if_corba_storage_clicked (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- EStorage *storage;
- GSList *items, *p;
- GString *xml;
- FolderPropertyItemsData *data;
- const char *slash;
- char *storage_name;
- int num_property_items;
- int i;
-
- priv = storage_set_view->priv;
-
- slash = strchr (priv->right_click_row_path + 1, E_PATH_SEPARATOR);
- if (slash == NULL)
- storage_name = g_strdup (priv->right_click_row_path + 1);
-
- else
- storage_name = g_strndup (priv->right_click_row_path + 1,
- slash - (priv->right_click_row_path + 1));
-
- storage = e_storage_set_get_storage (priv->storage_set, storage_name);
- g_free (storage_name);
-
- if (storage == NULL || ! E_IS_CORBA_STORAGE (storage))
- return 0;
-
- items = e_corba_storage_get_folder_property_items (E_CORBA_STORAGE (storage));
- if (items == NULL)
- return 0;
-
- xml = g_string_new ("<placeholder name=\"StorageFolderPropertiesPlaceholder\">");
- g_string_append (xml, "<separator f=\"\" name=\"EStorageSetViewFolderPropertiesSeparator\"/>");
-
- num_property_items = 0;
- for (p = items; p != NULL; p = p->next) {
- const ECorbaStoragePropertyItem *item;
- char *encoded_label;
- char *encoded_tooltip;
-
- item = (const ECorbaStoragePropertyItem *) p->data;
- num_property_items ++;
-
- g_string_append_printf (xml, "<menuitem name=\"EStorageSetView:FolderPropertyItem:%d\"",
- num_property_items);
- g_string_append_printf (xml, " verb=\"EStorageSetView:FolderPropertyItem:%d\"",
- num_property_items);
-
- encoded_tooltip = bonobo_ui_util_encode_str (item->tooltip);
- g_string_append_printf (xml, " tip=\"%s\"", encoded_tooltip);
-
- encoded_label = bonobo_ui_util_encode_str (item->label);
- g_string_append_printf (xml, " label=\"%s\"/>", encoded_label);
-
- g_free (encoded_tooltip);
- g_free (encoded_label);
- }
-
- g_string_append (xml, "</placeholder>");
-
- data = g_new (FolderPropertyItemsData, 1);
- data->storage_set_view = storage_set_view;
- data->corba_storage = E_CORBA_STORAGE (storage);
- data->num_items = num_property_items;
-
- g_object_ref (data->storage_set_view);
- g_object_ref (data->corba_storage);
-
- for (i = 1; i <= num_property_items; i ++) {
- char *verb;
-
- verb = g_strdup_printf ("EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_add_verb (priv->ui_component, verb,
- folder_property_item_verb_callback,
- data);
- }
-
- bonobo_ui_component_set (priv->ui_component, "/popups/FolderPopup", xml->str, NULL);
-
- g_string_free (xml, TRUE);
- e_corba_storage_free_property_items_list (items);
-
- return data;
-}
-
-static void
-remove_property_items (EStorageSetView *storage_set_view,
- FolderPropertyItemsData *data)
-{
- EStorageSetViewPrivate *priv;
-
- priv = storage_set_view->priv;
-
- if (data->num_items > 0) {
- int i;
-
- bonobo_ui_component_rm (priv->ui_component,
- "/popups/FolderPopup/StorageFolderPropertiesPlaceholder/EStorageSetViewFolderPropertiesSeparator",
- NULL);
-
- for (i = 1; i <= data->num_items; i ++) {
- char *path;
- char *verb;
-
- path = g_strdup_printf ("/popups/FolderPopup/StorageFolderPropertiesPlaceholder/EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_rm (priv->ui_component, path, NULL);
- g_free (path);
-
- verb = g_strdup_printf ("EStorageSetView:FolderPropertyItem:%d", i);
- bonobo_ui_component_remove_verb (priv->ui_component, verb);
- g_free (verb);
- }
- }
-
- g_object_unref (data->storage_set_view);
- g_object_unref (data->corba_storage);
-
- g_free (data);
-}
-
-static void
-popup_folder_menu (EStorageSetView *storage_set_view,
- GdkEventButton *event)
-{
- EvolutionShellComponentClient *handler;
- EStorageSetViewPrivate *priv;
- EFolderTypeRegistry *folder_type_registry;
- EFolder *folder;
- GtkWidget *menu, *window;
- FolderPropertyItemsData *folder_property_items_data;
-
- priv = storage_set_view->priv;
-
- folder = e_storage_set_get_folder (priv->storage_set, priv->right_click_row_path);
- g_object_ref (folder);
-
- folder_type_registry = e_storage_set_get_folder_type_registry (priv->storage_set);
- g_assert (folder_type_registry != NULL);
-
- handler = e_folder_type_registry_get_handler_for_type (folder_type_registry,
- e_folder_get_type_string (folder));
- menu = gtk_menu_new ();
-
- window = gtk_widget_get_ancestor (GTK_WIDGET (storage_set_view),
- BONOBO_TYPE_WINDOW);
- bonobo_window_add_popup (BONOBO_WINDOW (window),
- GTK_MENU (menu), "/popups/FolderPopup");
-
- bonobo_ui_component_set (priv->ui_component,
- "/popups/FolderPopup/ComponentPlaceholder",
- "<placeholder name=\"Items\"/>", NULL);
-
- if (handler != NULL)
- evolution_shell_component_client_populate_folder_context_menu (handler,
- priv->ui_container,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder));
-
- folder_property_items_data = setup_folder_properties_items_if_corba_storage_clicked (storage_set_view);
-
- gtk_widget_show (GTK_WIDGET (menu));
-
- gnome_popup_menu_do_popup_modal (GTK_WIDGET (menu), NULL, NULL, event, NULL,
- GTK_WIDGET (storage_set_view));
-
- if (folder_property_items_data != NULL)
- remove_property_items (storage_set_view, folder_property_items_data);
-
- if (handler != NULL)
- evolution_shell_component_client_unpopulate_folder_context_menu (handler,
- priv->ui_container,
- e_folder_get_physical_uri (folder),
- e_folder_get_type_string (folder));
-
- g_object_unref (folder);
- gtk_widget_destroy (GTK_WIDGET (menu));
-
- e_tree_right_click_up (E_TREE (storage_set_view));
-}
-
-
-/* GtkObject methods. */
-
-static void
-pixbuf_free_func (gpointer key, gpointer value, gpointer user_data)
-{
- g_free (key);
- g_object_unref ((GdkPixbuf*)value);
-}
-
-static void
-impl_dispose (GObject *object)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (object);
- priv = storage_set_view->priv;
-
- if (priv->etree_model != NULL) {
- /* Destroy the tree. */
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), priv->root_node);
- g_object_unref (priv->etree_model);
- priv->etree_model = NULL;
-
- /* (The data in the hash table was all freed by freeing the tree.) */
- g_hash_table_destroy (priv->path_to_etree_node);
- priv->path_to_etree_node = NULL;
- }
-
- if (priv->storage_set != NULL) {
- g_object_unref (priv->storage_set);
- priv->storage_set = NULL;
- }
-
- if (priv->drag_corba_source_interface != CORBA_OBJECT_NIL) {
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- g_assert (priv->drag_corba_source_context != NULL);
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag (priv->drag_corba_source_interface,
- priv->drag_corba_source_context,
- &ev);
-
- Bonobo_Unknown_unref (priv->drag_corba_source_interface, &ev);
- CORBA_Object_release (priv->drag_corba_source_interface, &ev);
-
- CORBA_exception_free (&ev);
-
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->ui_component != NULL) {
- bonobo_object_unref (BONOBO_OBJECT (priv->ui_component));
- priv->ui_component = NULL;
- }
-
- /* (No unreffing for priv->ui_container since we use a weakref.) */
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (object);
- priv = storage_set_view->priv;
-
- g_hash_table_foreach (priv->type_name_to_pixbuf, pixbuf_free_func, NULL);
- g_hash_table_destroy (priv->type_name_to_pixbuf);
-
- if (priv->checkboxes != NULL) {
- g_hash_table_foreach (priv->checkboxes, (GHFunc) g_free, NULL);
- g_hash_table_destroy (priv->checkboxes);
- }
-
- if (priv->drag_corba_source_context != NULL)
- CORBA_free (priv->drag_corba_source_context);
-
- if (priv->drag_corba_data != NULL)
- CORBA_free (priv->drag_corba_data);
-
- g_free (priv->selected_row_path);
- g_free (priv->right_click_row_path);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* ETree methods. */
-
-/* -- Source-side DnD. */
-
-static gint
-impl_tree_start_drag (ETree *tree, int row, ETreePath path, int col, GdkEvent *event)
-{
- EStorageSetView *view = (EStorageSetView *) tree;
- GdkDragContext *context;
- GtkTargetList *target_list;
- GdkDragAction actions;
-
- if (!view->priv->allow_dnd)
- return FALSE;
-
- target_list = create_target_list_for_node (view, path);
- if (target_list == NULL)
- return FALSE;
-
- actions = GDK_ACTION_MOVE | GDK_ACTION_COPY;
-
- context = e_tree_drag_begin (tree, row, col, target_list, actions, 1, event);
-
- gtk_drag_set_icon_default (context);
-
- gtk_target_list_unref (target_list);
-
- return TRUE;
-}
-
-static void
-impl_tree_drag_begin (ETree *etree, int row, ETreePath path, int col, GdkDragContext *context)
-{
- EStorageSetView *view = (EStorageSetView *) etree;
- EStorageSetViewPrivate *priv = view->priv;
-
- g_free (priv->selected_row_path);
- priv->selected_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model), path));
-}
-
-static void
-impl_tree_drag_data_get (ETree *etree, int drag_row, ETreePath drag_path, int drag_col,
- GdkDragContext *context, GtkSelectionData *selection, guint info, guint time)
-{
- EStorageSetView *view = (EStorageSetView *) etree;
- EStorageSetViewPrivate *priv = view->priv;
- const char *path;
-
- path = e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model),
- e_tree_node_at_row (E_TREE (view), drag_row));
-
- g_assert (path != NULL);
-
- g_signal_emit (view, signals[FOLDER_DRAGGED], 0, path, context, selection, info, time);
-}
-
-/* -- Destination-side DnD. */
-
-static gboolean
-find_target_drop_type (EStorageSetViewPrivate *priv, GdkDragContext *context, GdkAtom *atom)
-{
- char *target;
- GList *t;
- int i;
-
- for (t = context->targets; t != NULL; t = t->next) {
- target = gdk_atom_name (t->data);
- for (i = 0; i < priv->num_drop_types; i++) {
- if (!strcmp (target, priv->drop_types[i].target)) {
- g_free (target);
-
- if (atom)
- *atom = t->data;
-
- return TRUE;
- }
- }
-
- g_free (target);
- }
-
- return FALSE;
-}
-
-static gboolean
-impl_tree_drag_motion (ETree *etree, int row, ETreePath path, int col,
- GdkDragContext *context, int x, int y, guint time)
-{
- EStorageSetView *view = (EStorageSetView *) etree;
- EStorageSetViewPrivate *priv = view->priv;
-
- if (!priv->allow_dnd)
- return FALSE;
-
- e_tree_drag_highlight (E_TREE (view), row, -1);
-
- if (find_target_drop_type (priv, context, NULL)) {
- gdk_drag_status (context, context->suggested_action, time);
-
- return TRUE;
- }
-
- gdk_drag_status (context, 0, time);
-
- return FALSE;
-}
-
-static void
-impl_tree_drag_leave (ETree *etree, int row, ETreePath path, int col, GdkDragContext *context, guint time)
-{
- e_tree_drag_unhighlight (etree);
-}
-
-static gboolean
-impl_tree_drag_drop (ETree *etree, int row, ETreePath path, int col, GdkDragContext *context,
- int x, int y, guint time)
-{
- EStorageSetView *view = (EStorageSetView *) etree;
- EStorageSetViewPrivate *priv = view->priv;
- GdkAtom atom;
-
- e_tree_drag_unhighlight (etree);
-
- if (!find_target_drop_type (priv, context, &atom))
- return FALSE;
-
- gtk_drag_get_data ((GtkWidget *) etree, context, atom, time);
-
- return FALSE;
-}
-
-static void
-impl_tree_drag_data_received (ETree *etree, int row, ETreePath path, int col,
- GdkDragContext *context, int x, int y,
- GtkSelectionData *selection, guint info, guint time)
-{
- EStorageSetView *view = (EStorageSetView *) etree;
- EStorageSetViewPrivate *priv = view->priv;
- const char *folder_path;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model),
- e_tree_node_at_row (E_TREE (view), row));
-
- g_assert (folder_path != NULL);
-
- g_signal_emit (view, signals[FOLDER_RECEIVE_DROP], 0, folder_path, context, selection, info, time);
-}
-
-static gboolean
-impl_right_click (ETree *etree,
- int row,
- ETreePath path,
- int col,
- GdkEvent *event)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (etree);
- priv = storage_set_view->priv;
-
- /* Avoid recursion which would lock up the event loop (#48388). */
- if (priv->right_click_row_path != NULL)
- return TRUE;
-
- priv->right_click_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY(priv->etree_model), path));
-
- if (priv->ui_container) {
- g_signal_emit (storage_set_view, signals[FOLDER_CONTEXT_MENU_POPPING_UP], 0, priv->right_click_row_path);
-
- popup_folder_menu (storage_set_view, (GdkEventButton *) event);
-
- g_signal_emit (storage_set_view, signals[FOLDER_CONTEXT_MENU_POPPED_DOWN], 0);
- }
-
- g_free (priv->right_click_row_path);
- priv->right_click_row_path = NULL;
-
- return TRUE;
-}
-
-static void
-impl_cursor_activated (ETree *tree,
- int row,
- ETreePath path)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
-
- storage_set_view = E_STORAGE_SET_VIEW (tree);
-
- priv = storage_set_view->priv;
-
- g_free (priv->selected_row_path);
- if (path) {
- priv->selected_row_path = g_strdup (e_tree_memory_node_get_data (E_TREE_MEMORY (priv->etree_model), path));
-
- g_signal_emit (storage_set_view, signals[FOLDER_SELECTED], 0,
- priv->selected_row_path);
- }
- else
- priv->selected_row_path = NULL;
-}
-
-
-/* ETreeModel Methods */
-
-static gboolean
-path_is_storage (ETreeModel *etree,
- ETreePath tree_path)
-{
- return e_tree_model_node_depth (etree, tree_path) == 1;
-}
-
-static GdkPixbuf*
-etree_icon_at (ETreeModel *etree,
- ETreePath tree_path,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- storage_set = storage_set_view->priv->storage_set;
-
- path = (char*) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
-
- folder = e_storage_set_get_folder (storage_set, path);
- if (folder == NULL)
- return NULL;
-
- /* No icon for a storage with children (or with no real root folder) */
- if (path_is_storage (etree, tree_path)) {
- EStorage *storage;
- GList *subfolder_paths;
-
- if (! strcmp (e_folder_get_type_string (folder), "noselect"))
- return NULL;
-
- storage = e_storage_set_get_storage (storage_set, path + 1);
- subfolder_paths = e_storage_get_subfolder_paths (storage, "/");
- if (subfolder_paths != NULL) {
- e_free_string_list (subfolder_paths);
- return NULL;
- }
- }
-
- return get_pixbuf_for_folder (storage_set_view, folder);
-}
-
-/* This function returns the number of columns in our ETreeModel. */
-static int
-etree_column_count (ETreeModel *etc,
- void *data)
-{
- return 3;
-}
-
-static gboolean
-etree_has_save_id (ETreeModel *etm,
- void *data)
-{
- return TRUE;
-}
-
-static gchar *
-etree_get_save_id (ETreeModel *etm,
- ETreePath node,
- void *model_data)
-{
- return g_strdup(e_tree_memory_node_get_data (E_TREE_MEMORY(etm), node));
-}
-
-static gboolean
-etree_has_get_node_by_id (ETreeModel *etm,
- void *data)
-{
- return TRUE;
-}
-
-static ETreePath
-etree_get_node_by_id (ETreeModel *etm,
- const char *save_id,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
-
- return g_hash_table_lookup (storage_set_view->priv->path_to_etree_node, save_id);
-}
-
-static gboolean
-has_checkbox (EStorageSetView *storage_set_view, ETreePath tree_path)
-{
- EStorageSetViewPrivate *priv;
- const char *folder_path;
-
- priv = storage_set_view->priv;
-
- folder_path = e_tree_memory_node_get_data (E_TREE_MEMORY(storage_set_view->priv->etree_model),
- tree_path);
- g_assert (folder_path != NULL);
-
- if (strchr (folder_path + 1, '/') == NULL) {
- /* If it's a toplevel, never allow checking it. */
- return FALSE;
- }
-
- if (priv->has_checkbox_func)
- return (* priv->has_checkbox_func) (priv->storage_set,
- folder_path,
- priv->has_checkbox_func_data);
-
- return TRUE;
-}
-
-static void *
-etree_value_at (ETreeModel *etree,
- ETreePath tree_path,
- int col,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- EStorageSet *storage_set;
- EFolder *folder;
- char *path;
- const char *folder_name;
- int unread_count;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- priv = storage_set_view->priv;
- storage_set = priv->storage_set;
-
- /* Storages are always highlighted. */
- if (col == 1 && path_is_storage (etree, tree_path))
- return (void *) TRUE;
-
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
-
- folder = e_storage_set_get_folder (storage_set, path);
-
- switch (col) {
- case 0: /* Title */
- if (folder == NULL)
- return (void *) "?";
- folder_name = e_folder_get_name (folder);
- unread_count = e_folder_get_unread_count (folder);
-
- if (unread_count > 0) {
- char *name_with_unread;
-
- name_with_unread = g_strdup_printf ("%s (%d)", folder_name,
- unread_count);
- g_object_set_data_full (G_OBJECT (folder), "name_with_unread", name_with_unread, g_free);
-
- return (void *) name_with_unread;
- } else
- return (void *) folder_name;
- case 1: /* bold */
- if (folder == NULL)
- return GINT_TO_POINTER (FALSE);
- return GINT_TO_POINTER (e_folder_get_highlighted (folder));
- case 2: /* checkbox */
- if (!has_checkbox (storage_set_view, tree_path))
- return GINT_TO_POINTER (2);
- if (priv->checkboxes == NULL)
- return GINT_TO_POINTER (0);
- return GINT_TO_POINTER(g_hash_table_lookup (priv->checkboxes,
- path) ? 1 : 0);
- default:
- return NULL;
- }
-
-}
-
-static void
-etree_fill_in_children (ETreeModel *etree,
- ETreePath tree_path,
- void *model_data)
-{
- EStorageSetView *storage_set_view;
- EStorageSet *storage_set;
- ETreePath *parent;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- storage_set = storage_set_view->priv->storage_set;
-
- parent = e_tree_model_node_get_parent (etree, tree_path);
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), parent);
- if (tree_path == e_tree_model_node_get_first_child (etree, parent)) {
- g_signal_emit (storage_set_view, signals[FOLDER_OPENED], 0, path);
- }
-}
-
-static void
-etree_set_value_at (ETreeModel *etree,
- ETreePath tree_path,
- int col,
- const void *val,
- void *model_data)
-{
- gboolean value;
- char *path;
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- char *old_path;
-
- storage_set_view = E_STORAGE_SET_VIEW (model_data);
- priv = storage_set_view->priv;
-
- switch (col) {
- case 2: /* checkbox */
- if (!has_checkbox (storage_set_view, tree_path))
- return;
-
- e_tree_model_pre_change (etree);
-
- value = GPOINTER_TO_INT (val);
- path = (char *) e_tree_memory_node_get_data (E_TREE_MEMORY(etree), tree_path);
- if (!priv->checkboxes) {
- priv->checkboxes = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- old_path = g_hash_table_lookup (priv->checkboxes, path);
-
- if (old_path) {
- g_hash_table_remove (priv->checkboxes, path);
- g_free (old_path);
- } else {
- path = g_strdup (path);
- g_hash_table_insert (priv->checkboxes, path, path);
- }
-
- e_tree_model_node_col_changed (etree, tree_path, col);
- g_signal_emit (storage_set_view, signals[CHECKBOXES_CHANGED], 0);
- break;
- }
-}
-
-static gboolean
-etree_is_editable (ETreeModel *etree,
- ETreePath path,
- int col,
- void *model_data)
-{
- if (col == 2)
- return TRUE;
- else
- return FALSE;
-}
-
-
-/* This function duplicates the value passed to it. */
-static void *
-etree_duplicate_value (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return (void *)g_strdup (value);
- else
- return (void *)value;
-}
-
-/* This function frees the value passed to it. */
-static void
-etree_free_value (ETreeModel *etc,
- int col,
- void *value,
- void *data)
-{
- if (col == 0)
- g_free (value);
-}
-
-/* This function creates an empty value. */
-static void *
-etree_initialize_value (ETreeModel *etc,
- int col,
- void *data)
-{
- if (col == 0)
- return g_strdup ("");
- else
- return NULL;
-}
-
-/* This function reports if a value is empty. */
-static gboolean
-etree_value_is_empty (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return !(value && *(char *)value);
- else
- return !value;
-}
-
-/* This function reports if a value is empty. */
-static char *
-etree_value_to_string (ETreeModel *etc,
- int col,
- const void *value,
- void *data)
-{
- if (col == 0)
- return g_strdup(value);
- else
- return g_strdup(value ? "Yes" : "No");
-}
-
-static void
-etree_node_destroy_func (void *data,
- void *user_data)
-{
- EStorageSetView *storage_set_view;
- char *path;
-
- path = (char *) data;
- storage_set_view = E_STORAGE_SET_VIEW (user_data);
-
- if (strcmp (path, ROOT_NODE_NAME))
- remove_node_from_hash (storage_set_view, path);
- g_free (path);
-}
-
-
-/* StorageSet signal handling. */
-
-static void
-new_storage_cb (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreePath node;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
-
- path = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), NULL);
-
- node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), priv->root_node, -1, path);
- e_tree_memory_sort_node (E_TREE_MEMORY(priv->etree_model), priv->root_node,
- storage_sort_callback, storage_set_view);
-
- if (! add_node_to_hash (storage_set_view, path, node)) {
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), node);
- return;
- }
-}
-
-static void
-removed_storage_cb (EStorageSet *storage_set,
- EStorage *storage,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
- char *path;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- path = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), NULL);
- node = lookup_node_in_hash (storage_set_view, path);
- g_free (path);
-
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), node);
-}
-
-static void
-new_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath parent_node;
- ETreePath new_node;
- const char *last_separator;
- char *parent_path;
- char *copy_of_path;
-
- g_return_if_fail (g_path_is_absolute (path));
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- last_separator = strrchr (path, E_PATH_SEPARATOR);
-
- parent_path = g_strndup (path, last_separator - path);
- parent_node = g_hash_table_lookup (priv->path_to_etree_node, parent_path);
- if (parent_node == NULL) {
- g_warning ("EStorageSetView: EStorageSet reported new subfolder for non-existing folder -- %s",
- parent_path);
- g_free (parent_path);
- return;
- }
-
- g_free (parent_path);
-
- copy_of_path = g_strdup (path);
- new_node = e_tree_memory_node_insert (E_TREE_MEMORY(etree), parent_node, -1, copy_of_path);
- e_tree_memory_sort_node (E_TREE_MEMORY(etree), parent_node, folder_sort_callback, storage_set_view);
-
- if (! add_node_to_hash (storage_set_view, path, new_node)) {
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), new_node);
- return;
- }
-
- setup_folder_changed_callbacks (storage_set_view,
- e_storage_set_get_folder (storage_set, path),
- path);
-}
-
-static void
-updated_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_model_pre_change (etree);
- e_tree_model_node_data_changed (etree, node);
-}
-
-static void
-removed_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_memory_node_remove (E_TREE_MEMORY(etree), node);
-}
-
-static void
-close_folder_cb (EStorageSet *storage_set,
- const char *path,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
-
- storage_set_view = E_STORAGE_SET_VIEW (data);
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- node = lookup_node_in_hash (storage_set_view, path);
- e_tree_model_node_request_collapse (priv->etree_model, node);
-}
-
-
-static void
-class_init (EStorageSetViewClass *klass)
-{
- GObjectClass *object_class;
- ETreeClass *etree_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- etree_class = E_TREE_CLASS (klass);
- etree_class->right_click = impl_right_click;
- etree_class->cursor_activated = impl_cursor_activated;
- etree_class->start_drag = impl_tree_start_drag;
- etree_class->tree_drag_begin = impl_tree_drag_begin;
- etree_class->tree_drag_data_get = impl_tree_drag_data_get;
- etree_class->tree_drag_motion = impl_tree_drag_motion;
- etree_class->tree_drag_drop = impl_tree_drag_drop;
- etree_class->tree_drag_leave = impl_tree_drag_leave;
- etree_class->tree_drag_data_received = impl_tree_drag_data_received;
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[FOLDER_OPENED]
- = g_signal_new ("folder_opened",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_opened),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[FOLDER_DRAGGED]
- = g_signal_new ("folder_dragged",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_dragged),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_POINTER_POINTER_UINT_UINT,
- G_TYPE_NONE, 5,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_POINTER,
- G_TYPE_UINT,
- G_TYPE_UINT);
-
- signals[FOLDER_RECEIVE_DROP]
- = g_signal_new ("folder_receive_drop",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_receive_drop),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_POINTER_POINTER_UINT_UINT,
- G_TYPE_NONE, 5,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_POINTER,
- G_TYPE_UINT,
- G_TYPE_UINT);
-
- signals[FOLDER_CONTEXT_MENU_POPPING_UP]
- = g_signal_new ("folder_context_menu_popping_up",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_context_menu_popping_up),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[FOLDER_CONTEXT_MENU_POPPED_DOWN]
- = g_signal_new ("folder_context_menu_popped_down",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, folder_context_menu_popped_down),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[CHECKBOXES_CHANGED]
- = g_signal_new ("checkboxes_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetViewClass, checkboxes_changed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- checks [0] = gdk_pixbuf_new_from_xpm_data (check_empty_xpm);
- checks [1] = gdk_pixbuf_new_from_xpm_data (check_filled_xpm);
- checks [2] = gdk_pixbuf_new_from_xpm_data (check_missing_xpm);
-}
-
-static void
-init (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
-
- priv = g_new (EStorageSetViewPrivate, 1);
-
- priv->storage_set = NULL;
- priv->path_to_etree_node = g_hash_table_new (g_str_hash, g_str_equal);
- priv->type_name_to_pixbuf = g_hash_table_new (g_str_hash, g_str_equal);
-
- priv->ui_component = NULL;
- priv->ui_container = NULL;
-
- priv->selected_row_path = NULL;
- priv->right_click_row_path = NULL;
-
- priv->show_folders = TRUE;
- priv->show_checkboxes = FALSE;
- priv->allow_dnd = TRUE;
- priv->search_enabled = FALSE;
-
- priv->drag_corba_source_interface = CORBA_OBJECT_NIL;
-
- priv->drag_corba_source_context = NULL;
- priv->drag_corba_data = NULL;
-
- priv->checkboxes = NULL;
-
- priv->has_checkbox_func = NULL;
- priv->has_checkbox_func_data = NULL;
-
- storage_set_view->priv = priv;
-}
-
-
-/* Handling of the "changed" signal in EFolders displayed in the EStorageSetView. */
-
-struct _FolderChangedCallbackData {
- EStorageSetView *storage_set_view;
- char *path;
-};
-typedef struct _FolderChangedCallbackData FolderChangedCallbackData;
-
-static void
-folder_changed_callback_data_destroy_notify (void *data)
-{
- FolderChangedCallbackData *callback_data;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- g_free (callback_data->path);
- g_free (callback_data);
-}
-
-static void
-folder_changed_cb (EFolder *folder,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- FolderChangedCallbackData *callback_data;
- ETreePath node;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- storage_set_view = callback_data->storage_set_view;
- priv = callback_data->storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, callback_data->path);
- if (node == NULL) {
- g_warning ("EStorageSetView -- EFolder::changed emitted for a folder whose path I don't know.");
- return;
- }
-
- e_tree_model_pre_change (priv->etree_model);
- e_tree_model_node_data_changed (priv->etree_model, node);
-}
-
-static void
-folder_name_changed_cb (EFolder *folder,
- void *data)
-{
- EStorageSetView *storage_set_view;
- EStorageSetViewPrivate *priv;
- FolderChangedCallbackData *callback_data;
- ETreePath parent_node;
- const char *last_separator;
- char *parent_path;
-
- callback_data = (FolderChangedCallbackData *) data;
-
- storage_set_view = callback_data->storage_set_view;
- priv = storage_set_view->priv;
-
- last_separator = strrchr (callback_data->path, E_PATH_SEPARATOR);
-
- parent_path = g_strndup (callback_data->path, last_separator - callback_data->path);
- parent_node = g_hash_table_lookup (priv->path_to_etree_node, parent_path);
- g_free (parent_path);
-
- if (parent_node == NULL) {
- g_warning ("EStorageSetView -- EFolder::name_changed emitted for a folder whose path I don't know.");
- return;
- }
-
- e_tree_memory_sort_node (E_TREE_MEMORY (priv->etree_model), parent_node,
- folder_sort_callback, storage_set_view);
-}
-
-static void
-setup_folder_changed_callbacks (EStorageSetView *storage_set_view,
- EFolder *folder,
- const char *path)
-{
- FolderChangedCallbackData *folder_changed_callback_data;
-
- folder_changed_callback_data = g_new (FolderChangedCallbackData, 1);
- folder_changed_callback_data->storage_set_view = storage_set_view;
- folder_changed_callback_data->path = g_strdup (path);
-
- e_signal_connect_while_alive (folder, "name_changed",
- G_CALLBACK (folder_name_changed_cb),
- folder_changed_callback_data,
- storage_set_view);
-
- e_signal_connect_full_while_alive (folder, "changed",
- G_CALLBACK (folder_changed_cb),
- NULL,
- folder_changed_callback_data,
- folder_changed_callback_data_destroy_notify,
- FALSE, FALSE,
- storage_set_view);
-}
-
-
-static void
-insert_folders (EStorageSetView *storage_set_view,
- ETreePath parent,
- EStorage *storage,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreeModel *etree;
- ETreePath node;
- GList *folder_path_list;
- GList *p;
- const char *storage_name;
-
- priv = storage_set_view->priv;
- etree = priv->etree_model;
-
- storage_name = e_storage_get_name (storage);
-
- folder_path_list = e_storage_get_subfolder_paths (storage, path);
- if (folder_path_list == NULL)
- return;
-
- for (p = folder_path_list; p != NULL; p = p->next) {
- EFolder *folder;
- const char *folder_name;
- const char *folder_path;
- char *full_path;
-
- folder_path = (const char *) p->data;
- folder = e_storage_get_folder (storage, folder_path);
- folder_name = e_folder_get_name (folder);
-
- full_path = g_strconcat ("/", storage_name, folder_path, NULL);
-
- setup_folder_changed_callbacks (storage_set_view, folder, full_path);
-
- node = e_tree_memory_node_insert (E_TREE_MEMORY(etree), parent, -1, (void *) full_path);
- e_tree_memory_sort_node(E_TREE_MEMORY(etree), parent, folder_sort_callback, storage_set_view);
- add_node_to_hash (storage_set_view, full_path, node);
-
- insert_folders (storage_set_view, node, storage, folder_path);
- }
-
- e_free_string_list (folder_path_list);
-}
-
-static void
-insert_storages (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- EStorageSet *storage_set;
- GList *storage_list;
- GList *p;
-
- priv = storage_set_view->priv;
-
- storage_set = priv->storage_set;
-
- storage_list = e_storage_set_get_storage_list (storage_set);
-
- for (p = storage_list; p != NULL; p = p->next) {
- EStorage *storage = E_STORAGE (p->data);
- const char *name;
- char *path;
- ETreePath parent;
-
- name = e_storage_get_name (storage);
- path = g_strconcat ("/", name, NULL);
-
- parent = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), priv->root_node, -1, path);
- e_tree_memory_sort_node (E_TREE_MEMORY(priv->etree_model),
- priv->root_node,
- storage_sort_callback, storage_set_view);
-
- g_hash_table_insert (priv->path_to_etree_node, path, parent);
-
- if (priv->show_folders)
- insert_folders (storage_set_view, parent, storage, "/");
- }
-
- e_free_object_list (storage_list);
-}
-
-void
-e_storage_set_view_construct (EStorageSetView *storage_set_view,
- EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- EStorageSetViewPrivate *priv;
- ETableExtras *extras;
- ECell *cell;
-
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = storage_set_view->priv;
-
- priv->ui_container = ui_container;
- if (ui_container != NULL) {
- g_object_weak_ref (G_OBJECT (ui_container), ui_container_destroy_notify, priv);
-
- priv->ui_component = bonobo_ui_component_new_default ();
- bonobo_ui_component_set_container (priv->ui_component,
- bonobo_object_corba_objref (BONOBO_OBJECT (ui_container)),
- NULL);
- }
-
- priv->etree_model = e_tree_memory_callbacks_new (etree_icon_at,
-
- etree_column_count,
-
- etree_has_save_id,
- etree_get_save_id,
- etree_has_get_node_by_id,
- etree_get_node_by_id,
-
- etree_value_at,
- etree_set_value_at,
- etree_is_editable,
-
- etree_duplicate_value,
- etree_free_value,
- etree_initialize_value,
- etree_value_is_empty,
- etree_value_to_string,
-
- storage_set_view);
-
- e_tree_memory_set_node_destroy_func (E_TREE_MEMORY (priv->etree_model),
- etree_node_destroy_func, storage_set_view);
- e_tree_memory_set_expanded_default (E_TREE_MEMORY (priv->etree_model), FALSE);
-
- priv->root_node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), NULL, -1,
- g_strdup (ROOT_NODE_NAME));
- add_node_to_hash (storage_set_view, ROOT_NODE_NAME, priv->root_node);
-
- extras = e_table_extras_new ();
- cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT);
- g_object_set((cell), "bold_column", 1, NULL);
- e_table_extras_add_cell (extras, "render_tree",
- e_cell_tree_new (NULL, NULL, TRUE, cell));
-
- e_table_extras_add_cell (extras, "optional_checkbox",
- e_cell_toggle_new (2, 3, checks));
-
- e_tree_construct_from_spec_file (E_TREE (storage_set_view), priv->etree_model, extras,
- EVOLUTION_ETSPECDIR "/e-storage-set-view.etspec", NULL);
-
- e_tree_root_node_set_visible (E_TREE(storage_set_view), FALSE);
-
- g_object_unref (extras);
-
- g_object_ref (storage_set);
- priv->storage_set = storage_set;
-
- e_tree_drag_dest_set (E_TREE (storage_set_view), 0, NULL, 0, GDK_ACTION_MOVE | GDK_ACTION_COPY);
-
- g_signal_connect_object (storage_set, "new_storage", G_CALLBACK (new_storage_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "removed_storage", G_CALLBACK (removed_storage_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "new_folder", G_CALLBACK (new_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "updated_folder", G_CALLBACK (updated_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "removed_folder", G_CALLBACK (removed_folder_cb), storage_set_view, 0);
- g_signal_connect_object (storage_set, "close_folder", G_CALLBACK (close_folder_cb), storage_set_view, 0);
-
- g_signal_connect_object (priv->etree_model, "fill_in_children", G_CALLBACK (etree_fill_in_children), storage_set_view, 0);
-
- insert_storages (storage_set_view);
-}
-
-/* DON'T USE THIS. Use e_storage_set_new_view() instead. */
-GtkWidget *
-e_storage_set_view_new (EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- GtkWidget *new;
-
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- new = g_object_new (e_storage_set_view_get_type (), NULL);
-
- e_storage_set_view_construct (E_STORAGE_SET_VIEW (new), storage_set, ui_container);
-
- return new;
-}
-
-
-EStorageSet *
-e_storage_set_view_get_storage_set (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
-
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- priv = storage_set_view->priv;
- return priv->storage_set;
-}
-
-void
-e_storage_set_view_set_drag_types (EStorageSetView *view, const GtkTargetEntry *drag_types, int ntypes)
-{
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (view));
-
- view->priv->drag_types = drag_types;
- view->priv->num_drag_types = ntypes;
-
- e_tree_drag_source_set ((ETree *) view, GDK_BUTTON1_MASK, drag_types,
- ntypes, GDK_ACTION_MOVE | GDK_ACTION_COPY);
-}
-
-void
-e_storage_set_view_set_drop_types (EStorageSetView *view, const GtkTargetEntry *drop_types, int ntypes)
-{
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (view));
-
- view->priv->drop_types = drop_types;
- view->priv->num_drop_types = ntypes;
-
- e_tree_drag_dest_set ((ETree *) view, GTK_DEST_DEFAULT_ALL, drop_types,
- ntypes, GDK_ACTION_MOVE | GDK_ACTION_COPY);
-}
-
-void
-e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view,
- const char *path)
-{
- EStorageSetViewPrivate *priv;
- ETreePath node;
-
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
- g_return_if_fail (path != NULL && g_path_is_absolute (path));
-
- priv = storage_set_view->priv;
-
- node = g_hash_table_lookup (priv->path_to_etree_node, path);
- if (node == NULL)
- return;
-
- e_tree_show_node (E_TREE (storage_set_view), node);
- e_tree_set_cursor (E_TREE (storage_set_view), node);
-
- g_free (priv->selected_row_path);
- priv->selected_row_path = g_strdup (path);
-
- g_signal_emit (storage_set_view, signals[FOLDER_SELECTED], 0, path);
-}
-
-const char *
-e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view)
-{
- EStorageSetViewPrivate *priv;
- ETreePath etree_node;
- const char *path;
-
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- priv = storage_set_view->priv;
-
- if (!priv->show_folders)
- return NULL; /* Mmh! */
-
- etree_node = e_tree_get_cursor (E_TREE (storage_set_view));
-
- if (etree_node == NULL)
- return NULL; /* Mmh? */
-
- path = (char*)e_tree_memory_node_get_data(E_TREE_MEMORY(priv->etree_model), etree_node);
-
- return path;
-}
-
-void
-e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
- gboolean show)
-{
- EStorageSetViewPrivate *priv;
-
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- priv = storage_set_view->priv;
-
- if (show == priv->show_folders)
- return;
-
- /* tear down existing tree and hash table mappings */
- e_tree_memory_node_remove (E_TREE_MEMORY(priv->etree_model), priv->root_node);
-
- /* now re-add the root node */
- priv->root_node = e_tree_memory_node_insert (E_TREE_MEMORY(priv->etree_model), NULL, -1,
- g_strdup (ROOT_NODE_NAME));
- add_node_to_hash (storage_set_view, ROOT_NODE_NAME, priv->root_node);
-
- /* then reinsert the storages after setting the "show_folders"
- flag. insert_storages will call insert_folders if
- show_folders is TRUE */
-
- priv->show_folders = show;
- insert_storages (storage_set_view);
-}
-
-gboolean
-e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view)
-{
- return storage_set_view->priv->show_folders;
-}
-
-
-
-void
-e_storage_set_view_set_show_checkboxes (EStorageSetView *storage_set_view,
- gboolean show,
- EStorageSetViewHasCheckBoxFunc has_checkbox_func,
- void *func_data)
-{
- EStorageSetViewPrivate *priv;
- ETableState *state;
-
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- priv = storage_set_view->priv;
-
- show = !! show;
-
- if (show == priv->show_checkboxes)
- return;
-
- priv->show_checkboxes = show;
-
- state = e_tree_get_state_object (E_TREE (storage_set_view));
- state->col_count = show ? 2 : 1;
- state->columns = g_renew (int, state->columns, state->col_count);
- state->columns [state->col_count - 1] = 0;
- if (show)
- state->columns [0] = 1;
-
- state->expansions = g_renew (double, state->expansions, state->col_count);
- state->expansions [0] = 1.0;
- if (show)
- state->expansions [1] = 1.0;
-
- e_tree_set_state_object (E_TREE (storage_set_view), state);
-
- priv->has_checkbox_func = has_checkbox_func;
- priv->has_checkbox_func_data = func_data;
-}
-
-gboolean
-e_storage_set_view_get_show_checkboxes (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- return storage_set_view->priv->show_checkboxes;
-}
-
-void
-e_storage_set_view_enable_search (EStorageSetView *storage_set_view,
- gboolean enable)
-{
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- enable = !! enable;
-
- if (enable == storage_set_view->priv->search_enabled)
- return;
-
- storage_set_view->priv->search_enabled = enable;
- e_tree_set_search_column (E_TREE (storage_set_view), enable ? 0 : -1);
-}
-
-void
-e_storage_set_view_set_checkboxes_list (EStorageSetView *storage_set_view,
- GSList *checkboxes)
-{
- gboolean changed = FALSE;
- EStorageSetViewPrivate *priv = storage_set_view->priv;
-
- e_tree_model_pre_change (priv->etree_model);
- if (priv->checkboxes) {
- g_hash_table_foreach (priv->checkboxes, (GHFunc) g_free, NULL);
- g_hash_table_destroy (priv->checkboxes);
- changed = TRUE;
- }
-
- if (checkboxes) {
- priv->checkboxes = g_hash_table_new (g_str_hash, g_str_equal);
- for (; checkboxes; checkboxes = g_slist_next (checkboxes)) {
- char *path = checkboxes->data;
-
- if (g_hash_table_lookup (priv->checkboxes, path))
- continue;
- path = g_strdup (path);
- g_hash_table_insert (priv->checkboxes, path, path);
- }
- changed = TRUE;
- }
-
- if (changed)
- e_tree_model_node_changed (priv->etree_model,
- e_tree_model_get_root (priv->etree_model));
- else
- e_tree_model_no_change (priv->etree_model);
-}
-
-static void
-essv_add_to_list (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- GSList **list = user_data;
-
- *list = g_slist_prepend (*list, g_strdup (key));
-}
-
-GSList *
-e_storage_set_view_get_checkboxes_list (EStorageSetView *storage_set_view)
-{
- GSList *list = NULL;
-
- if (storage_set_view->priv->checkboxes) {
- g_hash_table_foreach (storage_set_view->priv->checkboxes, essv_add_to_list, &list);
-
- list = g_slist_reverse (list);
- }
-
- return list;
-}
-
-
-void
-e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
- gboolean allow_dnd)
-{
- g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view));
-
- storage_set_view->priv->allow_dnd = allow_dnd;
-}
-
-gboolean
-e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), FALSE);
-
- return storage_set_view->priv->allow_dnd;
-}
-
-const char *
-e_storage_set_view_get_right_click_path (EStorageSetView *storage_set_view)
-{
- g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL);
-
- return storage_set_view->priv->right_click_row_path;
-}
-
-
-E_MAKE_TYPE (e_storage_set_view, "EStorageSetView", EStorageSetView, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-set-view.h b/shell/e-storage-set-view.h
deleted file mode 100644
index 1cbb5bfde4..0000000000
--- a/shell/e-storage-set-view.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set-view.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef __E_STORAGE_SET_VIEW_H__
-#define __E_STORAGE_SET_VIEW_H__
-
-#include <gal/e-table/e-tree.h>
-#include <bonobo/bonobo-ui-container.h>
-#include "e-storage-set.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE_SET_VIEW (e_storage_set_view_get_type ())
-#define E_STORAGE_SET_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET_VIEW, EStorageSetView))
-#define E_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET_VIEW, EStorageSetViewClass))
-#define E_IS_STORAGE_SET_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW))
-#define E_IS_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW))
-
-
-typedef gboolean (* EStorageSetViewHasCheckBoxFunc) (EStorageSet *storage_set,
- const char *path,
- void *data);
-
-typedef struct _EStorageSetView EStorageSetView;
-typedef struct _EStorageSetViewPrivate EStorageSetViewPrivate;
-typedef struct _EStorageSetViewClass EStorageSetViewClass;
-
-struct _EStorageSetView {
- ETree parent;
-
- EStorageSetViewPrivate *priv;
-};
-
-struct _EStorageSetViewClass {
- ETreeClass parent_class;
-
- /* Signals. */
-
- void (* folder_selected) (EStorageSetView *storage_set_view,
- const char *path);
- void (* folder_opened) (EStorageSetView *storage_set_view,
- const char *path);
-
- void (* folder_dragged) (EStorageSetView *view, const char *path, GdkDragContext *context,
- GtkSelectionData *selection, guint info, guint time);
- void (* folder_receive_drop) (EStorageSetView *view, const char *path, GdkDragContext *context,
- GtkSelectionData *selection, guint info, guint time);
-
- void (* folder_context_menu_popping_up) (EStorageSetView *storage_set_view,
- const char *path);
- void (* folder_context_menu_popped_down) (EStorageSetView *storage_set_view);
- void (* checkboxes_changed) (EStorageSetView *storage_set_view);
-};
-
-
-GtkType e_storage_set_view_get_type (void);
-
-/* DON'T USE THIS. Use e_storage_set_new_view() instead. */
-GtkWidget *e_storage_set_view_new (EStorageSet *storage_set,
- BonoboUIContainer *ui_container);
-void e_storage_set_view_construct (EStorageSetView *storage_set_view,
- EStorageSet *storage_set,
- BonoboUIContainer *ui_container);
-
-EStorageSet *e_storage_set_view_get_storage_set (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_drag_types (EStorageSetView *view, const GtkTargetEntry *drag_types, int ntypes);
-void e_storage_set_view_set_drop_types (EStorageSetView *view, const GtkTargetEntry *drop_types, int ntypes);
-
-void e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view,
- const char *path);
-const char *e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_show_folders (EStorageSetView *storage_set_view,
- gboolean show);
-gboolean e_storage_set_view_get_show_folders (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_show_checkboxes (EStorageSetView *storage_set_view,
- gboolean show,
- EStorageSetViewHasCheckBoxFunc has_checkbox_func,
- void *func_data);
-gboolean e_storage_set_view_get_show_checkboxes (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_enable_search (EStorageSetView *storage_set_view,
- gboolean enable);
-
-void e_storage_set_view_set_checkboxes_list (EStorageSetView *storage_set_view,
- GSList *checkboxes);
-GSList *e_storage_set_view_get_checkboxes_list (EStorageSetView *storage_set_view);
-
-void e_storage_set_view_set_allow_dnd (EStorageSetView *storage_set_view,
- gboolean allow_dnd);
-gboolean e_storage_set_view_get_allow_dnd (EStorageSetView *storage_set_view);
-
-const char *e_storage_set_view_get_right_click_path (EStorageSetView *storage_set_view);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_STORAGE_SET_VIEW_H__ */
diff --git a/shell/e-storage-set.c b/shell/e-storage-set.c
deleted file mode 100644
index 2978ea7572..0000000000
--- a/shell/e-storage-set.c
+++ /dev/null
@@ -1,885 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set.c
- *
- * Copyright (C) 2000 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage-set.h"
-
-#include "e-storage-set-view.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <glib.h>
-#include <gtk/gtkobject.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypeutils.h>
-
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-
-static GtkObjectClass *parent_class = NULL;
-
-/* This is just to make GHashTable happy. */
-struct _NamedStorage {
- char *name;
- EStorage *storage;
-};
-typedef struct _NamedStorage NamedStorage;
-
-struct _EStorageSetPrivate {
- GList *storages; /* EStorage */
- GHashTable *name_to_named_storage;
-
- EFolderTypeRegistry *folder_type_registry;
-};
-
-enum {
- NEW_STORAGE,
- REMOVED_STORAGE,
- NEW_FOLDER,
- UPDATED_FOLDER,
- REMOVED_FOLDER,
- MOVED_FOLDER,
- CLOSE_FOLDER,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-static NamedStorage *
-named_storage_new (EStorage *storage)
-{
- NamedStorage *new;
-
- new = g_new (NamedStorage, 1);
- new->name = g_strdup (e_storage_get_name (storage));
- new->storage = storage;
-
- return new;
-}
-
-static void
-named_storage_destroy (NamedStorage *named_storage)
-{
- g_free (named_storage->name);
- g_free (named_storage);
-}
-
-static gboolean
-name_to_named_storage_foreach_destroy (void *key,
- void *value,
- void *user_data)
-{
- NamedStorage *named_storage;
-
- named_storage = (NamedStorage *) value;
- named_storage_destroy (named_storage);
-
- return TRUE;
-}
-
-
-/* "Callback converter", from `EStorageResultCallback' to
- `EStorageSetResultCallback'. */
-
-enum _StorageOperation {
- OPERATION_COPY,
- OPERATION_MOVE,
- OPERATION_REMOVE,
- OPERATION_CREATE
-};
-typedef enum _StorageOperation StorageOperation;
-
-struct _StorageCallbackData {
- EStorageSet *storage_set;
- EStorageSetResultCallback storage_set_result_callback;
- char *source_path;
- char *destination_path;
- StorageOperation operation;
- void *data;
-};
-typedef struct _StorageCallbackData StorageCallbackData;
-
-static StorageCallbackData *
-storage_callback_data_new (EStorageSet *storage_set,
- EStorageSetResultCallback callback,
- const char *source_path,
- const char *destination_path,
- StorageOperation operation,
- void *data)
-{
- StorageCallbackData *new;
-
- new = g_new (StorageCallbackData, 1);
- new->storage_set = storage_set;
- new->storage_set_result_callback = callback;
- new->source_path = g_strdup (source_path);
- new->destination_path = g_strdup (destination_path);
- new->operation = operation;
- new->data = data;
-
- return new;
-}
-
-static void
-storage_callback_data_free (StorageCallbackData *data)
-{
- g_free (data->source_path);
- g_free (data->destination_path);
-
- g_free (data);
-}
-
-static void
-storage_callback (EStorage *storage,
- EStorageResult result,
- void *data)
-{
- StorageCallbackData *storage_callback_data;
-
- storage_callback_data = (StorageCallbackData *) data;
-
- (* storage_callback_data->storage_set_result_callback) (storage_callback_data->storage_set,
- result,
- storage_callback_data->data);
-
- if (storage_callback_data->operation == OPERATION_MOVE)
- g_signal_emit (storage_callback_data->storage_set, signals[MOVED_FOLDER], 0,
- storage_callback_data->source_path, storage_callback_data->destination_path);
-
- storage_callback_data_free (storage_callback_data);
-}
-
-
-/* Handling for signals coming from the EStorages. */
-
-static char *
-make_full_path (EStorage *storage,
- const char *path)
-{
- const char *storage_name;
- char *full_path;
-
- storage_name = e_storage_get_name (storage);
-
- if (strcmp (path, E_PATH_SEPARATOR_S) == 0)
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- NULL);
- else if (! g_path_is_absolute (path))
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- E_PATH_SEPARATOR_S, path, NULL);
- else
- full_path = g_strconcat (E_PATH_SEPARATOR_S, storage_name,
- path, NULL);
-
- return full_path;
-}
-
-static void
-storage_new_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[NEW_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-static void
-storage_updated_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[UPDATED_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-static void
-storage_removed_folder_cb (EStorage *storage,
- const char *path,
- void *data)
-{
- EStorageSet *storage_set;
- char *full_path;
-
- storage_set = E_STORAGE_SET (data);
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[REMOVED_FOLDER], 0, full_path);
- g_free (full_path);
-}
-
-
-static EStorage *
-get_storage_for_path (EStorageSet *storage_set,
- const char *path,
- const char **subpath_return)
-{
- EStorage *storage;
- char *storage_name;
- const char *first_separator;
-
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
- g_return_val_if_fail (path[1] != E_PATH_SEPARATOR, NULL);
-
- /* Skip initial separator. */
- path++;
-
- first_separator = strchr (path, E_PATH_SEPARATOR);
-
- if (first_separator == NULL || first_separator[1] == 0) {
- storage = e_storage_set_get_storage (storage_set, path);
- *subpath_return = E_PATH_SEPARATOR_S;
- } else {
- storage_name = g_strndup (path, first_separator - path);
- storage = e_storage_set_get_storage (storage_set, storage_name);
- g_free (storage_name);
-
- *subpath_return = first_separator;
- }
-
- return storage;
-}
-
-static void
-signal_new_folder_for_all_folders_under_paths (EStorageSet *storage_set,
- EStorage *storage,
- GList *path_list)
-{
- GList *p;
-
- for (p = path_list; p != NULL; p = p->next) {
- GList *sub_path_list;
- const char *path;
- char *path_with_storage;
-
- path = (const char *) p->data;
-
- path_with_storage = g_strconcat (E_PATH_SEPARATOR_S, e_storage_get_name (storage), path, NULL);
- g_signal_emit (storage_set, signals[NEW_FOLDER], 0, path_with_storage);
- g_free (path_with_storage);
-
- sub_path_list = e_storage_get_subfolder_paths (storage, path);
-
- signal_new_folder_for_all_folders_under_paths (storage_set, storage, sub_path_list);
-
- e_free_string_list (sub_path_list);
- }
-}
-
-static void
-signal_new_folder_for_all_folders_in_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- GList *path_list;
-
- path_list = e_storage_get_subfolder_paths (storage, E_PATH_SEPARATOR_S);
-
- signal_new_folder_for_all_folders_under_paths (storage_set, storage, path_list);
-
- e_free_string_list (path_list);
-}
-
-
-/* GtkObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EStorageSet *storage_set;
- EStorageSetPrivate *priv;
-
- storage_set = E_STORAGE_SET (object);
- priv = storage_set->priv;
-
- if (priv->storages != NULL) {
- e_free_object_list (priv->storages);
- priv->storages = NULL;
- }
-
- if (priv->folder_type_registry != NULL) {
- g_object_unref (priv->folder_type_registry);
- priv->folder_type_registry = NULL;
- }
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EStorageSet *storage_set;
- EStorageSetPrivate *priv;
-
- storage_set = E_STORAGE_SET (object);
- priv = storage_set->priv;
-
- g_hash_table_foreach (priv->name_to_named_storage, (GHFunc) name_to_named_storage_foreach_destroy, NULL);
- g_hash_table_destroy (priv->name_to_named_storage);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EStorageSetClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-
- signals[NEW_STORAGE] =
- g_signal_new ("new_storage",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, new_storage),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- signals[REMOVED_STORAGE] =
- g_signal_new ("removed_storage",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, removed_storage),
- NULL, NULL,
- e_shell_marshal_NONE__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
- signals[NEW_FOLDER] =
- g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[UPDATED_FOLDER] =
- g_signal_new ("updated_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, updated_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[REMOVED_FOLDER] =
- g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[MOVED_FOLDER] =
- g_signal_new ("moved_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, moved_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
- signals[CLOSE_FOLDER] =
- g_signal_new ("close_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageSetClass, close_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-}
-
-static void
-init (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
-
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = g_new (EStorageSetPrivate, 1);
- priv->storages = NULL;
- priv->name_to_named_storage = g_hash_table_new (g_str_hash, g_str_equal);
- priv->folder_type_registry = NULL;
-
- storage_set->priv = priv;
-}
-
-
-void
-e_storage_set_construct (EStorageSet *storage_set,
- EFolderTypeRegistry *folder_type_registry)
-{
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- GTK_OBJECT_UNSET_FLAGS (storage_set, GTK_FLOATING);
-
- g_object_ref (folder_type_registry);
- storage_set->priv->folder_type_registry = folder_type_registry;
-}
-
-EStorageSet *
-e_storage_set_new (EFolderTypeRegistry *folder_type_registry)
-{
- EStorageSet *new;
-
- new = g_object_new (e_storage_set_get_type (), NULL);
-
- e_storage_set_construct (new, folder_type_registry);
-
- return new;
-}
-
-
-GList *
-e_storage_set_get_storage_list (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
- GList *list;
- GList *p;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- priv = storage_set->priv;
-
- list = NULL;
- for (p = priv->storages; p != NULL; p = p->next) {
- g_object_ref (p->data);
- list = g_list_prepend (list, p->data);
- }
-
- return g_list_reverse (list); /* Lame. */
-}
-
-/**
- * e_storage_set_add_storage:
- * @storage_set:
- * @storage:
- *
- * Add @storage to @storage_set. Notice that will ref the storage.
- **/
-gboolean
-e_storage_set_add_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- EStorageSetPrivate *priv;
- const char *storage_name;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- priv = storage_set->priv;
-
- storage_name = e_storage_get_name (storage);
- if (g_hash_table_lookup (priv->name_to_named_storage, storage_name) != NULL)
- return FALSE;
-
- g_object_ref (storage);
-
- g_signal_connect (storage, "new_folder",
- G_CALLBACK (storage_new_folder_cb), storage_set);
- g_signal_connect (storage, "updated_folder",
- G_CALLBACK (storage_updated_folder_cb), storage_set);
- g_signal_connect (storage, "removed_folder",
- G_CALLBACK (storage_removed_folder_cb), storage_set);
-
- priv->storages = g_list_append (priv->storages, storage);
-
- named_storage = named_storage_new (storage);
- g_hash_table_insert (priv->name_to_named_storage, named_storage->name, named_storage);
-
- g_signal_emit (storage_set, signals[NEW_STORAGE], 0, storage);
-
- signal_new_folder_for_all_folders_in_storage (storage_set, storage);
-
- return TRUE;
-}
-
-gboolean
-e_storage_set_remove_storage (EStorageSet *storage_set,
- EStorage *storage)
-{
- EStorageSetPrivate *priv;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE);
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- priv = storage_set->priv;
-
- named_storage = g_hash_table_lookup (priv->name_to_named_storage,
- e_storage_get_name (storage));
- if (named_storage == NULL)
- return FALSE;
-
- g_hash_table_remove (priv->name_to_named_storage, named_storage->name);
- named_storage_destroy (named_storage);
-
- priv->storages = g_list_remove (priv->storages, storage);
-
- g_signal_emit (storage_set, signals[REMOVED_STORAGE], 0, storage);
- g_object_unref (storage);
-
- return TRUE;
-}
-
-void
-e_storage_set_remove_all_storages (EStorageSet *storage_set)
-{
- EStorageSetPrivate *priv;
- GList *p;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
-
- priv = storage_set->priv;
-
- for (p = priv->storages; p != NULL; p = p->next) {
- EStorage *storage;
-
- storage = E_STORAGE (p->data);
-
- g_signal_emit (storage_set, signals[REMOVED_STORAGE], 0, storage);
- g_object_unref (storage);
- }
-
- g_hash_table_foreach_remove (priv->name_to_named_storage,
- name_to_named_storage_foreach_destroy,
- NULL);
-
- g_list_free (priv->storages);
- priv->storages = NULL;
-}
-
-
-EStorage *
-e_storage_set_get_storage (EStorageSet *storage_set,
- const char *name)
-{
- EStorageSetPrivate *priv;
- NamedStorage *named_storage;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- priv = storage_set->priv;
-
- named_storage = g_hash_table_lookup (priv->name_to_named_storage, name);
- if (named_storage == NULL)
- return NULL;
- else
- return named_storage->storage;
-}
-
-EFolder *
-e_storage_set_get_folder (EStorageSet *storage_set,
- const char *path)
-{
- EStorage *storage;
- const char *subpath;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
- if (storage == NULL)
- return NULL;
-
- return e_storage_get_folder (storage, subpath);
-}
-
-
-static void
-async_open_cb (EStorage *storage, EStorageResult result,
- const char *path, gpointer storage_set)
-{
- if (result != E_STORAGE_OK) {
- char *full_path;
-
- full_path = make_full_path (storage, path);
- g_signal_emit (storage_set, signals[CLOSE_FOLDER], 0, full_path);
- g_free (full_path);
- }
-}
-
-static void
-storage_set_view_folder_opened (EStorageSetView *storage_set_view,
- const char *path,
- EStorageSet *storage_set)
-{
- EStorage *storage;
- const char *subpath;
-
- storage = get_storage_for_path (storage_set, path, &subpath);
- if (storage == NULL)
- return;
-
- e_storage_async_open_folder (storage, subpath,
- async_open_cb, storage_set);
-}
-
-GtkWidget *
-e_storage_set_create_new_view (EStorageSet *storage_set,
- BonoboUIContainer *ui_container)
-{
- GtkWidget *storage_set_view;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- storage_set_view = e_storage_set_view_new (storage_set, ui_container);
- g_signal_connect (storage_set_view, "folder_opened",
- G_CALLBACK (storage_set_view_folder_opened),
- storage_set);
-
- return storage_set_view;
-}
-
-
-void
-e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (type != NULL);
- g_return_if_fail (description != NULL);
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_CREATE,
- data);
-
- e_storage_async_create_folder (storage, subpath, type, description,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_REMOVE,
- data);
-
- e_storage_async_remove_folder (storage, subpath,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_xfer_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *source_storage;
- EStorage *destination_storage;
- const char *source_subpath;
- const char *destination_subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (g_path_is_absolute (source_path));
- g_return_if_fail (destination_path != NULL);
- g_return_if_fail (g_path_is_absolute (destination_path));
- g_return_if_fail (callback != NULL);
-
- source_storage = get_storage_for_path (storage_set, source_path, &source_subpath);
- destination_storage = get_storage_for_path (storage_set, destination_path, &destination_subpath);
-
- if (source_storage != destination_storage) {
- g_warning ("e_storage_set_async_xfer_folder(): "
- "Attempt to xfer folders between different storages -- not supported yet.");
- (* callback) (storage_set, E_STORAGE_UNSUPPORTEDOPERATION, data);
- return;
- }
-
- storage_callback_data = storage_callback_data_new (storage_set,
- callback,
- source_path,
- destination_path,
- remove_source ? OPERATION_MOVE : OPERATION_COPY,
- data);
-
- e_storage_async_xfer_folder (source_storage,
- source_subpath, destination_subpath, remove_source,
- storage_callback, storage_callback_data);
-}
-
-void
-e_storage_set_async_remove_shared_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data)
-{
- EStorage *storage;
- const char *subpath;
- StorageCallbackData *storage_callback_data;
-
- g_return_if_fail (storage_set != NULL);
- g_return_if_fail (E_IS_STORAGE_SET (storage_set));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- storage = get_storage_for_path (storage_set, path, &subpath);
-
- if (!e_storage_supports_shared_folders (storage)) {
- (* callback) (storage_set, E_STORAGE_NOTIMPLEMENTED, data);
- return;
- }
-
- storage_callback_data = storage_callback_data_new (storage_set, callback,
- path, NULL, OPERATION_REMOVE,
- data);
-
- e_storage_async_remove_shared_folder (storage, subpath,
- storage_callback,
- storage_callback_data);
-}
-
-
-EFolderTypeRegistry *
-e_storage_set_get_folder_type_registry (EStorageSet *storage_set)
-{
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
-
- return storage_set->priv->folder_type_registry;
-}
-
-
-/**
- * e_storage_set_get_path_for_physical_uri:
- * @storage_set: A storage set
- * @physical_uri: A physical URI
- *
- * Retrieve the path of the folder whose physical URI matches @physical_uri.
- *
- * Return value:
- **/
-char *
-e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set,
- const char *physical_uri)
-{
- EStorageSetPrivate *priv;
- GList *p;
-
- g_return_val_if_fail (storage_set != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
- g_return_val_if_fail (physical_uri != NULL, NULL);
-
- priv = storage_set->priv;
-
- for (p = priv->storages; p != NULL; p = p->next) {
- EStorage *storage;
- char *storage_path;
-
- storage = E_STORAGE (p->data);
-
- storage_path = e_storage_get_path_for_physical_uri (storage, physical_uri);
- if (storage_path != NULL) {
- char *storage_set_path;
-
- storage_set_path = g_strconcat (E_PATH_SEPARATOR_S,
- e_storage_get_name (storage),
- storage_path,
- NULL);
- g_free (storage_path);
-
- return storage_set_path;
- }
- }
-
- return NULL;
-}
-
-
-E_MAKE_TYPE (e_storage_set, "EStorageSet", EStorageSet, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage-set.h b/shell/e-storage-set.h
deleted file mode 100644
index 35c83a3eb5..0000000000
--- a/shell/e-storage-set.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage-set.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef _E_STORAGE_SET_H_
-#define _E_STORAGE_SET_H_
-
-#include <gtk/gtkwidget.h>
-
-#include <bonobo/bonobo-ui-container.h>
-
-#include "e-folder-type-registry.h"
-#include "e-storage.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE_SET (e_storage_set_get_type ())
-#define E_STORAGE_SET(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET, EStorageSet))
-#define E_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET, EStorageSetClass))
-#define E_IS_STORAGE_SET(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET))
-#define E_IS_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET))
-
-
-typedef struct _EStorageSet EStorageSet;
-typedef struct _EStorageSetPrivate EStorageSetPrivate;
-typedef struct _EStorageSetClass EStorageSetClass;
-
-typedef void (* EStorageSetResultCallback) (EStorageSet *storage_set, EStorageResult result, void *data);
-
-struct _EStorageSet {
- GtkObject parent;
-
- EStorageSetPrivate *priv;
-};
-
-struct _EStorageSetClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
-
- void (* new_storage) (EStorageSet *storage_set, EStorage *storage);
- void (* removed_storage) (EStorageSet *storage_set, EStorage *storage);
- /* FIXME? Inconsistency between storage and folders. */
- void (* new_folder) (EStorageSet *storage_set, const char *path);
- void (* updated_folder) (EStorageSet *storage_set, const char *path);
- void (* removed_folder) (EStorageSet *storage_set, const char *path);
- void (* moved_folder) (EStorageSet *storage_set, const char *source_path, const char *destination_path);
- void (* close_folder) (EStorageSet *storage_set, const char *path);
-};
-
-
-GtkType e_storage_set_get_type (void);
-void e_storage_set_construct (EStorageSet *storage_set,
- EFolderTypeRegistry *folder_type_registry);
-EStorageSet *e_storage_set_new (EFolderTypeRegistry *folder_type_registry);
-gboolean e_storage_set_add_storage (EStorageSet *storage_set,
- EStorage *storage);
-gboolean e_storage_set_remove_storage (EStorageSet *storage_set,
- EStorage *storage);
-void e_storage_set_remove_all_storages (EStorageSet *storage_set);
-GList *e_storage_set_get_storage_list (EStorageSet *storage_set);
-EStorage *e_storage_set_get_storage (EStorageSet *storage_set,
- const char *storage_name);
-EFolder *e_storage_set_get_folder (EStorageSet *storage_set,
- const char *path);
-GtkWidget *e_storage_set_create_new_view (EStorageSet *storage_set,
- BonoboUIContainer *container);
-
-void e_storage_set_async_create_folder (EStorageSet *storage_set,
- const char *path,
- const char *type,
- const char *description,
- EStorageSetResultCallback callback,
- void *data);
-void e_storage_set_async_remove_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data);
-void e_storage_set_async_xfer_folder (EStorageSet *storage_set,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageSetResultCallback callback,
- void *data);
-
-void e_storage_set_async_remove_shared_folder (EStorageSet *storage_set,
- const char *path,
- EStorageSetResultCallback callback,
- void *data);
-
-EFolderTypeRegistry *e_storage_set_get_folder_type_registry (EStorageSet *storage_set);
-
-/* Utility functions. */
-
-char *e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set,
- const char *physical_uri);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_STORAGE_SET_H_ */
diff --git a/shell/e-storage.c b/shell/e-storage.c
deleted file mode 100644
index 0a56e3569f..0000000000
--- a/shell/e-storage.c
+++ /dev/null
@@ -1,851 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage.c
- *
- * Copyright (C) 2000, 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
- */
-
-/* FIXME: The EFolderTree is kept both in the EStorage and the
- * EvolutionStorage. Bad design.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "e-storage.h"
-
-#include "e-folder-tree.h"
-#include "e-shell-constants.h"
-#include "e-shell-marshal.h"
-
-#include <gtk/gtkobject.h>
-#include <gtk/gtksignal.h>
-
-#include <libgnome/gnome-i18n.h>
-#include <gal/util/e-util.h>
-
-#include <string.h>
-
-
-#define PARENT_TYPE GTK_TYPE_OBJECT
-static GtkObjectClass *parent_class = NULL;
-
-#define ES_CLASS(obj) \
- E_STORAGE_CLASS (GTK_OBJECT_GET_CLASS (obj))
-
-struct _EStoragePrivate {
- /* The set of folders we have in this storage. */
- EFolderTree *folder_tree;
-
- /* Internal name of the storage */
- char *name;
-};
-
-enum {
- NEW_FOLDER,
- UPDATED_FOLDER,
- REMOVED_FOLDER,
- ASYNC_OPEN_FOLDER,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Destroy notification function for the folders in the tree. */
-
-static void
-folder_destroy_notify (EFolderTree *tree,
- const char *path,
- void *data,
- void *closure)
-{
- EFolder *e_folder;
-
- if (data == NULL) {
- /* The root folder has no EFolder associated to it. */
- return;
- }
-
- e_folder = E_FOLDER (data);
- g_object_unref (e_folder);
-}
-
-
-/* Signal callbacks for the EFolders. */
-
-static void
-folder_changed_cb (EFolder *folder,
- void *data)
-{
- EStorage *storage;
- EStoragePrivate *priv;
- const char *path, *p;
- gboolean highlight;
-
- g_assert (E_IS_STORAGE (data));
-
- storage = E_STORAGE (data);
- priv = storage->priv;
-
- path = e_folder_tree_get_path_for_data (priv->folder_tree, folder);
- g_assert (path != NULL);
-
- g_signal_emit (storage, signals[UPDATED_FOLDER], 0, path);
-
- highlight = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (folder), "last_highlight"));
- if (highlight != e_folder_get_highlighted (folder)) {
- highlight = !highlight;
- g_object_set_data (G_OBJECT (folder), "last_highlight", GINT_TO_POINTER (highlight));
- p = strrchr (path, '/');
- if (p && p != path) {
- char *name;
-
- name = g_strndup (path, p - path);
- folder = e_folder_tree_get_folder (priv->folder_tree, name);
- g_free (name);
- if (folder)
- e_folder_set_child_highlight (folder, highlight);
- }
- }
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EStorage *storage;
- EStoragePrivate *priv;
-
- storage = E_STORAGE (object);
- priv = storage->priv;
-
- if (priv->folder_tree != NULL)
- e_folder_tree_destroy (priv->folder_tree);
-
- g_free (priv->name);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-/* EStorage methods. */
-
-static GList *
-impl_get_subfolder_paths (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
-
- priv = storage->priv;
-
- return e_folder_tree_get_subfolders (priv->folder_tree, path);
-}
-
-static EFolder *
-impl_get_folder (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *e_folder;
-
- priv = storage->priv;
-
- e_folder = (EFolder *) e_folder_tree_get_folder (priv->folder_tree, path);
-
- return e_folder;
-}
-
-static const char *
-impl_get_name (EStorage *storage)
-{
- return storage->priv->name;
-}
-
-static void
-impl_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static void
-impl_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static void
-impl_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-static gboolean
-impl_supports_shared_folders (EStorage *storage)
-{
- return FALSE;
-}
-
-static void
-impl_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, NULL, data);
-}
-
-static void
-impl_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data);
-}
-
-
-/* Initialization. */
-
-static void
-class_init (EStorageClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- object_class->finalize = impl_finalize;
-
- class->get_subfolder_paths = impl_get_subfolder_paths;
- class->get_folder = impl_get_folder;
- class->get_name = impl_get_name;
- class->async_create_folder = impl_async_create_folder;
- class->async_remove_folder = impl_async_remove_folder;
- class->async_xfer_folder = impl_async_xfer_folder;
-
- class->supports_shared_folders = impl_supports_shared_folders;
- class->async_discover_shared_folder = impl_async_discover_shared_folder;
- class->async_remove_shared_folder = impl_async_remove_shared_folder;
-
- signals[NEW_FOLDER] =
- g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[UPDATED_FOLDER] =
- g_signal_new ("updated_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, updated_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[REMOVED_FOLDER] =
- g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[ASYNC_OPEN_FOLDER] =
- g_signal_new ("async_open_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EStorageClass, async_open_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_POINTER_POINTER,
- G_TYPE_NONE, 3,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_POINTER);
-}
-
-static void
-init (EStorage *storage)
-{
- EStoragePrivate *priv;
-
- priv = g_new (EStoragePrivate, 1);
-
- priv->folder_tree = e_folder_tree_new (folder_destroy_notify, NULL);
- priv->name = NULL;
-
- storage->priv = priv;
-}
-
-
-/* Creation. */
-
-void
-e_storage_construct (EStorage *storage,
- const char *name,
- EFolder *root_folder)
-{
- EStoragePrivate *priv;
-
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
-
- priv = storage->priv;
-
- priv->name = g_strdup (name);
-
- e_storage_new_folder (storage, "/", root_folder);
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (storage), GTK_FLOATING);
-}
-
-EStorage *
-e_storage_new (const char *name,
- EFolder *root_folder)
-{
- EStorage *new;
-
- new = g_object_new (e_storage_get_type (), NULL);
-
- e_storage_construct (new, name, root_folder);
-
- return new;
-}
-
-
-gboolean
-e_storage_path_is_absolute (const char *path)
-{
- g_return_val_if_fail (path != NULL, FALSE);
-
- return *path == E_PATH_SEPARATOR;
-}
-
-gboolean
-e_storage_path_is_relative (const char *path)
-{
- g_return_val_if_fail (path != NULL, FALSE);
-
- return *path != E_PATH_SEPARATOR;
-}
-
-
-GList *
-e_storage_get_subfolder_paths (EStorage *storage,
- const char *path)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (g_path_is_absolute (path), NULL);
-
- return (* ES_CLASS (storage)->get_subfolder_paths) (storage, path);
-}
-
-EFolder *
-e_storage_get_folder (EStorage *storage,
- const char *path)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (path != NULL, NULL);
- g_return_val_if_fail (e_storage_path_is_absolute (path), NULL);
-
- return (* ES_CLASS (storage)->get_folder) (storage, path);
-}
-
-const char *
-e_storage_get_name (EStorage *storage)
-{
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
-
- return (* ES_CLASS (storage)->get_name) (storage);
-}
-
-
-/* Folder operations. */
-
-void
-e_storage_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (type != NULL);
- g_return_if_fail (callback != NULL);
-
- (* ES_CLASS (storage)->async_create_folder) (storage, path, type, description, callback, data);
-}
-
-void
-e_storage_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
- g_return_if_fail (callback != NULL);
-
- (* ES_CLASS (storage)->async_remove_folder) (storage, path, callback, data);
-}
-
-void
-e_storage_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (source_path != NULL);
- g_return_if_fail (g_path_is_absolute (source_path));
- g_return_if_fail (destination_path != NULL);
- g_return_if_fail (g_path_is_absolute (destination_path));
-
- if (strcmp (source_path, destination_path) == 0) {
- (* callback) (storage, E_STORAGE_OK, data);
- return;
- }
-
- if (remove_source) {
- int destination_len;
- int source_len;
-
- source_len = strlen (source_path);
- destination_len = strlen (destination_path);
-
- if (source_len < destination_len
- && destination_path[source_len] == E_PATH_SEPARATOR
- && strncmp (destination_path, source_path, source_len) == 0) {
- (* callback) (storage, E_STORAGE_CANTMOVETODESCENDANT, data);
- return;
- }
- }
-
- (* ES_CLASS (storage)->async_xfer_folder) (storage, source_path, destination_path, remove_source, callback, data);
-}
-
-void
-e_storage_async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- EStoragePrivate *priv;
- EFolder *folder;
-
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (folder == NULL) {
- (* callback) (storage, E_STORAGE_NOTFOUND, path, data);
- return;
- }
-
- if (! e_folder_get_has_subfolders (folder)) {
- (* callback) (storage, E_STORAGE_OK, path, data);
- return;
- }
-
- g_signal_emit (storage, signals[ASYNC_OPEN_FOLDER], 0,
- path, callback, data);
-}
-
-
-/* Shared folders. */
-
-gboolean
-e_storage_supports_shared_folders (EStorage *storage)
-{
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
-
- return (* ES_CLASS (storage)->supports_shared_folders) (storage);
-}
-
-void
-e_storage_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (owner != NULL);
- g_return_if_fail (folder_name != NULL);
-
- (* ES_CLASS (storage)->async_discover_shared_folder) (storage, owner, folder_name, callback, data);
-}
-
-void
-e_storage_cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name)
-{
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (owner != NULL);
- g_return_if_fail (folder_name != NULL);
- g_return_if_fail (ES_CLASS (storage)->cancel_discover_shared_folder != NULL);
-
- (* ES_CLASS (storage)->cancel_discover_shared_folder) (storage, owner, folder_name);
-}
-
-void
-e_storage_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data)
-{
- g_return_if_fail (storage != NULL);
- g_return_if_fail (E_IS_STORAGE (storage));
- g_return_if_fail (path != NULL);
- g_return_if_fail (g_path_is_absolute (path));
-
- (* ES_CLASS (storage)->async_remove_shared_folder) (storage, path, callback, data);
-}
-
-
-const char *
-e_storage_result_to_string (EStorageResult result)
-{
- switch (result) {
- case E_STORAGE_OK:
- return _("No error");
- case E_STORAGE_GENERICERROR:
- return _("Generic error");
- case E_STORAGE_EXISTS:
- return _("A folder with the same name already exists");
- case E_STORAGE_INVALIDTYPE:
- return _("The specified folder type is not valid");
- case E_STORAGE_IOERROR:
- return _("I/O error");
- case E_STORAGE_NOSPACE:
- return _("Not enough space to create the folder");
- case E_STORAGE_NOTEMPTY:
- return _("The folder is not empty");
- case E_STORAGE_NOTFOUND:
- return _("The specified folder was not found");
- case E_STORAGE_NOTIMPLEMENTED:
- return _("Function not implemented in this storage");
- case E_STORAGE_PERMISSIONDENIED:
- return _("Permission denied");
- case E_STORAGE_UNSUPPORTEDOPERATION:
- return _("Operation not supported");
- case E_STORAGE_UNSUPPORTEDTYPE:
- return _("The specified type is not supported in this storage");
- case E_STORAGE_CANTCHANGESTOCKFOLDER:
- return _("The specified folder cannot be modified or removed");
- case E_STORAGE_CANTMOVETODESCENDANT:
- return _("Cannot make a folder a child of one of its descendants");
- case E_STORAGE_INVALIDNAME:
- return _("Cannot create a folder with that name");
- case E_STORAGE_NOTONLINE:
- return _("This operation cannot be performed in off-line mode");
- default:
- return _("Unknown error");
- }
-}
-
-
-/* Public utility functions. */
-
-struct _GetPathForPhysicalUriForeachData {
- const char *physical_uri;
- char *retval;
-};
-typedef struct _GetPathForPhysicalUriForeachData GetPathForPhysicalUriForeachData;
-
-static void
-get_path_for_physical_uri_foreach (EFolderTree *folder_tree,
- const char *path,
- void *path_data,
- void *user_data)
-{
- GetPathForPhysicalUriForeachData *foreach_data;
- const char *physical_uri;
- EFolder *e_folder;
-
- foreach_data = (GetPathForPhysicalUriForeachData *) user_data;
- if (foreach_data->retval != NULL)
- return;
-
- e_folder = (EFolder *) path_data;
- if (e_folder == NULL)
- return;
-
- physical_uri = e_folder_get_physical_uri (e_folder);
- if (physical_uri == NULL)
- return;
-
- if (strcmp (foreach_data->physical_uri, physical_uri) == 0)
- foreach_data->retval = g_strdup (path);
-}
-
-/**
- * e_storage_get_path_for_physical_uri:
- * @storage: A storage
- * @physical_uri: A physical URI
- *
- * Look for the folder having the specified @physical_uri.
- *
- * Return value: The path of the folder having the specified @physical_uri in
- * @storage. If such a folder does not exist, just return NULL. The return
- * value must be freed by the caller.
- **/
-char *
-e_storage_get_path_for_physical_uri (EStorage *storage,
- const char *physical_uri)
-{
- GetPathForPhysicalUriForeachData foreach_data;
- EStoragePrivate *priv;
-
- g_return_val_if_fail (storage != NULL, NULL);
- g_return_val_if_fail (E_IS_STORAGE (storage), NULL);
- g_return_val_if_fail (physical_uri != NULL, NULL);
-
- priv = storage->priv;
-
- foreach_data.physical_uri = physical_uri;
- foreach_data.retval = NULL;
-
- e_folder_tree_foreach (priv->folder_tree, get_path_for_physical_uri_foreach, &foreach_data);
-
- return foreach_data.retval;
-}
-
-
-/* Protected functions. */
-
-/* These functions are used by subclasses to add and remove folders from the
- state stored in the storage object. */
-
-static void
-remove_subfolders_except (EStorage *storage, const char *path, const char *except)
-{
- EStoragePrivate *priv;
- GList *subfolders, *f;
- const char *folder_path;
-
- priv = storage->priv;
-
- subfolders = e_folder_tree_get_subfolders (priv->folder_tree, path);
- for (f = subfolders; f; f = f->next) {
- folder_path = f->data;
- if (!except || strcmp (folder_path, except) != 0)
- e_storage_removed_folder (storage, folder_path);
- }
- e_free_string_list (subfolders);
-}
-
-gboolean
-e_storage_new_folder (EStorage *storage,
- const char *path,
- EFolder *e_folder)
-{
- EStoragePrivate *priv;
- char *parent_path, *p;
- EFolder *parent;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
- g_return_val_if_fail (e_folder != NULL, FALSE);
- g_return_val_if_fail (E_IS_FOLDER (e_folder), FALSE);
-
- priv = storage->priv;
-
- if (! e_folder_tree_add (priv->folder_tree, path, e_folder))
- return FALSE;
-
- /* If this is the child of a folder that has a pseudo child,
- * remove the pseudo child now.
- */
- p = strrchr (path, '/');
- if (p && p != path)
- parent_path = g_strndup (path, p - path);
- else
- parent_path = g_strdup ("/");
- parent = e_folder_tree_get_folder (priv->folder_tree, parent_path);
- if (parent && e_folder_get_has_subfolders (parent)) {
- remove_subfolders_except (storage, parent_path, path);
- e_folder_set_has_subfolders (parent, FALSE);
- }
- g_free (parent_path);
-
- g_signal_connect_object (e_folder, "changed", G_CALLBACK (folder_changed_cb), storage, 0);
-
- g_signal_emit (storage, signals[NEW_FOLDER], 0, path);
-
- folder_changed_cb (e_folder, storage);
-
- return TRUE;
-}
-
-/* This really should be called e_storage_set_has_subfolders, but then
- * it would look like it was an EStorageSet function. (Fact o' the
- * day: The word "set" has more distinct meanings than any other word
- * in the English language.) Anyway, we now return you to your
- * regularly scheduled source code, already in progress.
- */
-gboolean
-e_storage_declare_has_subfolders (EStorage *storage,
- const char *path,
- const char *message)
-{
- EStoragePrivate *priv;
- EFolder *parent, *pseudofolder;
- char *pseudofolder_path;
- gboolean ok;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
- g_return_val_if_fail (message != NULL, FALSE);
-
- priv = storage->priv;
-
- parent = e_folder_tree_get_folder (priv->folder_tree, path);
- if (parent == NULL)
- return FALSE;
- if (e_folder_get_has_subfolders (parent))
- return TRUE;
-
- remove_subfolders_except (storage, path, NULL);
-
- pseudofolder = e_folder_new (message, "working", "");
- if (strcmp (path, "/") == 0)
- pseudofolder_path = g_strdup_printf ("/%s", message);
- else
- pseudofolder_path = g_strdup_printf ("%s/%s", path, message);
- e_folder_set_physical_uri (pseudofolder, pseudofolder_path);
-
- ok = e_storage_new_folder (storage, pseudofolder_path, pseudofolder);
- g_free (pseudofolder_path);
- if (!ok) {
- g_object_unref (pseudofolder);
- return FALSE;
- }
-
- e_folder_set_has_subfolders (parent, TRUE);
- return TRUE;
-}
-
-gboolean
-e_storage_get_has_subfolders (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *folder;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
-
- return folder && e_folder_get_has_subfolders (folder);
-}
-
-gboolean
-e_storage_removed_folder (EStorage *storage,
- const char *path)
-{
- EStoragePrivate *priv;
- EFolder *folder;
- const char *p;
-
- g_return_val_if_fail (storage != NULL, FALSE);
- g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (g_path_is_absolute (path), FALSE);
-
- priv = storage->priv;
-
- folder = e_folder_tree_get_folder (priv->folder_tree, path);
- if (folder == NULL)
- return FALSE;
-
- p = strrchr (path, '/');
- if (p != NULL && p != path) {
- EFolder *parent_folder;
- char *parent_path;
-
- parent_path = g_strndup (path, p - path);
- parent_folder = e_folder_tree_get_folder (priv->folder_tree, parent_path);
-
- if (e_folder_get_highlighted (folder))
- e_folder_set_child_highlight (parent_folder, FALSE);
-
- g_free (parent_path);
- }
-
- g_signal_emit (storage, signals[REMOVED_FOLDER], 0, path);
-
- e_folder_tree_remove (priv->folder_tree, path);
-
- return TRUE;
-}
-
-
-E_MAKE_TYPE (e_storage, "EStorage", EStorage, class_init, init, PARENT_TYPE)
diff --git a/shell/e-storage.h b/shell/e-storage.h
deleted file mode 100644
index 1015290b6a..0000000000
--- a/shell/e-storage.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-storage.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef _E_STORAGE_H_
-#define _E_STORAGE_H_
-
-#include <gtk/gtkobject.h>
-
-#include "evolution-shell-component-client.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_STORAGE (e_storage_get_type ())
-#define E_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE, EStorage))
-#define E_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE, EStorageClass))
-#define E_IS_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE))
-#define E_IS_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE))
-
-
-typedef struct _EStorage EStorage;
-typedef struct _EStoragePrivate EStoragePrivate;
-typedef struct _EStorageClass EStorageClass;
-
-enum _EStorageResult {
- E_STORAGE_OK,
- E_STORAGE_GENERICERROR,
- E_STORAGE_EXISTS,
- E_STORAGE_INVALIDTYPE,
- E_STORAGE_IOERROR,
- E_STORAGE_NOSPACE,
- E_STORAGE_NOTEMPTY,
- E_STORAGE_NOTFOUND,
- E_STORAGE_NOTIMPLEMENTED,
- E_STORAGE_PERMISSIONDENIED,
- E_STORAGE_UNSUPPORTEDOPERATION,
- E_STORAGE_UNSUPPORTEDTYPE,
- E_STORAGE_CANTCHANGESTOCKFOLDER,
- E_STORAGE_CANTMOVETODESCENDANT,
- E_STORAGE_NOTONLINE,
- E_STORAGE_INVALIDNAME
-};
-typedef enum _EStorageResult EStorageResult;
-
-typedef void (* EStorageResultCallback) (EStorage *storage, EStorageResult result, void *data);
-typedef void (* EStorageDiscoveryCallback) (EStorage *storage, EStorageResult result, const char *path, void *data);
-
-#include "e-folder.h"
-
-struct _EStorage {
- GtkObject parent;
-
- EStoragePrivate *priv;
-};
-
-struct _EStorageClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
-
- void (* new_folder) (EStorage *storage, const char *path);
- void (* updated_folder) (EStorage *storage, const char *path);
- void (* removed_folder) (EStorage *storage, const char *path);
-
- /* FIXME: This should NOT be a signal. */
- void (* async_open_folder) (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data);
-
- /* Virtual methods. */
-
- GList * (* get_subfolder_paths) (EStorage *storage,
- const char *path);
- EFolder * (* get_folder) (EStorage *storage,
- const char *path);
- const char * (* get_name) (EStorage *storage);
-
- void (* async_create_folder) (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data);
-
- void (* async_remove_folder) (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-
- void (* async_xfer_folder) (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data);
-
- gboolean (* supports_shared_folders) (EStorage *storage);
- void (* async_discover_shared_folder) (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data);
- void (* cancel_discover_shared_folder) (EStorage *storage,
- const char *owner,
- const char *folder_name);
- void (* async_remove_shared_folder) (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-};
-
-
-GtkType e_storage_get_type (void);
-void e_storage_construct (EStorage *storage,
- const char *name,
- EFolder *root_folder);
-EStorage *e_storage_new (const char *name,
- EFolder *root_folder);
-
-gboolean e_storage_path_is_relative (const char *path);
-gboolean e_storage_path_is_absolute (const char *path);
-
-GList *e_storage_get_subfolder_paths (EStorage *storage,
- const char *path);
-EFolder *e_storage_get_folder (EStorage *storage,
- const char *path);
-
-const char *e_storage_get_name (EStorage *storage);
-
-/* Folder operations. */
-
-void e_storage_async_create_folder (EStorage *storage,
- const char *path,
- const char *type,
- const char *description,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_remove_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_xfer_folder (EStorage *storage,
- const char *source_path,
- const char *destination_path,
- const gboolean remove_source,
- EStorageResultCallback callback,
- void *data);
-void e_storage_async_open_folder (EStorage *storage,
- const char *path,
- EStorageDiscoveryCallback callback,
- void *data);
-
-const char *e_storage_result_to_string (EStorageResult result);
-
-/* Shared folders. */
-gboolean e_storage_supports_shared_folders (EStorage *storage);
-void e_storage_async_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name,
- EStorageDiscoveryCallback callback,
- void *data);
-void e_storage_cancel_discover_shared_folder (EStorage *storage,
- const char *owner,
- const char *folder_name);
-void e_storage_async_remove_shared_folder (EStorage *storage,
- const char *path,
- EStorageResultCallback callback,
- void *data);
-
-/* Utility functions. */
-
-char *e_storage_get_path_for_physical_uri (EStorage *storage,
- const char *physical_uri);
-
-/* FIXME: Need to rename these. */
-
-gboolean e_storage_new_folder (EStorage *storage,
- const char *path,
- EFolder *folder);
-gboolean e_storage_removed_folder (EStorage *storage,
- const char *path);
-
-gboolean e_storage_declare_has_subfolders (EStorage *storage,
- const char *path,
- const char *message);
-gboolean e_storage_get_has_subfolders (EStorage *storage,
- const char *path);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _E_STORAGE_H_ */
diff --git a/shell/e-user-creatable-items-handler.c b/shell/e-user-creatable-items-handler.c
index dabbe8381a..91ab84647c 100644
--- a/shell/e-user-creatable-items-handler.c
+++ b/shell/e-user-creatable-items-handler.c
@@ -36,6 +36,7 @@
#include <bonobo/bonobo-ui-util.h>
#include <bonobo/bonobo-exception.h>
+#include <bonobo/bonobo-control.h>
#include <libgnome/gnome-i18n.h>
diff --git a/shell/evolution-shell-component-client.c b/shell/evolution-shell-component-client.c
deleted file mode 100644
index 621741a66f..0000000000
--- a/shell/evolution-shell-component-client.c
+++ /dev/null
@@ -1,924 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-client.c
- *
- * Copyright (C) 2000, 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktypeutils.h>
-
-#include <bonobo-activation/bonobo-activation.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-widget.h>
-
-#include <gal/util/e-util.h>
-
-#include "evolution-shell-component-client.h"
-
-
-char *evolution_debug_log;
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-struct _EvolutionShellComponentClientPrivate {
- GNOME_Evolution_ShellComponent corba_objref;
-
- char *id;
-
- EvolutionShellComponentClientCallback callback;
- void *callback_data;
-
- GNOME_Evolution_ShellComponentListener listener_interface;
- PortableServer_Servant listener_servant;
-
- GNOME_Evolution_ShellComponentDnd_SourceFolder dnd_source_folder_interface;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder dnd_destination_folder_interface;
- GNOME_Evolution_Offline offline_interface;
-};
-
-
-#define RETURN_ERROR_IF_FAIL(cond) \
- g_return_val_if_fail ((cond), EVOLUTION_SHELL_COMPONENT_INVALIDARG)
-
-
-/* Utility functions. */
-
-static EvolutionShellComponentResult
-corba_exception_to_result (const CORBA_Environment *ev)
-{
- if (ev->_major == CORBA_NO_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_OK;
-
- if (ev->_major == CORBA_USER_EXCEPTION) {
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_AlreadyOwned) == 0)
- return EVOLUTION_SHELL_COMPONENT_ALREADYOWNED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_OldOwnerHasDied) == 0)
- return EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_NotOwned) == 0)
- return EVOLUTION_SHELL_COMPONENT_NOTOWNED;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_NotFound) == 0)
- return EVOLUTION_SHELL_COMPONENT_NOTFOUND;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_UnsupportedType) == 0)
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_InternalError) == 0)
- return EVOLUTION_SHELL_COMPONENT_INTERNALERROR;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_Busy) == 0)
- return EVOLUTION_SHELL_COMPONENT_BUSY;
- if (strcmp (BONOBO_EX_REPOID (ev), ex_GNOME_Evolution_ShellComponent_UnsupportedSchema) == 0)
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA;
-
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- } else {
- /* FIXME maybe we need something more specific here. */
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR;
- }
-}
-
-static EvolutionShellComponentResult
-shell_component_result_from_corba_exception (const CORBA_Environment *ev)
-{
- if (ev->_major == CORBA_NO_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_OK;
- if (ev->_major == CORBA_SYSTEM_EXCEPTION)
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR;
- return EVOLUTION_SHELL_COMPONENT_CORBAERROR; /* FIXME? */
-}
-
-
-/* CORBA listener interface implementation. */
-
-static PortableServer_ServantBase__epv ShellComponentListener_base_epv;
-static POA_GNOME_Evolution_ShellComponentListener__epv ShellComponentListener_epv;
-static POA_GNOME_Evolution_ShellComponentListener__vepv ShellComponentListener_vepv;
-static gboolean ShellComponentListener_vepv_initialized = FALSE;
-
-static void ShellComponentListener_vepv_initialize (void);
-static void dispatch_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result);
-
-struct _ShellComponentListenerServant {
- POA_GNOME_Evolution_ShellComponentListener servant;
- EvolutionShellComponentClient *component_client;
-};
-typedef struct _ShellComponentListenerServant ShellComponentListenerServant;
-
-static PortableServer_Servant *
-create_ShellComponentListener_servant (EvolutionShellComponentClient *component_client)
-{
- ShellComponentListenerServant *servant;
-
- if (! ShellComponentListener_vepv_initialized)
- ShellComponentListener_vepv_initialize ();
-
- servant = g_new0 (ShellComponentListenerServant, 1);
- servant->servant.vepv = &ShellComponentListener_vepv;
- servant->component_client = component_client;
-
- return (PortableServer_Servant) servant;
-}
-
-static void
-free_ShellComponentListener_servant (PortableServer_Servant servant)
-{
- g_free (servant);
-}
-
-static EvolutionShellComponentClient *
-component_client_from_ShellComponentListener_servant (PortableServer_Servant servant)
-{
- ShellComponentListenerServant *listener_servant;
-
- listener_servant = (ShellComponentListenerServant *) servant;
- return listener_servant->component_client;
-}
-
-static EvolutionShellComponentResult
-result_from_async_corba_result (GNOME_Evolution_ShellComponentListener_Result async_corba_result)
-{
- switch (async_corba_result) {
- case GNOME_Evolution_ShellComponentListener_OK:
- return EVOLUTION_SHELL_COMPONENT_OK;
- case GNOME_Evolution_ShellComponentListener_CANCEL:
- return EVOLUTION_SHELL_COMPONENT_CANCEL;
- case GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION:
- return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION;
- case GNOME_Evolution_ShellComponentListener_EXISTS:
- return EVOLUTION_SHELL_COMPONENT_EXISTS;
- case GNOME_Evolution_ShellComponentListener_INVALID_URI:
- return EVOLUTION_SHELL_COMPONENT_INVALIDURI;
- case GNOME_Evolution_ShellComponentListener_PERMISSION_DENIED:
- return EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED;
- case GNOME_Evolution_ShellComponentListener_HAS_SUBFOLDERS:
- return EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS;
- case GNOME_Evolution_ShellComponentListener_NO_SPACE:
- return EVOLUTION_SHELL_COMPONENT_NOSPACE;
- default:
- return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR;
- }
-}
-
-static void
-impl_ShellComponentListener_report_result (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentListener_Result result,
- CORBA_Environment *ev)
-{
- EvolutionShellComponentClient *component_client;
-
- component_client = component_client_from_ShellComponentListener_servant (servant);
- dispatch_callback (component_client, result_from_async_corba_result (result));
-}
-
-static void
-ShellComponentListener_vepv_initialize (void)
-{
- ShellComponentListener_base_epv._private = NULL;
- ShellComponentListener_base_epv.finalize = NULL;
- ShellComponentListener_base_epv.default_POA = NULL;
-
- ShellComponentListener_epv.notifyResult = impl_ShellComponentListener_report_result;
-
- ShellComponentListener_vepv._base_epv = & ShellComponentListener_base_epv;
- ShellComponentListener_vepv.GNOME_Evolution_ShellComponentListener_epv = & ShellComponentListener_epv;
-
- ShellComponentListener_vepv_initialized = TRUE;
-}
-
-static void
-create_listener_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- PortableServer_Servant listener_servant;
- GNOME_Evolution_ShellComponentListener corba_interface;
- CORBA_Environment ev;
-
- priv = shell_component_client->priv;
-
- listener_servant = create_ShellComponentListener_servant (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- POA_GNOME_Evolution_ShellComponentListener__init (listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- free_ShellComponentListener_servant (listener_servant);
- return;
- }
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), listener_servant, &ev));
-
- corba_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), listener_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- corba_interface = CORBA_OBJECT_NIL;
- free_ShellComponentListener_servant (listener_servant);
- }
-
- CORBA_exception_free (&ev);
-
- priv->listener_servant = listener_servant;
- priv->listener_interface = corba_interface;
-}
-
-static void
-destroy_listener_interface (EvolutionShellComponentClient *client)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
- PortableServer_ObjectId *oid;
-
- priv = client->priv;
- CORBA_exception_init (&ev);
-
- oid = PortableServer_POA_servant_to_id (bonobo_poa (), priv->listener_servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), oid, &ev);
- CORBA_free (oid);
-
- CORBA_Object_release (priv->listener_interface, &ev);
- /* free_ShellComponentListener_servant (priv->listener_servant); */
-
- CORBA_exception_free (&ev);
-}
-
-static void
-dispatch_callback (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result)
-{
- EvolutionShellComponentClientPrivate *priv;
- EvolutionShellComponentClientCallback callback;
- void *callback_data;
-
- priv = shell_component_client->priv;
-
- g_return_if_fail (priv->callback != NULL);
- g_return_if_fail (priv->listener_servant != NULL);
-
- /* Notice that we destroy the interface and reset the callback information before
- dispatching the callback so that the callback can generate another request. */
-
- destroy_listener_interface (shell_component_client);
-
- priv->listener_servant = NULL;
- priv->listener_interface = CORBA_OBJECT_NIL;
-
- callback = priv->callback;
- callback_data = priv->callback_data;
-
- priv->callback = NULL;
- priv->callback_data = NULL;
-
- (* callback) (shell_component_client, result, callback_data);
-}
-
-
-/* GObject methods. */
-
-static void
-impl_dispose (GObject *object)
-{
- EvolutionShellComponentClient *shell_component_client;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- shell_component_client = EVOLUTION_SHELL_COMPONENT_CLIENT (object);
- priv = shell_component_client->priv;
-
- if (priv == NULL)
- return;
-
- g_free (priv->id);
- priv->id = NULL;
-
- if (priv->callback != NULL) {
- dispatch_callback (shell_component_client, EVOLUTION_SHELL_COMPONENT_INTERRUPTED);
- priv->callback = NULL;
- }
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_objref != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->corba_objref, &ev);
- CORBA_Object_release (priv->corba_objref, &ev);
- priv->corba_objref = CORBA_OBJECT_NIL;
- }
-
- if (priv->dnd_source_folder_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->dnd_source_folder_interface, &ev);
- CORBA_Object_release (priv->dnd_source_folder_interface, &ev);
- priv->dnd_source_folder_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->dnd_destination_folder_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->dnd_destination_folder_interface, &ev);
- CORBA_Object_release (priv->dnd_destination_folder_interface, &ev);
- priv->dnd_destination_folder_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->offline_interface != CORBA_OBJECT_NIL) {
- Bonobo_Unknown_unref (priv->offline_interface, &ev);
- CORBA_Object_release (priv->offline_interface, &ev);
- priv->offline_interface = CORBA_OBJECT_NIL;
- }
-
- if (priv->listener_interface != CORBA_OBJECT_NIL) {
- destroy_listener_interface (shell_component_client);
- priv->listener_interface = CORBA_OBJECT_NIL;
- }
-
- CORBA_exception_free (&ev);
-
- (* G_OBJECT_CLASS (parent_class)->dispose) (object);
-}
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionShellComponentClient *client;
-
- client = EVOLUTION_SHELL_COMPONENT_CLIENT (object);
-
- g_free (client->priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-class_init (EvolutionShellComponentClientClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class->dispose = impl_dispose;
- object_class->finalize = impl_finalize;
-}
-
-static void
-init (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- priv = g_new (EvolutionShellComponentClientPrivate, 1);
-
- priv->corba_objref = CORBA_OBJECT_NIL;
-
- priv->id = NULL;
-
- priv->listener_interface = CORBA_OBJECT_NIL;
- priv->listener_servant = NULL;
-
- priv->callback = NULL;
- priv->callback_data = NULL;
-
- priv->dnd_source_folder_interface = CORBA_OBJECT_NIL;
- priv->dnd_destination_folder_interface = CORBA_OBJECT_NIL;
- priv->offline_interface = CORBA_OBJECT_NIL;
-
- shell_component_client->priv = priv;
-}
-
-
-/* Construction. */
-
-void
-evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client,
- const char *id,
- CORBA_Object corba_object)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
- priv->corba_objref = corba_object;
- priv->id = g_strdup (id);
-}
-
-EvolutionShellComponentClient *
-evolution_shell_component_client_new (const char *id,
- CORBA_Environment *ev)
-{
- EvolutionShellComponentClient *new;
- CORBA_Object corba_object;
- CORBA_Environment *local_ev;
- CORBA_Environment static_ev;
-
- g_return_val_if_fail (id != NULL, NULL);
-
- CORBA_exception_init (&static_ev);
-
- if (ev == NULL)
- local_ev = &static_ev;
- else
- local_ev = ev;
-
- corba_object = bonobo_activation_activate_from_id ((char *) id, 0, NULL, ev);
- if (ev->_major != CORBA_NO_EXCEPTION || corba_object == NULL) {
- CORBA_exception_free (&static_ev);
- return NULL;
- }
-
- CORBA_exception_free (&static_ev);
-
- new = g_object_new (evolution_shell_component_client_get_type (), NULL);
- evolution_shell_component_client_construct (new, id, corba_object);
-
- return new;
-}
-
-GNOME_Evolution_ShellComponent
-evolution_shell_component_client_corba_objref (EvolutionShellComponentClient *component_client)
-{
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (component_client), NULL);
-
- return component_client->priv->corba_objref;
-}
-
-
-/* Properties. */
-
-const char *
-evolution_shell_component_client_get_id (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
-
- g_return_val_if_fail (shell_component_client != NULL, NULL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), NULL);
-
- priv = shell_component_client->priv;
-
- return priv->id;
-}
-
-
-/* Querying DnD interfaces. */
-
-GNOME_Evolution_ShellComponentDnd_SourceFolder
-evolution_shell_component_client_get_dnd_source_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponentDnd_SourceFolder interface;
- CORBA_Environment ev;
-
- g_return_val_if_fail (shell_component_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- if (priv->dnd_source_folder_interface != CORBA_OBJECT_NIL)
- return priv->dnd_source_folder_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref,
- "IDL:GNOME/Evolution/ShellComponentDnd/SourceFolder:1.0",
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->dnd_source_folder_interface = interface;
- return interface;
-}
-
-GNOME_Evolution_ShellComponentDnd_DestinationFolder
-evolution_shell_component_client_get_dnd_destination_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponentDnd_DestinationFolder interface;
- CORBA_Environment ev;
-
- g_return_val_if_fail (shell_component_client != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client), CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- if (priv->dnd_destination_folder_interface != CORBA_OBJECT_NIL)
- return priv->dnd_destination_folder_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref,
- "IDL:GNOME/Evolution/ShellComponentDnd/DestinationFolder:1.0",
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->dnd_destination_folder_interface = interface;
- return interface;
-}
-
-
-/* Querying the offline interface. */
-
-GNOME_Evolution_Offline
-evolution_shell_component_client_get_offline_interface (EvolutionShellComponentClient *shell_component_client)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_Offline interface;
- CORBA_Environment ev;
-
- priv = shell_component_client->priv;
-
- if (priv->offline_interface != CORBA_OBJECT_NIL)
- return priv->offline_interface;
-
- CORBA_exception_init (&ev);
-
- interface = Bonobo_Unknown_queryInterface (priv->corba_objref, "IDL:GNOME/Evolution/Offline:1.0", &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- interface = CORBA_OBJECT_NIL;
-
- CORBA_exception_free (&ev);
-
- priv->offline_interface = interface;
- return interface;
-}
-
-
-/* Synchronous operations. */
-
-EvolutionShellComponentResult
-evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell,
- const char *evolution_homedir)
-{
- EvolutionShellComponentResult result;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_setOwner (priv->corba_objref, shell, evolution_homedir, &ev);
-
- result = corba_exception_to_result (&ev);
-
- if (result == EVOLUTION_SHELL_COMPONENT_OK && evolution_debug_log)
- GNOME_Evolution_ShellComponent_debug (priv->corba_objref, evolution_debug_log, &ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell)
-{
- EvolutionShellComponentResult result;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL);
-
- CORBA_exception_init (&ev);
-
- GNOME_Evolution_ShellComponent_unsetOwner (shell_component_client->priv->corba_objref, &ev);
-
- result = corba_exception_to_result (&ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client,
- BonoboUIComponent *uih,
- const char *physical_uri,
- const char *type_string,
- const char *view_info,
- BonoboControl **control_return)
-{
- EvolutionShellComponentResult result;
- CORBA_Environment ev;
- EvolutionShellComponentClientPrivate *priv;
- Bonobo_Control corba_control;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (uih != NULL);
- RETURN_ERROR_IF_FAIL (BONOBO_IS_UI_COMPONENT (uih));
- RETURN_ERROR_IF_FAIL (physical_uri != NULL);
- RETURN_ERROR_IF_FAIL (type_string != NULL);
- RETURN_ERROR_IF_FAIL (view_info != NULL);
- RETURN_ERROR_IF_FAIL (control_return != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_control = GNOME_Evolution_ShellComponent_createView (priv->corba_objref, physical_uri, type_string, view_info, &ev);
-
- result = corba_exception_to_result (&ev);
-
- if (result != EVOLUTION_SHELL_COMPONENT_OK) {
- *control_return = NULL;
- } else {
- Bonobo_UIContainer corba_uih;
-
- corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (uih));
- *control_return = BONOBO_CONTROL (bonobo_widget_new_control_from_objref (corba_control, corba_uih));
- }
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-EvolutionShellComponentResult
-evolution_shell_component_client_handle_external_uri (EvolutionShellComponentClient *shell_component_client,
- const char *uri)
-{
- EvolutionShellComponentResult result;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- RETURN_ERROR_IF_FAIL (shell_component_client != NULL);
- RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- RETURN_ERROR_IF_FAIL (uri != NULL);
-
- CORBA_exception_init (&ev);
-
- priv = shell_component_client->priv;
-
- GNOME_Evolution_ShellComponent_handleExternalURI (priv->corba_objref, uri, &ev);
-
- result = corba_exception_to_result (&ev);
-
- CORBA_exception_free (&ev);
-
- return result;
-}
-
-
-/* Asyncronous operations. */
-
-void
-evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_createFolderAsync (priv->corba_objref, priv->listener_interface, physical_uri, type, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_removeFolderAsync (priv->corba_objref, priv->listener_interface, physical_uri, type, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_async_xfer_folder (EvolutionShellComponentClient *shell_component_client,
- const char *source_physical_uri,
- const char *destination_physical_uri,
- const char *type,
- gboolean remove_source,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (source_physical_uri != NULL);
- g_return_if_fail (destination_physical_uri != NULL);
- g_return_if_fail (data != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_xferFolderAsync (priv->corba_objref, priv->listener_interface,
- source_physical_uri, destination_physical_uri, type, remove_source,
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type)
-{
- Bonobo_UIContainer corba_container;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_container = bonobo_object_corba_objref (BONOBO_OBJECT (container));
-
- GNOME_Evolution_ShellComponent_populateFolderContextMenu (priv->corba_objref, corba_container, physical_uri, type, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-void
-evolution_shell_component_client_unpopulate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type)
-{
- Bonobo_UIContainer corba_container;
- EvolutionShellComponentClientPrivate *priv;
- CORBA_Environment ev;
-
- g_return_if_fail (shell_component_client != NULL);
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (physical_uri != NULL);
- g_return_if_fail (type != NULL);
-
- priv = shell_component_client->priv;
-
- CORBA_exception_init (&ev);
-
- corba_container = bonobo_object_corba_objref (BONOBO_OBJECT (container));
-
- GNOME_Evolution_ShellComponent_unpopulateFolderContextMenu (priv->corba_objref, corba_container, physical_uri, type, &ev);
-
- CORBA_exception_free (&ev);
-}
-
-
-void
-evolution_shell_component_client_request_quit (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentClientCallback callback,
- void *data)
-{
- EvolutionShellComponentClientPrivate *priv;
- GNOME_Evolution_ShellComponent corba_shell_component;
- CORBA_Environment ev;
-
- g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client));
- g_return_if_fail (callback != NULL);
-
- priv = shell_component_client->priv;
-
- if (priv->callback != NULL) {
- (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data);
- return;
- }
-
- create_listener_interface (shell_component_client);
-
- CORBA_exception_init (&ev);
-
- corba_shell_component = evolution_shell_component_client_corba_objref (shell_component_client);
-
- priv->callback = callback;
- priv->callback_data = data;
-
- GNOME_Evolution_ShellComponent_requestQuit (corba_shell_component, priv->listener_interface, &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION && priv->callback != NULL) {
- (* callback) (shell_component_client,
- shell_component_result_from_corba_exception (&ev),
- data);
- priv->callback = NULL;
- priv->callback_data = NULL;
- }
-
- CORBA_exception_free (&ev);
-}
-
-
-E_MAKE_TYPE (evolution_shell_component_client, "EvolutionShellComponentClient",
- EvolutionShellComponentClient, class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-shell-component-client.h b/shell/evolution-shell-component-client.h
deleted file mode 100644
index e396b17082..0000000000
--- a/shell/evolution-shell-component-client.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-client.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef EVOLUTION_SHELL_COMPONENT_CLIENT_H
-#define EVOLUTION_SHELL_COMPONENT_CLIENT_H
-
-#include <glib-object.h>
-
-#include <bonobo/bonobo-ui-container.h>
-#include <bonobo/bonobo-ui-component.h>
-
-#include "evolution-shell-component.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-#define EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT (evolution_shell_component_client_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClient))
-#define EVOLUTION_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClientClass))
-#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT))
-#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT))
-
-
-typedef struct _EvolutionShellComponentClient EvolutionShellComponentClient;
-typedef struct _EvolutionShellComponentClientPrivate EvolutionShellComponentClientPrivate;
-typedef struct _EvolutionShellComponentClientClass EvolutionShellComponentClientClass;
-
-struct _EvolutionShellComponentClient {
- GObject parent;
-
- EvolutionShellComponentClientPrivate *priv;
-};
-
-struct _EvolutionShellComponentClientClass {
- GObjectClass parent_class;
-};
-
-typedef void (* EvolutionShellComponentClientCallback) (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentResult result,
- void *data);
-
-
-/* Construction. */
-GtkType evolution_shell_component_client_get_type (void);
-void evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client,
- const char *id,
- CORBA_Object corba_object);
-EvolutionShellComponentClient *evolution_shell_component_client_new (const char *id,
- CORBA_Environment *optional_ev);
-
-GNOME_Evolution_ShellComponent evolution_shell_component_client_corba_objref (EvolutionShellComponentClient *client);
-
-/* Properties. */
-
-const char *evolution_shell_component_client_get_id (EvolutionShellComponentClient *shell_component_client);
-
-/* Querying DnD interfaces. */
-
-GNOME_Evolution_ShellComponentDnd_SourceFolder
-evolution_shell_component_client_get_dnd_source_interface (EvolutionShellComponentClient *shell_component_client);
-GNOME_Evolution_ShellComponentDnd_DestinationFolder
-evolution_shell_component_client_get_dnd_destination_interface (EvolutionShellComponentClient *shell_component_client);
-
-/* Querying the offline interface. */
-GNOME_Evolution_Offline
-evolution_shell_component_client_get_offline_interface (EvolutionShellComponentClient *shell_component_client);
-
-/* Synchronous operations. */
-
-EvolutionShellComponentResult evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell,
- const char *evolution_homedir);
-EvolutionShellComponentResult evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client,
- GNOME_Evolution_Shell shell);
-EvolutionShellComponentResult evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client,
- BonoboUIComponent *uih,
- const char *physical_uri,
- const char *type_string,
- const char *view_info,
- BonoboControl **control_return);
-
-EvolutionShellComponentResult evolution_shell_component_client_handle_external_uri (EvolutionShellComponentClient *shell_component_client,
- const char *uri);
-
-/* Asyncronous operations. */
-void evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data);
-void evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client,
- const char *physical_uri,
- const char *type,
- EvolutionShellComponentClientCallback callback,
- void *data);
-void evolution_shell_component_client_async_xfer_folder (EvolutionShellComponentClient *shell_component_client,
- const char *source_physical_uri,
- const char *destination_physical_uri,
- const char *type,
- gboolean remove_source,
- EvolutionShellComponentClientCallback callback,
- void *data);
-
-void evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type);
-void evolution_shell_component_client_unpopulate_folder_context_menu (EvolutionShellComponentClient *shell_component_client,
- BonoboUIContainer *container,
- const char *physical_uri,
- const char *type);
-
-void evolution_shell_component_client_request_quit (EvolutionShellComponentClient *shell_component_client,
- EvolutionShellComponentClientCallback callback,
- void *data);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* EVOLUTION_SHELL_COMPONENT_CLIENT_H */
diff --git a/shell/evolution-shell-component-dnd.c b/shell/evolution-shell-component-dnd.c
deleted file mode 100644
index 61bb3565e1..0000000000
--- a/shell/evolution-shell-component-dnd.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-dnd.c
- *
- * Copyright (C) 2000, 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: Chris Toshok
- */
-
-#include "Evolution.h"
-#include "evolution-shell-component-dnd.h"
-
-#include <gal/util/e-util.h>
-
-#include <gtk/gtkobject.h>
-
-#define PARENT_TYPE (bonobo_object_get_type ())
-
-static BonoboObjectClass *parent_class;
-
-/* Source Folder stuff */
-
-struct _DndSourceFolderPrivate {
- DndSourceFolderBeginDragFn begin_drag;
- DndSourceFolderGetDataFn get_data;
- DndSourceFolderDeleteDataFn delete_data;
- DndSourceFolderEndDragFn end_drag;
- gpointer user_data;
-};
-
-/* GObject methods */
-static void
-dnd_source_finalize (GObject *object)
-{
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (object);
- priv = folder->priv;
-
- g_return_if_fail (priv != NULL);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_beginDrag (PortableServer_Servant servant, const CORBA_char * physical_uri,
- const CORBA_char * folder_type, GNOME_Evolution_ShellComponentDnd_ActionSet * possible_actions,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->begin_drag (folder, physical_uri, folder_type, possible_actions, suggested_action, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_getData (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- const GNOME_Evolution_ShellComponentDnd_Action action, const CORBA_char * dnd_type,
- GNOME_Evolution_ShellComponentDnd_Data ** data, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->get_data (folder, source_context, action, dnd_type, data, ev, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_deleteData (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->delete_data (folder, source_context, priv->user_data);
-}
-
-static void
-impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag (PortableServer_Servant servant,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndSourceFolder *folder;
- DndSourceFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER (bonobo_object);
- priv = folder->priv;
-
- priv->end_drag (folder, source_context, priv->user_data);
-}
-
-static void
-evolution_shell_component_dnd_source_folder_class_init (EvolutionShellComponentDndSourceFolderClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = dnd_source_finalize;
-
- klass->epv.beginDrag = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_beginDrag;
- klass->epv.getData = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_getData;
- klass->epv.deleteData = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_deleteData;
- klass->epv.endDrag = impl_GNOME_Evolution_ShellComponentDnd_SourceFolder_endDrag;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-evolution_shell_component_dnd_source_folder_init (EvolutionShellComponentDndSourceFolder *folder)
-{
- DndSourceFolderPrivate *priv;
-
- priv = g_new (DndSourceFolderPrivate, 1);
-
- folder->priv = priv;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellComponentDndSourceFolder,
- GNOME_Evolution_ShellComponentDnd_SourceFolder,
- PARENT_TYPE,
- evolution_shell_component_dnd_source_folder)
-
-EvolutionShellComponentDndSourceFolder*
-evolution_shell_component_dnd_source_folder_new (DndSourceFolderBeginDragFn begin_drag,
- DndSourceFolderGetDataFn get_data,
- DndSourceFolderDeleteDataFn delete_data,
- DndSourceFolderEndDragFn end_drag,
- gpointer user_data)
-{
- EvolutionShellComponentDndSourceFolder *dnd_source;
-
- g_return_val_if_fail (begin_drag != NULL, NULL);
- g_return_val_if_fail (get_data != NULL, NULL);
- g_return_val_if_fail (delete_data != NULL, NULL);
- g_return_val_if_fail (end_drag != NULL, NULL);
-
- dnd_source = g_object_new (evolution_shell_component_dnd_source_folder_get_type (), NULL);
-
- dnd_source->priv->begin_drag = begin_drag;
- dnd_source->priv->get_data = get_data;
- dnd_source->priv->delete_data = delete_data;
- dnd_source->priv->end_drag = end_drag;
- dnd_source->priv->user_data = user_data;
-
- return dnd_source;
-}
-
-
-
-/* Destination Folder stuff */
-
-struct _DndDestinationFolderPrivate {
- DndDestinationFolderHandleMotionFn handle_motion;
- DndDestinationFolderHandleDropFn handle_drop;
- gpointer user_data;
-};
-
-/* GtkObject methods */
-static void
-dnd_destination_finalize (GObject *object)
-{
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (object);
- priv = folder->priv;
-
- g_return_if_fail (priv != NULL);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-/* CORBA interface */
-static CORBA_boolean
-impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion (PortableServer_Servant servant,
- const CORBA_char* physical_uri,
- const CORBA_char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (bonobo_object);
- priv = folder->priv;
-
- return priv->handle_motion (folder, physical_uri, folder_type, destination_context, suggested_action, priv->user_data);
-}
-
-static CORBA_boolean
-impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop (PortableServer_Servant servant,
- const CORBA_char *physical_uri,
- const CORBA_char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const GNOME_Evolution_ShellComponentDnd_Data * data, CORBA_Environment * ev)
-{
- BonoboObject *bonobo_object;
- EvolutionShellComponentDndDestinationFolder *folder;
- DndDestinationFolderPrivate *priv;
-
- bonobo_object = bonobo_object_from_servant (servant);
- folder = EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER (bonobo_object);
- priv = folder->priv;
-
- return priv->handle_drop (folder, physical_uri, folder_type, destination_context, action, data, priv->user_data);
-}
-
-static void
-evolution_shell_component_dnd_destination_folder_class_init (EvolutionShellComponentDndDestinationFolderClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = dnd_destination_finalize;
-
- klass->epv.handleMotion = impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleMotion;
- klass->epv.handleDrop = impl_GNOME_Evolution_ShellComponentDnd_DestinationFolder_handleDrop;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-}
-
-static void
-evolution_shell_component_dnd_destination_folder_init (EvolutionShellComponentDndDestinationFolder *folder)
-{
- DndDestinationFolderPrivate *priv;
-
- priv = g_new (DndDestinationFolderPrivate, 1);
-
- folder->priv = priv;
-}
-
-BONOBO_TYPE_FUNC_FULL (EvolutionShellComponentDndDestinationFolder,
- GNOME_Evolution_ShellComponentDnd_DestinationFolder,
- PARENT_TYPE,
- evolution_shell_component_dnd_destination_folder)
-
-EvolutionShellComponentDndDestinationFolder *
-evolution_shell_component_dnd_destination_folder_new (DndDestinationFolderHandleMotionFn handle_motion,
- DndDestinationFolderHandleDropFn handle_drop,
- gpointer user_data)
-{
- EvolutionShellComponentDndDestinationFolder *dnd_destination;
-
- g_return_val_if_fail (handle_motion != NULL, NULL);
- g_return_val_if_fail (handle_drop != NULL, NULL);
-
- dnd_destination = g_object_new (evolution_shell_component_dnd_destination_folder_get_type (), NULL);
-
- dnd_destination->priv->handle_motion = handle_motion;
- dnd_destination->priv->handle_drop = handle_drop;
- dnd_destination->priv->user_data = user_data;
-
- return dnd_destination;
-}
-
diff --git a/shell/evolution-shell-component-dnd.h b/shell/evolution-shell-component-dnd.h
deleted file mode 100644
index 25922bca97..0000000000
--- a/shell/evolution-shell-component-dnd.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-shell-component-dnd.h
- *
- * Copyright (C) 2000, 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: Chris Toshok
- */
-
-#ifndef EVOLUTION_SHELL_COMPONENT_DND_H
-#define EVOLUTION_SHELL_COMPONENT_DND_H
-
-#include <bonobo/bonobo-object.h>
-#include <gtk/gtktypeutils.h>
-
-#include "Evolution.h"
-
-#ifdef cplusplus
-extern "C" {
-#pragma }
-#endif /* cplusplus */
-
-/* Source Folder stuff */
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE (evolution_shell_component_dnd_source_folder_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE, EvolutionShellComponentDndSourceFolder))
-#define EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE, EvolutionShellComponentDndSourceFolderClass))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_SOURCE_FOLDER_TYPE))
-
-typedef struct _DndSourceFolderPrivate DndSourceFolderPrivate;
-typedef struct _EvolutionShellComponentDndSourceFolder EvolutionShellComponentDndSourceFolder;
-typedef struct _EvolutionShellComponentDndSourceFolderClass EvolutionShellComponentDndSourceFolderClass;
-
-typedef void (*DndSourceFolderBeginDragFn)(EvolutionShellComponentDndSourceFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- GNOME_Evolution_ShellComponentDnd_ActionSet *possible_actions_return,
- GNOME_Evolution_ShellComponentDnd_Action *suggested_action_return,
- gpointer closure);
-typedef void (*DndSourceFolderGetDataFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context * source_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const char * dnd_type,
- GNOME_Evolution_ShellComponentDnd_Data ** data_return,
- CORBA_Environment *ev,
- gpointer closure);
-typedef void (*DndSourceFolderDeleteDataFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *source_context,
- gpointer closure);
-typedef void (*DndSourceFolderEndDragFn)(EvolutionShellComponentDndSourceFolder *folder,
- const GNOME_Evolution_ShellComponentDnd_SourceFolder_Context *source_context,
- gpointer closure);
-
-struct _EvolutionShellComponentDndSourceFolder {
- BonoboObject object;
- DndSourceFolderPrivate *priv;
-};
-
-struct _EvolutionShellComponentDndSourceFolderClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ShellComponentDnd_SourceFolder__epv epv;
-};
-
-GtkType evolution_shell_component_dnd_source_folder_get_type (void);
-
-EvolutionShellComponentDndSourceFolder*
-evolution_shell_component_dnd_source_folder_new (DndSourceFolderBeginDragFn begin_drag,
- DndSourceFolderGetDataFn get_data,
- DndSourceFolderDeleteDataFn delete_data,
- DndSourceFolderEndDragFn end_drag,
- gpointer user_data);
-
-
-
-/* Destination Folder stuff */
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE (evolution_shell_component_dnd_destination_folder_get_type ())
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE, EvolutionShellComponentDndDestinationFolder))
-#define EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE, EvolutionShellComponentDndDestinationFolderClass))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE))
-#define IS_EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_SHELL_COMPONENT_DND_DESTINATION_FOLDER_TYPE))
-
-typedef struct _DndDestinationFolderPrivate DndDestinationFolderPrivate;
-typedef struct _EvolutionShellComponentDndDestinationFolder EvolutionShellComponentDndDestinationFolder;
-typedef struct _EvolutionShellComponentDndDestinationFolderClass EvolutionShellComponentDndDestinationFolderClass;
-
-typedef CORBA_boolean (*DndDestinationFolderHandleMotionFn)(EvolutionShellComponentDndDestinationFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- GNOME_Evolution_ShellComponentDnd_Action * suggested_action_return,
- gpointer closure);
-typedef CORBA_boolean (*DndDestinationFolderHandleDropFn)(EvolutionShellComponentDndDestinationFolder *folder,
- const char *physical_uri,
- const char *folder_type,
- const GNOME_Evolution_ShellComponentDnd_DestinationFolder_Context * destination_context,
- const GNOME_Evolution_ShellComponentDnd_Action action,
- const GNOME_Evolution_ShellComponentDnd_Data * data,
- gpointer closure);
-
-struct _EvolutionShellComponentDndDestinationFolder {
- BonoboObject object;
- DndDestinationFolderPrivate *priv;
-};
-
-struct _EvolutionShellComponentDndDestinationFolderClass {
- BonoboObjectClass parent_class;
-
- POA_GNOME_Evolution_ShellComponentDnd_DestinationFolder__epv epv;
-};
-
-GtkType evolution_shell_component_dnd_destination_folder_get_type (void);
-
-EvolutionShellComponentDndDestinationFolder*
-evolution_shell_component_dnd_destination_folder_new (DndDestinationFolderHandleMotionFn handle_motion,
- DndDestinationFolderHandleDropFn handle_drop,
- gpointer user_data);
-
-#ifdef cplusplus
-}
-#endif /* cplusplus */
-
-#endif /* EVOLUTION_SHELL_COMPONENT_DND_H */
diff --git a/shell/evolution-storage-listener.c b/shell/evolution-storage-listener.c
deleted file mode 100644
index 3961014846..0000000000
--- a/shell/evolution-storage-listener.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-listener.c
- *
- * Copyright (C) 2000 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-main.h>
-#include <gal/util/e-util.h>
-
-#include "evolution-storage-listener.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _EvolutionStorageListenerPrivate {
- GNOME_Evolution_StorageListener corba_objref;
- EvolutionStorageListenerServant *servant;
-};
-
-
-enum {
- DESTROYED,
- NEW_FOLDER,
- UPDATE_FOLDER,
- REMOVED_FOLDER,
- HAS_SUBFOLDERS,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Evolution::StorageListener implementation. */
-
-static POA_GNOME_Evolution_StorageListener__vepv my_GNOME_Evolution_StorageListener_vepv;
-
-static EvolutionStorageListener *
-gtk_object_from_servant (PortableServer_Servant servant)
-{
- EvolutionStorageListenerServant *my_servant;
-
- my_servant = (EvolutionStorageListenerServant *) servant;
- return my_servant->gtk_object;
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyDestroyed (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[DESTROYED], 0);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderCreated (PortableServer_Servant servant,
- const CORBA_char *path,
- const GNOME_Evolution_Folder *folder,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[NEW_FOLDER], 0, path, folder);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderUpdated (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_long unread_count,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[UPDATE_FOLDER], 0, path, unread_count);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyFolderRemoved (PortableServer_Servant servant,
- const CORBA_char *path,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[REMOVED_FOLDER], 0, path);
-}
-
-static void
-impl_GNOME_Evolution_StorageListener_notifyHasSubfolders (PortableServer_Servant servant,
- const CORBA_char *path,
- const CORBA_char *message,
- CORBA_Environment *ev)
-{
- EvolutionStorageListener *listener;
- EvolutionStorageListenerPrivate *priv;
-
- listener = gtk_object_from_servant (servant);
- priv = listener->priv;
-
- g_signal_emit (listener, signals[HAS_SUBFOLDERS], 0, path, message);
-}
-
-static EvolutionStorageListenerServant *
-create_servant (EvolutionStorageListener *listener)
-{
- EvolutionStorageListenerServant *servant;
- POA_GNOME_Evolution_StorageListener *corba_servant;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- servant = g_new0 (EvolutionStorageListenerServant, 1);
- corba_servant = (POA_GNOME_Evolution_StorageListener *) servant;
-
- corba_servant->vepv = &my_GNOME_Evolution_StorageListener_vepv;
- POA_GNOME_Evolution_StorageListener__init ((PortableServer_Servant) corba_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- servant->gtk_object = listener;
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-
-static GNOME_Evolution_StorageListener
-activate_servant (EvolutionStorageListener *listener,
- POA_GNOME_Evolution_StorageListener *servant)
-{
- GNOME_Evolution_StorageListener corba_object;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- corba_object = PortableServer_POA_servant_to_reference (bonobo_poa(), servant, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION && ! CORBA_Object_is_nil (corba_object, &ev)) {
- CORBA_exception_free (&ev);
- return corba_object;
- }
-
- CORBA_exception_free (&ev);
-
- return CORBA_OBJECT_NIL;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorageListener *storage_listener;
- EvolutionStorageListenerPrivate *priv;
- CORBA_Environment ev;
-
- storage_listener = EVOLUTION_STORAGE_LISTENER (object);
- priv = storage_listener->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_objref != CORBA_OBJECT_NIL)
- CORBA_Object_release (priv->corba_objref, &ev);
-
- if (priv->servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa(), priv->servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
- CORBA_free (object_id);
- }
-
- CORBA_exception_free (&ev);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageListener__vepv *vepv;
- POA_GNOME_Evolution_StorageListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageListener__epv, 1);
- epv->notifyDestroyed = impl_GNOME_Evolution_StorageListener_notifyDestroyed;
- epv->notifyFolderCreated = impl_GNOME_Evolution_StorageListener_notifyFolderCreated;
- epv->notifyFolderUpdated = impl_GNOME_Evolution_StorageListener_notifyFolderUpdated;
- epv->notifyFolderRemoved = impl_GNOME_Evolution_StorageListener_notifyFolderRemoved;
- epv->notifyHasSubfolders = impl_GNOME_Evolution_StorageListener_notifyHasSubfolders;
-
- vepv = & my_GNOME_Evolution_StorageListener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageListener_epv = epv;
-}
-
-static void
-class_init (EvolutionStorageListenerClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_ref(PARENT_TYPE);
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- signals[DESTROYED]
- = g_signal_new ("destroyed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, destroyed),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- signals[NEW_FOLDER]
- = g_signal_new ("new_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, new_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_POINTER,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_POINTER);
-
- signals[UPDATE_FOLDER]
- = g_signal_new ("update_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, update_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_INT,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_INT);
-
- signals[REMOVED_FOLDER]
- = g_signal_new ("removed_folder",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, removed_folder),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[HAS_SUBFOLDERS]
- = g_signal_new ("has_subfolders",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageListenerClass, has_subfolders),
- NULL, NULL,
- e_shell_marshal_NONE__STRING_STRING,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- corba_class_init ();
-}
-
-static void
-init (EvolutionStorageListener *storage_listener)
-{
- EvolutionStorageListenerPrivate *priv;
-
- priv = g_new (EvolutionStorageListenerPrivate, 1);
- priv->corba_objref = CORBA_OBJECT_NIL;
-
- storage_listener->priv = priv;
-}
-
-
-void
-evolution_storage_listener_construct (EvolutionStorageListener *listener,
- GNOME_Evolution_StorageListener corba_objref)
-{
- EvolutionStorageListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (corba_objref != CORBA_OBJECT_NIL);
-
- priv = listener->priv;
-
- g_return_if_fail (priv->corba_objref == CORBA_OBJECT_NIL);
-
- priv->corba_objref = corba_objref;
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (listener), GTK_FLOATING);
-}
-
-EvolutionStorageListener *
-evolution_storage_listener_new (void)
-{
- EvolutionStorageListener *new;
- EvolutionStorageListenerPrivate *priv;
- GNOME_Evolution_StorageListener corba_objref;
-
- new = g_object_new (evolution_storage_listener_get_type (), NULL);
- priv = new->priv;
-
- priv->servant = create_servant (new);
- corba_objref = activate_servant (new, (POA_GNOME_Evolution_StorageListener *) priv->servant);
-
- evolution_storage_listener_construct (new, corba_objref);
-
- return new;
-}
-
-
-/**
- * evolution_storage_listener_corba_objref:
- * @listener: A pointer to an EvolutionStorageListener
- *
- * Get the CORBA object reference for the interface embedded in this GTK+
- * object wrapper.
- *
- * Return value: A pointer to the CORBA object reference.
- **/
-GNOME_Evolution_StorageListener
-evolution_storage_listener_corba_objref (EvolutionStorageListener *listener)
-{
- EvolutionStorageListenerPrivate *priv;
-
- g_return_val_if_fail (listener != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE_LISTENER (listener), CORBA_OBJECT_NIL);
-
- priv = listener->priv;
- return priv->corba_objref;
-}
-
-
-E_MAKE_TYPE (evolution_storage_listener, "EvolutionStorageListener", EvolutionStorageListener,
- class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-storage-listener.h b/shell/evolution-storage-listener.h
deleted file mode 100644
index e48a3243f8..0000000000
--- a/shell/evolution-storage-listener.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-listener.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef __EVOLUTION_STORAGE_LISTENER_H__
-#define __EVOLUTION_STORAGE_LISTENER_H__
-
-#include <gtk/gtkobject.h>
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE_LISTENER (evolution_storage_listener_get_type ())
-#define EVOLUTION_STORAGE_LISTENER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE_LISTENER, EvolutionStorageListener))
-#define EVOLUTION_STORAGE_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE_LISTENER, EvolutionStorageListenerClass))
-#define EVOLUTION_IS_STORAGE_LISTENER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE_LISTENER))
-#define EVOLUTION_IS_STORAGE_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE_LISTENER))
-
-
-typedef struct _EvolutionStorageListener EvolutionStorageListener;
-typedef struct _EvolutionStorageListenerPrivate EvolutionStorageListenerPrivate;
-typedef struct _EvolutionStorageListenerClass EvolutionStorageListenerClass;
-
-struct _EvolutionStorageListener {
- GtkObject parent;
-
- EvolutionStorageListenerPrivate *priv;
-};
-
-struct _EvolutionStorageListenerClass {
- GtkObjectClass parent_class;
-
- /* Signals. */
- void (* destroyed) (EvolutionStorageListener *storage_listener);
- void (* new_folder) (EvolutionStorageListener *storage_listener,
- const char *path,
- const GNOME_Evolution_Folder *folder);
- void (* update_folder) (EvolutionStorageListener *storage_listener,
- const char *path,
- int unread_count);
- void (* removed_folder) (EvolutionStorageListener *storage_listener,
- const char *path);
- void (* has_subfolders) (EvolutionStorageListener *storage_listener,
- const char *path,
- const char *message);
-
- void (* shared_folder_discovery_result) (EvolutionStorageListener *storage_listener,
- const char *user,
- const char *folder_name,
- const char *storage_path,
- const char *physical_uri);
-};
-
-
-struct _EvolutionStorageListenerServant {
- POA_GNOME_Evolution_StorageListener servant_placeholder;
- EvolutionStorageListener *gtk_object;
-};
-typedef struct _EvolutionStorageListenerServant EvolutionStorageListenerServant;
-
-
-GtkType evolution_storage_listener_get_type (void);
-void evolution_storage_listener_construct (EvolutionStorageListener *listener,
- GNOME_Evolution_StorageListener corba_objref);
-EvolutionStorageListener *evolution_storage_listener_new (void);
-
-GNOME_Evolution_StorageListener evolution_storage_listener_corba_objref (EvolutionStorageListener *listener);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __EVOLUTION_STORAGE_LISTENER_H__ */
diff --git a/shell/evolution-storage-set-view-listener.c b/shell/evolution-storage-set-view-listener.c
deleted file mode 100644
index 3e78b97caa..0000000000
--- a/shell/evolution-storage-set-view-listener.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-listener.c
- *
- * Copyright (C) 2000 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtksignal.h>
-#include <bonobo/bonobo-main.h>
-#include <gal/util/e-util.h>
-
-#include "evolution-storage-set-view-listener.h"
-
-#include "e-shell-marshal.h"
-
-
-#define PARENT_TYPE gtk_object_get_type ()
-static GtkObjectClass *parent_class = NULL;
-
-struct _EvolutionStorageSetViewListenerPrivate {
- GNOME_Evolution_StorageSetViewListener corba_listener;
- EvolutionStorageSetViewListenerServant *servant;
-};
-
-enum {
- FOLDER_SELECTED,
- FOLDER_TOGGLED,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-/* Evolution::StorageSetViewListener implementation. */
-
-static POA_GNOME_Evolution_StorageSetViewListener__vepv my_GNOME_Evolution_StorageSetViewListener_vepv;
-
-static EvolutionStorageSetViewListener *
-gtk_object_from_servant (PortableServer_Servant servant)
-{
- EvolutionStorageSetViewListenerServant *my_servant;
-
- my_servant = (EvolutionStorageSetViewListenerServant *) servant;
- return my_servant->gtk_object;
-}
-
-static void
-impl_GNOME_Evolution_StorageSetViewListener_notifyFolderSelected (PortableServer_Servant servant,
- const CORBA_char *uri,
- CORBA_Environment *ev)
-{
- EvolutionStorageSetViewListener *listener;
-
- listener = gtk_object_from_servant (servant);
-
- g_signal_emit (listener, signals[FOLDER_SELECTED], 0, uri);
-}
-
-static void
-impl_GNOME_Evolution_StorageSetViewListener_notifyFolderToggled (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- EvolutionStorageSetViewListener *listener;
-
- listener = gtk_object_from_servant (servant);
-
- g_signal_emit (listener, signals[FOLDER_TOGGLED], 0);
-}
-
-static EvolutionStorageSetViewListenerServant *
-create_servant (EvolutionStorageSetViewListener *listener)
-{
- EvolutionStorageSetViewListenerServant *servant;
- POA_GNOME_Evolution_StorageSetViewListener *corba_servant;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- servant = g_new0 (EvolutionStorageSetViewListenerServant, 1);
- corba_servant = (POA_GNOME_Evolution_StorageSetViewListener *) servant;
-
- corba_servant->vepv = &my_GNOME_Evolution_StorageSetViewListener_vepv;
- POA_GNOME_Evolution_StorageSetViewListener__init ((PortableServer_Servant) corba_servant, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- g_free (servant);
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- servant->gtk_object = listener;
-
- CORBA_exception_free (&ev);
-
- return servant;
-}
-
-static GNOME_Evolution_StorageSetViewListener
-activate_servant (EvolutionStorageSetViewListener *listener,
- POA_GNOME_Evolution_StorageSetViewListener *servant)
-{
- GNOME_Evolution_StorageSetViewListener corba_object;
- CORBA_Environment ev;
-
- CORBA_exception_init (&ev);
-
- CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev));
-
- corba_object = PortableServer_POA_servant_to_reference (bonobo_poa(), servant, &ev);
-
- if (ev._major == CORBA_NO_EXCEPTION && ! CORBA_Object_is_nil (corba_object, &ev)) {
- CORBA_exception_free (&ev);
- return corba_object;
- }
-
- CORBA_exception_free (&ev);
-
- return CORBA_OBJECT_NIL;
-}
-
-
-/* GObject methods. */
-
-static void
-impl_finalize (GObject *object)
-{
- EvolutionStorageSetViewListener *listener;
- EvolutionStorageSetViewListenerPrivate *priv;
- CORBA_Environment ev;
-
- listener = EVOLUTION_STORAGE_SET_VIEW_LISTENER (object);
- priv = listener->priv;
-
- CORBA_exception_init (&ev);
-
- if (priv->corba_listener != CORBA_OBJECT_NIL)
- CORBA_Object_release (priv->corba_listener, &ev);
-
- if (priv->servant != NULL) {
- PortableServer_ObjectId *object_id;
-
- object_id = PortableServer_POA_servant_to_id (bonobo_poa(), priv->servant, &ev);
- PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev);
- CORBA_free (object_id);
- }
-
- CORBA_exception_free (&ev);
-
- g_free (priv);
-
- (* G_OBJECT_CLASS (parent_class)->finalize) (object);
-}
-
-
-static void
-corba_class_init (void)
-{
- POA_GNOME_Evolution_StorageSetViewListener__vepv *vepv;
- POA_GNOME_Evolution_StorageSetViewListener__epv *epv;
- PortableServer_ServantBase__epv *base_epv;
-
- base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
- base_epv->_private = NULL;
- base_epv->finalize = NULL;
- base_epv->default_POA = NULL;
-
- epv = g_new0 (POA_GNOME_Evolution_StorageSetViewListener__epv, 1);
- epv->notifyFolderSelected = impl_GNOME_Evolution_StorageSetViewListener_notifyFolderSelected;
- epv->notifyFolderToggled = impl_GNOME_Evolution_StorageSetViewListener_notifyFolderToggled;
-
- vepv = & my_GNOME_Evolution_StorageSetViewListener_vepv;
- vepv->_base_epv = base_epv;
- vepv->GNOME_Evolution_StorageSetViewListener_epv = epv;
-}
-
-static void
-class_init (EvolutionStorageSetViewListenerClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = impl_finalize;
-
- parent_class = g_type_class_ref(gtk_object_get_type ());
-
- signals[FOLDER_SELECTED]
- = g_signal_new ("folder_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageSetViewListenerClass, folder_selected),
- NULL, NULL,
- e_shell_marshal_NONE__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
- signals[FOLDER_TOGGLED]
- = g_signal_new ("folder_toggled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EvolutionStorageSetViewListenerClass, folder_toggled),
- NULL, NULL,
- e_shell_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-
- corba_class_init ();
-}
-
-static void
-init (EvolutionStorageSetViewListener *storage_set_view_listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- priv = g_new (EvolutionStorageSetViewListenerPrivate, 1);
- priv->corba_listener = CORBA_OBJECT_NIL;
-
- storage_set_view_listener->priv = priv;
-}
-
-
-void
-evolution_storage_set_view_listener_construct (EvolutionStorageSetViewListener *listener,
- GNOME_Evolution_StorageSetViewListener corba_listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- g_return_if_fail (listener != NULL);
- g_return_if_fail (EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER (listener));
- g_return_if_fail (corba_listener != CORBA_OBJECT_NIL);
-
- priv = listener->priv;
-
- g_return_if_fail (priv->corba_listener == CORBA_OBJECT_NIL);
-
- priv->corba_listener = corba_listener;
-
- GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (listener), GTK_FLOATING);
-}
-
-EvolutionStorageSetViewListener *
-evolution_storage_set_view_listener_new (void)
-{
- EvolutionStorageSetViewListener *new;
- EvolutionStorageSetViewListenerPrivate *priv;
- GNOME_Evolution_StorageSetViewListener corba_listener;
-
- new = g_object_new (evolution_storage_set_view_listener_get_type (), NULL);
- priv = new->priv;
-
- priv->servant = create_servant (new);
- corba_listener = activate_servant (new, (POA_GNOME_Evolution_StorageSetViewListener *) priv->servant);
-
- evolution_storage_set_view_listener_construct (new, corba_listener);
-
- return new;
-}
-
-GNOME_Evolution_StorageSetViewListener
-evolution_storage_set_view_listener_corba_objref (EvolutionStorageSetViewListener *listener)
-{
- EvolutionStorageSetViewListenerPrivate *priv;
-
- g_return_val_if_fail (listener != NULL, CORBA_OBJECT_NIL);
- g_return_val_if_fail (EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER (listener), CORBA_OBJECT_NIL);
-
- priv = listener->priv;
- return priv->corba_listener;
-}
-
-
-E_MAKE_TYPE (evolution_storage_set_view_listener, "EvolutionStorageSetViewListener", EvolutionStorageSetViewListener,
- class_init, init, PARENT_TYPE)
diff --git a/shell/evolution-storage-set-view-listener.h b/shell/evolution-storage-set-view-listener.h
deleted file mode 100644
index b81ab1ed30..0000000000
--- a/shell/evolution-storage-set-view-listener.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* evolution-storage-set-view-listener.h
- *
- * Copyright (C) 2000 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
- */
-
-#ifndef _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_
-#define _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_
-
-#include <gtk/gtkobject.h>
-
-#include "Evolution.h"
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER (evolution_storage_set_view_listener_get_type ())
-#define EVOLUTION_STORAGE_SET_VIEW_LISTENER(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER, EvolutionStorageSetViewListener))
-#define EVOLUTION_STORAGE_SET_VIEW_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER, EvolutionStorageSetViewListenerClass))
-#define EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER))
-#define EVOLUTION_IS_STORAGE_SET_VIEW_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE_SET_VIEW_LISTENER))
-
-
-typedef struct _EvolutionStorageSetViewListener EvolutionStorageSetViewListener;
-typedef struct _EvolutionStorageSetViewListenerPrivate EvolutionStorageSetViewListenerPrivate;
-typedef struct _EvolutionStorageSetViewListenerClass EvolutionStorageSetViewListenerClass;
-
-struct _EvolutionStorageSetViewListener {
- GtkObject parent;
-
- EvolutionStorageSetViewListenerPrivate *priv;
-};
-
-struct _EvolutionStorageSetViewListenerClass {
- GtkObjectClass parent_class;
-
- void (* folder_selected) (EvolutionStorageSetViewListener *listener,
- const char *uri);
- void (* folder_toggled) (EvolutionStorageSetViewListener *listener,
- const char *uri,
- gboolean active);
-};
-
-
-struct _EvolutionStorageSetViewListenerServant {
- POA_GNOME_Evolution_StorageSetViewListener servant_placeholder;
- EvolutionStorageSetViewListener *gtk_object;
-};
-typedef struct _EvolutionStorageSetViewListenerServant EvolutionStorageSetViewListenerServant;
-
-
-GtkType evolution_storage_set_view_listener_get_type (void);
-void evolution_storage_set_view_listener_construct (EvolutionStorageSetViewListener *listener,
- GNOME_Evolution_StorageSetViewListener corba_objref);
-EvolutionStorageSetViewListener *evolution_storage_set_view_listener_new (void);
-
-GNOME_Evolution_StorageSetViewListener evolution_storage_set_view_listener_corba_objref (EvolutionStorageSetViewListener *listener);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* _EVOLUTION_STORAGE_SET_VIEW_LISTENER_H_ */
diff --git a/shell/main.c b/shell/main.c
index bdc6e21a86..6285e55560 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -91,7 +91,7 @@ static gboolean setup_only = FALSE;
static gboolean killev = FALSE;
static char *default_component_id = NULL;
-extern char *evolution_debug_log;
+static char *evolution_debug_log = NULL;
static GtkWidget *