Get rid of the old `evolution-service-repository' cruft and start
implementing new CORBA storage interfaces for the shell. svn path=/trunk/; revision=3178
This commit is contained in:
25
.cvsignore
25
.cvsignore
@ -1,21 +1,24 @@
|
|||||||
|
ABOUT-NLS
|
||||||
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
configure
|
config.cache
|
||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.h
|
||||||
ltconfig
|
|
||||||
ltmain.sh
|
|
||||||
config.h.in
|
config.h.in
|
||||||
config.log
|
config.log
|
||||||
config.h
|
|
||||||
config.cache
|
|
||||||
libtool
|
|
||||||
config.status
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
install-sh
|
||||||
|
intl
|
||||||
|
libtool
|
||||||
|
ltconfig
|
||||||
|
ltmain.sh
|
||||||
|
missing
|
||||||
|
mkinstalldirs
|
||||||
stamp-h
|
stamp-h
|
||||||
Makefile
|
|
||||||
stamp.h
|
|
||||||
stamp-h.in
|
stamp-h.in
|
||||||
|
stamp.h
|
||||||
xlibtool
|
xlibtool
|
||||||
xltmain.sh
|
xltmain.sh
|
||||||
intl
|
|
||||||
ABOUT-NLS
|
|
@ -1,3 +1,11 @@
|
|||||||
|
2000-05-23 Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
|
||||||
|
* Makefile.am: Don't link to `evolution-service-repository.o'
|
||||||
|
anymore.
|
||||||
|
|
||||||
|
* folder-browser-factory.c: Don't use crufty service-repository
|
||||||
|
anymore.
|
||||||
|
|
||||||
2000-05-21 Ettore Perazzoli <ettore@helixcode.com>
|
2000-05-21 Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
|
||||||
* message-list.c (get_message_info): Made static.
|
* message-list.c (get_message_info): Made static.
|
||||||
|
@ -51,7 +51,6 @@ evolution_mail_LDADD = \
|
|||||||
../shell/Evolution-common.o \
|
../shell/Evolution-common.o \
|
||||||
../shell/Evolution-stubs.o \
|
../shell/Evolution-stubs.o \
|
||||||
../shell/Evolution-skels.o \
|
../shell/Evolution-skels.o \
|
||||||
../shell/evolution-service-repository.o \
|
|
||||||
../composer/libcomposer.la \
|
../composer/libcomposer.la \
|
||||||
../widgets/e-table/libetable.a \
|
../widgets/e-table/libetable.a \
|
||||||
../widgets/e-text/libetext.a \
|
../widgets/e-text/libetext.a \
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include "folder-browser.h"
|
#include "folder-browser.h"
|
||||||
#include "mail.h"
|
#include "mail.h"
|
||||||
#include "shell/Evolution.h"
|
#include "shell/Evolution.h"
|
||||||
#include "shell/evolution-service-repository.h"
|
|
||||||
|
|
||||||
#ifdef USING_OAF
|
#ifdef USING_OAF
|
||||||
#define CONTROL_FACTORY_ID "OAFIID:control-factory:evolution-mail:25902062-543b-4f44-8702-d90145fcdbf2"
|
#define CONTROL_FACTORY_ID "OAFIID:control-factory:evolution-mail:25902062-543b-4f44-8702-d90145fcdbf2"
|
||||||
@ -26,49 +25,6 @@
|
|||||||
#define CONTROL_FACTORY_ID "control-factory:evolution-mail"
|
#define CONTROL_FACTORY_ID "control-factory:evolution-mail"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
|
||||||
folder_browser_set_shell (EvolutionServiceRepository *sr,
|
|
||||||
Evolution_Shell shell,
|
|
||||||
void *closure)
|
|
||||||
{
|
|
||||||
FolderBrowser *folder_browser;
|
|
||||||
CORBA_Environment ev;
|
|
||||||
|
|
||||||
g_return_if_fail (closure);
|
|
||||||
g_return_if_fail (IS_FOLDER_BROWSER (closure));
|
|
||||||
g_return_if_fail (shell != CORBA_OBJECT_NIL);
|
|
||||||
|
|
||||||
CORBA_exception_init (&ev);
|
|
||||||
|
|
||||||
folder_browser = FOLDER_BROWSER (closure);
|
|
||||||
|
|
||||||
folder_browser->shell = shell;
|
|
||||||
|
|
||||||
/* test the component->shell registration */
|
|
||||||
Evolution_Shell_register_service (shell, Evolution_Shell_MAIL_STORE, "a_service", &ev);
|
|
||||||
|
|
||||||
CORBA_exception_free (&ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
folder_browser_control_add_service_repository_interface (BonoboControl *control,
|
|
||||||
GtkWidget *folder_browser)
|
|
||||||
{
|
|
||||||
EvolutionServiceRepository *sr;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* create an implementation for the Evolution::ServiceRepository
|
|
||||||
* interface
|
|
||||||
*/
|
|
||||||
sr = evolution_service_repository_new (folder_browser_set_shell,
|
|
||||||
(void *)folder_browser);
|
|
||||||
|
|
||||||
/* add the interface to the control */
|
|
||||||
bonobo_object_add_interface (BONOBO_OBJECT (control),
|
|
||||||
BONOBO_OBJECT (sr));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
random_cb (GtkWidget *button, gpointer user_data)
|
random_cb (GtkWidget *button, gpointer user_data)
|
||||||
{
|
{
|
||||||
@ -204,13 +160,6 @@ folder_browser_factory (BonoboGenericFactory *factory, void *closure)
|
|||||||
bonobo_control_set_property_bag (control,
|
bonobo_control_set_property_bag (control,
|
||||||
FOLDER_BROWSER (folder_browser)->properties);
|
FOLDER_BROWSER (folder_browser)->properties);
|
||||||
|
|
||||||
/* for the moment, the control has the ability to register
|
|
||||||
* some services itself, but this should not last.
|
|
||||||
*
|
|
||||||
* It's not the way to do it, but we don't have the
|
|
||||||
* correct infrastructure in the shell now.
|
|
||||||
*/
|
|
||||||
folder_browser_control_add_service_repository_interface (control, folder_browser);
|
|
||||||
return BONOBO_OBJECT (control);
|
return BONOBO_OBJECT (control);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,39 @@
|
|||||||
|
2000-05-23 Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
|
||||||
|
* e-shell.c: New member `corba_storage_registry' in
|
||||||
|
`EShellPrivate'.
|
||||||
|
(init): Initialize it to NULL.
|
||||||
|
(destroy): Unref it if not NULL.
|
||||||
|
(setup_corba_storages): New function to set up the CORBA storage
|
||||||
|
registry and `bonobo_object_add_interface()' it to the shell.
|
||||||
|
(setup_storages): Call it from here.
|
||||||
|
|
||||||
|
* e-shell.h, e-shell.c: Derive EShell from BonoboObject instead of
|
||||||
|
GtkObject.
|
||||||
|
|
||||||
|
* e-storage.c (e_storage_remove_folder): Return value changed into
|
||||||
|
`gboolean'; return false if an error occurs, true otherwise.
|
||||||
|
(e_storage_new_folder): Likewise.
|
||||||
|
|
||||||
|
* e-corba-storage-registry.c: New.
|
||||||
|
* e-corba-storage-registry.h: New.
|
||||||
|
|
||||||
|
* e-corba-storage.c: New.
|
||||||
|
* e-corba-storage.h: New.
|
||||||
|
|
||||||
|
* Evolution.idl: Include the new IDLs, but no
|
||||||
|
`evolution-service-repository.idl' anymore.
|
||||||
|
|
||||||
|
* Evolution-Shell.idl: New.
|
||||||
|
* Evolution-ShellComponent.idl: New.
|
||||||
|
* Evolution-Storage.idl: New.
|
||||||
|
|
||||||
|
* evolution-service-repository.idl: Removed.
|
||||||
|
* evolution-service-repository.c: Removed.
|
||||||
|
* evolution-service-repository.h: Removed.
|
||||||
|
|
||||||
|
* e-folder-type-repository.c (folder_type_new): Free `icon_path'.
|
||||||
|
|
||||||
2000-05-18 Dan Winship <danw@helixcode.com>
|
2000-05-18 Dan Winship <danw@helixcode.com>
|
||||||
|
|
||||||
* main.c (new_view_idle_cb): add development_warning (moved from
|
* main.c (new_view_idle_cb): add development_warning (moved from
|
||||||
|
18
shell/Evolution-Shell.idl
Normal file
18
shell/Evolution-Shell.idl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||||
|
/*
|
||||||
|
* Interface for the Evolution shell.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Bonobo.idl>
|
||||||
|
|
||||||
|
module Evolution {
|
||||||
|
interface Shell : Bonobo::Unknown {
|
||||||
|
/* Nothing for now. */
|
||||||
|
void dummy_method ();
|
||||||
|
};
|
||||||
|
};
|
17
shell/Evolution-ShellComponent.idl
Normal file
17
shell/Evolution-ShellComponent.idl
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||||
|
/*
|
||||||
|
* Interface for the Evolution components.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Bonobo.h>
|
||||||
|
|
||||||
|
module Evolution {
|
||||||
|
interface ShellComponent : Bonobo::Unknown {
|
||||||
|
void set_shell (in Shell shell);
|
||||||
|
};
|
||||||
|
};
|
53
shell/Evolution-Storage.idl
Normal file
53
shell/Evolution-Storage.idl
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||||
|
/*
|
||||||
|
* Storage interface for the Evolution shell.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Ettore Perazzoli <ettore@helixcode.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Bonobo.h>
|
||||||
|
|
||||||
|
module Evolution {
|
||||||
|
struct Folder {
|
||||||
|
string type;
|
||||||
|
string description;
|
||||||
|
string name;
|
||||||
|
string physical_uri;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface Storage;
|
||||||
|
interface StorageListener;
|
||||||
|
|
||||||
|
interface Storage : Bonobo::Unknown {
|
||||||
|
attribute string name;
|
||||||
|
|
||||||
|
void set_listener (in StorageListener storage_listener);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface StorageListener {
|
||||||
|
exception Exists {};
|
||||||
|
exception NotFound {};
|
||||||
|
|
||||||
|
void destroyed ();
|
||||||
|
|
||||||
|
void new_folder (in string path, in Folder folder)
|
||||||
|
raises (Exists);
|
||||||
|
|
||||||
|
void removed_folder (in string path)
|
||||||
|
raises (NotFound);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface StorageRegistry : Bonobo::Unknown {
|
||||||
|
exception Exists {};
|
||||||
|
exception NotFound {};
|
||||||
|
|
||||||
|
StorageListener register_storage (in Storage storage, in string name)
|
||||||
|
raises (Exists);
|
||||||
|
|
||||||
|
void unregister_storage (in string name)
|
||||||
|
raises (NotFound);
|
||||||
|
};
|
||||||
|
};
|
@ -1,14 +1,15 @@
|
|||||||
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CORBA interface for the Evolution shell
|
* CORBA interface for the Evolution shell.
|
||||||
*
|
*
|
||||||
* Authors:
|
* Authors:
|
||||||
* Miguel de Icaza (miguel@kernel.org)
|
* Ettore Perazzoli <ettore@helixcode.com>
|
||||||
*
|
*
|
||||||
* (C) 2000 Helix Code, Inc.
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
*/
|
*/
|
||||||
#include <Bonobo.idl>
|
|
||||||
#include <Shell.idl>
|
|
||||||
#include <evolution-service-repository.idl>
|
|
||||||
|
|
||||||
|
#include <Bonobo.idl>
|
||||||
|
|
||||||
|
#include <Evolution-Storage.idl>
|
||||||
|
#include <Evolution-Shell.idl>
|
||||||
|
#include <Evolution-ShellComponent.idl>
|
||||||
|
@ -21,8 +21,18 @@ EVOLUTION_CORBA_GENERATED = \
|
|||||||
|
|
||||||
CLEANFILES = $(EVOLUTION_CORBA_GENERATED)
|
CLEANFILES = $(EVOLUTION_CORBA_GENERATED)
|
||||||
|
|
||||||
|
IDLS = \
|
||||||
|
Evolution.idl \
|
||||||
|
Evolution-Shell.idl \
|
||||||
|
Evolution-ShellComponent.idl \
|
||||||
|
Evolution-Storage.idl
|
||||||
|
|
||||||
evolution_SOURCES = \
|
evolution_SOURCES = \
|
||||||
$(EVOLUTION_CORBA_GENERATED) \
|
$(EVOLUTION_CORBA_GENERATED) \
|
||||||
|
e-corba-storage.c \
|
||||||
|
e-corba-storage.h \
|
||||||
|
e-corba-storage-registry.c \
|
||||||
|
e-corba-storage-registry.h \
|
||||||
e-folder-type-repository.c \
|
e-folder-type-repository.c \
|
||||||
e-folder-type-repository.h \
|
e-folder-type-repository.h \
|
||||||
e-folder.c \
|
e-folder.c \
|
||||||
@ -54,13 +64,11 @@ evolution_SOURCES = \
|
|||||||
e-storage-watcher.h \
|
e-storage-watcher.h \
|
||||||
e-storage.c \
|
e-storage.c \
|
||||||
e-storage.h \
|
e-storage.h \
|
||||||
evolution-service-repository.c \
|
|
||||||
evolution-service-repository.h \
|
|
||||||
main.c
|
main.c
|
||||||
|
|
||||||
Evolution-impl.o: Evolution.h
|
Evolution-impl.o: Evolution.h
|
||||||
|
|
||||||
$(EVOLUTION_CORBA_GENERATED): Evolution.idl evolution-service-repository.idl
|
$(EVOLUTION_CORBA_GENERATED): $(IDLS)
|
||||||
$(ORBIT_IDL) -I$(datadir)/idl -I`$(GNOME_CONFIG) --datadir`/idl -I$(srcdir) $(srcdir)/Evolution.idl
|
$(ORBIT_IDL) -I$(datadir)/idl -I`$(GNOME_CONFIG) --datadir`/idl -I$(srcdir) $(srcdir)/Evolution.idl
|
||||||
|
|
||||||
evolution_LDADD = \
|
evolution_LDADD = \
|
||||||
@ -70,9 +78,7 @@ evolution_LDADD = \
|
|||||||
$(top_builddir)/e-util/libeutil.la \
|
$(top_builddir)/e-util/libeutil.la \
|
||||||
$(BONOBO_GNOME_LIBS)
|
$(BONOBO_GNOME_LIBS)
|
||||||
|
|
||||||
EXTRA_DIST = Evolution.idl \
|
EXTRA_DIST = $(IDLS)
|
||||||
Shell.idl \
|
|
||||||
evolution-service-repository.idl
|
|
||||||
|
|
||||||
if ENABLE_PURIFY
|
if ENABLE_PURIFY
|
||||||
PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
236
shell/e-corba-storage-registry.c
Normal file
236
shell/e-corba-storage-registry.c
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||||
|
/* e-corba-storage-registry.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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-util/e-util.h"
|
||||||
|
|
||||||
|
#include "e-corba-storage.h"
|
||||||
|
|
||||||
|
#include "e-corba-storage-registry.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define PARENT_TYPE BONOBO_OBJECT_TYPE
|
||||||
|
static BonoboObjectClass *parent_class = NULL;
|
||||||
|
|
||||||
|
struct _ECorbaStorageRegistryPrivate {
|
||||||
|
EStorageSet *storage_set;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* CORBA interface implementation. */
|
||||||
|
|
||||||
|
static POA_Evolution_StorageRegistry__vepv storage_registry_vepv;
|
||||||
|
|
||||||
|
static POA_Evolution_StorageRegistry *
|
||||||
|
create_servant (void)
|
||||||
|
{
|
||||||
|
POA_Evolution_StorageRegistry *servant;
|
||||||
|
CORBA_Environment ev;
|
||||||
|
|
||||||
|
servant = (POA_Evolution_StorageRegistry *) g_new0 (BonoboObjectServant, 1);
|
||||||
|
servant->vepv = &storage_registry_vepv;
|
||||||
|
|
||||||
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
POA_Evolution_StorageRegistry__init ((PortableServer_Servant) servant, &ev);
|
||||||
|
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||||
|
g_free (servant);
|
||||||
|
CORBA_exception_free (&ev);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA_exception_free (&ev);
|
||||||
|
|
||||||
|
return servant;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evolution_StorageListener
|
||||||
|
impl_StorageRegistry_register_storage (PortableServer_Servant servant,
|
||||||
|
const Evolution_Storage storage_interface,
|
||||||
|
const CORBA_char *name,
|
||||||
|
CORBA_Environment *ev)
|
||||||
|
{
|
||||||
|
BonoboObject *bonobo_object;
|
||||||
|
ECorbaStorageRegistry *storage_registry;
|
||||||
|
ECorbaStorageRegistryPrivate *priv;
|
||||||
|
EStorage *storage;
|
||||||
|
Evolution_StorageListener listener_interface;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
/* FIXME check failure. */
|
||||||
|
e_storage_set_add_storage (priv->storage_set, storage);
|
||||||
|
|
||||||
|
listener_interface = CORBA_Object_duplicate (e_corba_storage_get_StorageListener
|
||||||
|
(E_CORBA_STORAGE (storage)), ev);
|
||||||
|
|
||||||
|
return listener_interface;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
impl_StorageRegistry_unregister_storage (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_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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* GtkObject methods. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
destroy (GtkObject *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)
|
||||||
|
gtk_object_unref (GTK_OBJECT (priv->storage_set));
|
||||||
|
g_free (priv);
|
||||||
|
|
||||||
|
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Initialization. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
corba_class_init (void)
|
||||||
|
{
|
||||||
|
POA_Evolution_StorageRegistry__vepv *vepv;
|
||||||
|
POA_Evolution_StorageRegistry__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_Evolution_StorageRegistry__epv, 1);
|
||||||
|
epv->register_storage = impl_StorageRegistry_register_storage;
|
||||||
|
epv->unregister_storage = impl_StorageRegistry_unregister_storage;
|
||||||
|
|
||||||
|
vepv = &storage_registry_vepv;
|
||||||
|
vepv->_base_epv = base_epv;
|
||||||
|
vepv->Evolution_StorageRegistry_epv = epv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
class_init (ECorbaStorageRegistryClass *klass)
|
||||||
|
{
|
||||||
|
GtkObjectClass *object_class;
|
||||||
|
|
||||||
|
object_class = GTK_OBJECT_CLASS (klass);
|
||||||
|
object_class->destroy = destroy;
|
||||||
|
|
||||||
|
parent_class = gtk_type_class (PARENT_TYPE);
|
||||||
|
|
||||||
|
corba_class_init ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init (ECorbaStorageRegistry *corba_storage_registry)
|
||||||
|
{
|
||||||
|
ECorbaStorageRegistryPrivate *priv;
|
||||||
|
|
||||||
|
priv = g_new (ECorbaStorageRegistryPrivate, 1);
|
||||||
|
priv->storage_set = NULL;
|
||||||
|
|
||||||
|
corba_storage_registry->priv = priv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
|
||||||
|
Evolution_StorageRegistry corba_object,
|
||||||
|
EStorageSet *storage_set)
|
||||||
|
{
|
||||||
|
ECorbaStorageRegistryPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (corba_storage_registry != NULL);
|
||||||
|
g_return_if_fail (E_IS_CORBA_STORAGE_REGISTRY (corba_storage_registry));
|
||||||
|
g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
|
||||||
|
|
||||||
|
bonobo_object_construct (BONOBO_OBJECT (corba_storage_registry), corba_object);
|
||||||
|
|
||||||
|
priv = corba_storage_registry->priv;
|
||||||
|
|
||||||
|
gtk_object_ref (GTK_OBJECT (storage_set));
|
||||||
|
priv->storage_set = storage_set;
|
||||||
|
}
|
||||||
|
|
||||||
|
ECorbaStorageRegistry *
|
||||||
|
e_corba_storage_registry_new (EStorageSet *storage_set)
|
||||||
|
{
|
||||||
|
ECorbaStorageRegistry *corba_storage_registry;
|
||||||
|
POA_Evolution_StorageRegistry *servant;
|
||||||
|
Evolution_StorageRegistry corba_object;
|
||||||
|
|
||||||
|
g_return_val_if_fail (storage_set != NULL, NULL);
|
||||||
|
g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
|
||||||
|
|
||||||
|
servant = create_servant ();
|
||||||
|
if (servant == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
corba_storage_registry = gtk_type_new (e_corba_storage_registry_get_type ());
|
||||||
|
|
||||||
|
corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (corba_storage_registry),
|
||||||
|
servant);
|
||||||
|
|
||||||
|
e_corba_storage_registry_construct (corba_storage_registry, corba_object, storage_set);
|
||||||
|
|
||||||
|
return corba_storage_registry;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
E_MAKE_TYPE (e_corba_storage_registry, "ECorbaStorageRegistry", ECorbaStorageRegistry, class_init, init, PARENT_TYPE)
|
73
shell/e-corba-storage-registry.h
Normal file
73
shell/e-corba-storage-registry.h
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||||
|
/* e-corba-storage-registry.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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__
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
GtkType e_corba_storage_registry_get_type (void);
|
||||||
|
void e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry,
|
||||||
|
Evolution_StorageRegistry corba_object,
|
||||||
|
EStorageSet *storage_set);
|
||||||
|
ECorbaStorageRegistry *e_corba_storage_registry_new (EStorageSet *storage_set);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __E_CORBA_STORAGE_REGISTRY_H__ */
|
349
shell/e-corba-storage.c
Normal file
349
shell/e-corba-storage.c
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||||
|
/* e-corba-storage.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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 <bonobo.h>
|
||||||
|
|
||||||
|
#include "e-util/e-util.h"
|
||||||
|
|
||||||
|
#include "Evolution.h"
|
||||||
|
|
||||||
|
#include "e-corba-storage.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define PARENT_TYPE E_TYPE_STORAGE
|
||||||
|
static EStorageClass *parent_class = NULL;
|
||||||
|
|
||||||
|
typedef struct _StorageListenerServant StorageListenerServant;
|
||||||
|
|
||||||
|
struct _ECorbaStoragePrivate {
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
Evolution_Storage storage_interface;
|
||||||
|
|
||||||
|
/* The Evolution::StorageListener interface we expose. */
|
||||||
|
|
||||||
|
Evolution_StorageListener storage_listener_interface;
|
||||||
|
StorageListenerServant *storage_listener_servant;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Implementation of the CORBA Evolution::StorageListener interface. */
|
||||||
|
|
||||||
|
static POA_Evolution_StorageListener__vepv storage_listener_vepv;
|
||||||
|
|
||||||
|
struct _StorageListenerServant {
|
||||||
|
POA_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;
|
||||||
|
|
||||||
|
gtk_object_ref (GTK_OBJECT (corba_storage));
|
||||||
|
servant->storage = E_STORAGE (corba_storage);
|
||||||
|
|
||||||
|
return servant;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
storage_listener_servant_free (StorageListenerServant *servant)
|
||||||
|
{
|
||||||
|
gtk_object_unref (GTK_OBJECT (servant->storage));
|
||||||
|
|
||||||
|
g_free (servant);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static void
|
||||||
|
impl_StorageListener_destroy (PortableServer_Servant servant,
|
||||||
|
CORBA_Environment *ev)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
impl_StorageListener_new_folder (PortableServer_Servant servant,
|
||||||
|
const CORBA_char *path,
|
||||||
|
const 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->name,
|
||||||
|
folder->type,
|
||||||
|
folder->description);
|
||||||
|
|
||||||
|
if (! e_storage_new_folder (storage, path, e_folder)) {
|
||||||
|
CORBA_exception_set (ev,
|
||||||
|
CORBA_USER_EXCEPTION,
|
||||||
|
ex_Evolution_StorageListener_Exists,
|
||||||
|
NULL);
|
||||||
|
gtk_object_unref (GTK_OBJECT (e_folder));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
impl_StorageListener_removed_folder (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_remove_folder (storage, path))
|
||||||
|
CORBA_exception_set (ev,
|
||||||
|
CORBA_USER_EXCEPTION,
|
||||||
|
ex_Evolution_StorageListener_NotFound,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
setup_storage_listener (ECorbaStorage *corba_storage)
|
||||||
|
{
|
||||||
|
StorageListenerServant *servant;
|
||||||
|
ECorbaStoragePrivate *priv;
|
||||||
|
Evolution_StorageListener storage_listener_interface;
|
||||||
|
CORBA_Environment ev;
|
||||||
|
|
||||||
|
priv = corba_storage->priv;
|
||||||
|
|
||||||
|
servant = storage_listener_servant_new (corba_storage);
|
||||||
|
|
||||||
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
POA_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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* GtkObject methods. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
destroy (GtkObject *object)
|
||||||
|
{
|
||||||
|
CORBA_Environment ev;
|
||||||
|
ECorbaStorage *corba_storage;
|
||||||
|
ECorbaStoragePrivate *priv;
|
||||||
|
|
||||||
|
corba_storage = E_CORBA_STORAGE (object);
|
||||||
|
priv = corba_storage->priv;
|
||||||
|
|
||||||
|
g_free (priv->name);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->storage_listener_interface != CORBA_OBJECT_NIL)
|
||||||
|
CORBA_Object_release (priv->storage_listener_interface, &ev);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
POA_Evolution_StorageListener__fini (priv->storage_listener_servant, &ev);
|
||||||
|
CORBA_free (object_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA_exception_free (&ev);
|
||||||
|
|
||||||
|
g_free (priv);
|
||||||
|
|
||||||
|
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* EStorage methods. */
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
get_name (EStorage *storage)
|
||||||
|
{
|
||||||
|
ECorbaStorage *corba_storage;
|
||||||
|
ECorbaStoragePrivate *priv;
|
||||||
|
|
||||||
|
corba_storage = E_CORBA_STORAGE (storage);
|
||||||
|
priv = corba_storage->priv;
|
||||||
|
|
||||||
|
return priv->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
corba_class_init (void)
|
||||||
|
{
|
||||||
|
POA_Evolution_StorageListener__vepv *vepv;
|
||||||
|
POA_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_Evolution_StorageListener__epv, 1);
|
||||||
|
epv->new_folder = impl_StorageListener_new_folder;
|
||||||
|
epv->removed_folder = impl_StorageListener_removed_folder;
|
||||||
|
|
||||||
|
vepv = &storage_listener_vepv;
|
||||||
|
vepv->_base_epv = base_epv;
|
||||||
|
vepv->Evolution_StorageListener_epv = epv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
class_init (ECorbaStorageClass *klass)
|
||||||
|
{
|
||||||
|
GtkObjectClass *object_class;
|
||||||
|
EStorageClass *storage_class;
|
||||||
|
|
||||||
|
object_class = GTK_OBJECT_CLASS (klass);
|
||||||
|
object_class->destroy = destroy;
|
||||||
|
|
||||||
|
storage_class = E_STORAGE_CLASS (klass);
|
||||||
|
storage_class->get_name = get_name;
|
||||||
|
|
||||||
|
corba_class_init ();
|
||||||
|
|
||||||
|
parent_class = gtk_type_class (PARENT_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init (ECorbaStorage *corba_storage)
|
||||||
|
{
|
||||||
|
ECorbaStoragePrivate *priv;
|
||||||
|
|
||||||
|
priv = g_new (ECorbaStoragePrivate, 1);
|
||||||
|
priv->name = NULL;
|
||||||
|
priv->storage_interface = CORBA_OBJECT_NIL;
|
||||||
|
|
||||||
|
corba_storage->priv = priv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* FIXME: OK to have a boolean construct function? */
|
||||||
|
void
|
||||||
|
e_corba_storage_construct (ECorbaStorage *corba_storage,
|
||||||
|
const Evolution_Storage storage_interface,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
ECorbaStoragePrivate *priv;
|
||||||
|
CORBA_Environment ev;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
e_storage_construct (E_STORAGE (corba_storage));
|
||||||
|
|
||||||
|
priv = corba_storage->priv;
|
||||||
|
|
||||||
|
priv->name = g_strdup (name);
|
||||||
|
|
||||||
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
Bonobo_Unknown_ref (storage_interface, &ev);
|
||||||
|
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||||
|
g_warning ("%s -- Cannot reference Bonobo object", __FUNCTION__);
|
||||||
|
} 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 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 = gtk_type_new (e_corba_storage_get_type ());
|
||||||
|
|
||||||
|
e_corba_storage_construct (E_CORBA_STORAGE (new), storage_interface, name);
|
||||||
|
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
E_MAKE_TYPE (e_corba_storage, "ECorbaStorage", ECorbaStorage, class_init, init, PARENT_TYPE)
|
76
shell/e-corba-storage.h
Normal file
76
shell/e-corba-storage.h
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||||
|
/* e-corba-storage.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Helix Code, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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__
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
GtkType e_corba_storage_get_type (void);
|
||||||
|
void e_corba_storage_construct (ECorbaStorage *corba_storage,
|
||||||
|
const Evolution_Storage storage_interface,
|
||||||
|
const char *name);
|
||||||
|
EStorage *e_corba_storage_new (const Evolution_Storage storage_interface,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
/* FIXME: I don't like this call. */
|
||||||
|
const Evolution_StorageListener e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* __E_CORBA_STORAGE_H__ */
|
@ -89,6 +89,8 @@ folder_type_new (const char *name,
|
|||||||
else
|
else
|
||||||
new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
||||||
|
|
||||||
|
g_free (icon_path);
|
||||||
|
|
||||||
icon_path = e_shell_get_icon_path (icon_name, TRUE);
|
icon_path = e_shell_get_icon_path (icon_name, TRUE);
|
||||||
if (icon_path != NULL) {
|
if (icon_path != NULL) {
|
||||||
new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
||||||
|
@ -83,7 +83,7 @@ remove (EFolder *folder)
|
|||||||
static const char *
|
static const char *
|
||||||
get_physical_uri (EFolder *folder)
|
get_physical_uri (EFolder *folder)
|
||||||
{
|
{
|
||||||
g_warning ("`%s' does not implement `EFolder::remove()'",
|
g_warning ("`%s' does not implement `EFolder::get_physical_uri()'",
|
||||||
gtk_type_name (GTK_OBJECT_TYPE (folder)));
|
gtk_type_name (GTK_OBJECT_TYPE (folder)));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ GnomeUIInfo e_shell_view_menu [] = {
|
|||||||
{ GNOME_APP_UI_SUBTREE, N_("_Actions"), NULL, menu_actions },
|
{ GNOME_APP_UI_SUBTREE, N_("_Actions"), NULL, menu_actions },
|
||||||
GNOMEUIINFO_MENU_HELP_TREE (menu_help),
|
GNOMEUIINFO_MENU_HELP_TREE (menu_help),
|
||||||
|
|
||||||
#warning Should provide a help menu here; Bonobo needs it
|
/* FIXME: Should provide a help menu here; Bonobo needs it. */
|
||||||
|
|
||||||
GNOMEUIINFO_END
|
GNOMEUIINFO_END
|
||||||
};
|
};
|
||||||
|
113
shell/e-shell.c
113
shell/e-shell.c
@ -28,8 +28,11 @@
|
|||||||
#include <gtk/gtkobject.h>
|
#include <gtk/gtkobject.h>
|
||||||
#include <gtk/gtktypeutils.h>
|
#include <gtk/gtktypeutils.h>
|
||||||
|
|
||||||
|
#include "Evolution.h"
|
||||||
|
|
||||||
#include "e-util/e-util.h"
|
#include "e-util/e-util.h"
|
||||||
|
|
||||||
|
#include "e-corba-storage-registry.h"
|
||||||
#include "e-folder-type-repository.h"
|
#include "e-folder-type-repository.h"
|
||||||
#include "e-local-storage.h"
|
#include "e-local-storage.h"
|
||||||
#include "e-shell-view.h"
|
#include "e-shell-view.h"
|
||||||
@ -39,8 +42,8 @@
|
|||||||
#include "e-shell.h"
|
#include "e-shell.h"
|
||||||
|
|
||||||
|
|
||||||
#define PARENT_TYPE GTK_TYPE_OBJECT
|
#define PARENT_TYPE BONOBO_OBJECT_TYPE
|
||||||
static GtkObjectClass *parent_class = NULL;
|
static BonoboObjectClass *parent_class = NULL;
|
||||||
|
|
||||||
struct _EShellPrivate {
|
struct _EShellPrivate {
|
||||||
char *local_directory;
|
char *local_directory;
|
||||||
@ -50,6 +53,8 @@ struct _EShellPrivate {
|
|||||||
EStorageSet *storage_set;
|
EStorageSet *storage_set;
|
||||||
EShortcuts *shortcuts;
|
EShortcuts *shortcuts;
|
||||||
EFolderTypeRepository *folder_type_repository;
|
EFolderTypeRepository *folder_type_repository;
|
||||||
|
|
||||||
|
ECorbaStorageRegistry *corba_storage_registry;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SHORTCUTS_FILE_NAME "shortcuts.xml"
|
#define SHORTCUTS_FILE_NAME "shortcuts.xml"
|
||||||
@ -62,9 +67,63 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0 };
|
static guint signals[LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
|
/* CORBA interface implementation. */
|
||||||
|
|
||||||
|
static POA_Evolution_Shell__vepv shell_vepv;
|
||||||
|
|
||||||
|
static POA_Evolution_Shell *
|
||||||
|
create_servant (void)
|
||||||
|
{
|
||||||
|
POA_Evolution_Shell *servant;
|
||||||
|
CORBA_Environment ev;
|
||||||
|
|
||||||
|
servant = (POA_Evolution_Shell *) g_new0 (BonoboObjectServant, 1);
|
||||||
|
servant->vepv = &shell_vepv;
|
||||||
|
|
||||||
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
POA_Evolution_Shell__init ((PortableServer_Servant) servant, &ev);
|
||||||
|
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||||
|
g_free (servant);
|
||||||
|
CORBA_exception_free (&ev);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA_exception_free (&ev);
|
||||||
|
|
||||||
|
return servant;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
impl_Shell_dummy_method (PortableServer_Servant servant,
|
||||||
|
CORBA_Environment *ev)
|
||||||
|
{
|
||||||
|
g_print ("Evolution::Shell::dummy_method invoked!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Initialization of the storages. */
|
/* Initialization of the storages. */
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
setup_corba_storages (EShell *shell)
|
||||||
|
{
|
||||||
|
EShellPrivate *priv;
|
||||||
|
|
||||||
|
priv = shell->priv;
|
||||||
|
|
||||||
|
g_assert (priv->storage_set != NULL);
|
||||||
|
priv->corba_storage_registry = e_corba_storage_registry_new (priv->storage_set);
|
||||||
|
|
||||||
|
if (priv->corba_storage_registry == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
bonobo_object_add_interface (BONOBO_OBJECT (shell),
|
||||||
|
BONOBO_OBJECT (priv->corba_storage_registry));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
setup_storages (EShell *shell)
|
setup_storages (EShell *shell)
|
||||||
{
|
{
|
||||||
@ -89,7 +148,7 @@ setup_storages (EShell *shell)
|
|||||||
priv->storage_set = e_storage_set_new (shell->priv->folder_type_repository);
|
priv->storage_set = e_storage_set_new (shell->priv->folder_type_repository);
|
||||||
e_storage_set_add_storage (priv->storage_set, local_storage);
|
e_storage_set_add_storage (priv->storage_set, local_storage);
|
||||||
|
|
||||||
return TRUE;
|
return setup_corba_storages (shell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -144,18 +203,43 @@ destroy (GtkObject *object)
|
|||||||
|
|
||||||
g_list_free (priv->views);
|
g_list_free (priv->views);
|
||||||
|
|
||||||
|
if (priv->corba_storage_registry != NULL)
|
||||||
|
bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry));
|
||||||
|
|
||||||
g_free (priv);
|
g_free (priv);
|
||||||
|
|
||||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Initialization. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
corba_class_init (void)
|
||||||
|
{
|
||||||
|
POA_Evolution_Shell__vepv *vepv;
|
||||||
|
POA_Evolution_Shell__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_Evolution_Shell__epv, 1);
|
||||||
|
epv->dummy_method = impl_Shell_dummy_method;
|
||||||
|
|
||||||
|
vepv = &shell_vepv;
|
||||||
|
vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
|
||||||
|
vepv->Evolution_Shell_epv = epv;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
class_init (EShellClass *klass)
|
class_init (EShellClass *klass)
|
||||||
{
|
{
|
||||||
GtkObjectClass *object_class;
|
GtkObjectClass *object_class;
|
||||||
|
|
||||||
parent_class = gtk_type_class (gtk_object_get_type ());
|
parent_class = gtk_type_class (PARENT_TYPE);
|
||||||
|
|
||||||
object_class = GTK_OBJECT_CLASS (klass);
|
object_class = GTK_OBJECT_CLASS (klass);
|
||||||
object_class->destroy = destroy;
|
object_class->destroy = destroy;
|
||||||
@ -169,6 +253,8 @@ class_init (EShellClass *klass)
|
|||||||
GTK_TYPE_NONE, 0);
|
GTK_TYPE_NONE, 0);
|
||||||
|
|
||||||
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
||||||
|
|
||||||
|
corba_class_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -184,6 +270,7 @@ init (EShell *shell)
|
|||||||
priv->storage_set = NULL;
|
priv->storage_set = NULL;
|
||||||
priv->shortcuts = NULL;
|
priv->shortcuts = NULL;
|
||||||
priv->folder_type_repository = NULL;
|
priv->folder_type_repository = NULL;
|
||||||
|
priv->corba_storage_registry = NULL;
|
||||||
|
|
||||||
shell->priv = priv;
|
shell->priv = priv;
|
||||||
}
|
}
|
||||||
@ -191,6 +278,7 @@ init (EShell *shell)
|
|||||||
|
|
||||||
void
|
void
|
||||||
e_shell_construct (EShell *shell,
|
e_shell_construct (EShell *shell,
|
||||||
|
Evolution_Shell corba_object,
|
||||||
const char *local_directory)
|
const char *local_directory)
|
||||||
{
|
{
|
||||||
EShellPrivate *priv;
|
EShellPrivate *priv;
|
||||||
@ -201,12 +289,11 @@ e_shell_construct (EShell *shell,
|
|||||||
g_return_if_fail (local_directory != NULL);
|
g_return_if_fail (local_directory != NULL);
|
||||||
g_return_if_fail (g_path_is_absolute (local_directory));
|
g_return_if_fail (g_path_is_absolute (local_directory));
|
||||||
|
|
||||||
GTK_OBJECT_UNSET_FLAGS (shell, GTK_FLOATING);
|
bonobo_object_construct (BONOBO_OBJECT (shell), corba_object);
|
||||||
|
|
||||||
priv = shell->priv;
|
priv = shell->priv;
|
||||||
|
|
||||||
priv->local_directory = g_strdup (local_directory);
|
priv->local_directory = g_strdup (local_directory);
|
||||||
|
|
||||||
priv->folder_type_repository = e_folder_type_repository_new ();
|
priv->folder_type_repository = e_folder_type_repository_new ();
|
||||||
|
|
||||||
if (! setup_storages (shell))
|
if (! setup_storages (shell))
|
||||||
@ -231,14 +318,22 @@ e_shell_new (const char *local_directory)
|
|||||||
{
|
{
|
||||||
EShell *new;
|
EShell *new;
|
||||||
EShellPrivate *priv;
|
EShellPrivate *priv;
|
||||||
|
Evolution_Shell corba_object;
|
||||||
|
POA_Evolution_Shell *servant;
|
||||||
|
|
||||||
|
servant = create_servant ();
|
||||||
|
if (servant == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
new = gtk_type_new (e_shell_get_type ());
|
new = gtk_type_new (e_shell_get_type ());
|
||||||
e_shell_construct (new, local_directory);
|
|
||||||
|
corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant);
|
||||||
|
e_shell_construct (new, corba_object, local_directory);
|
||||||
|
|
||||||
priv = new->priv;
|
priv = new->priv;
|
||||||
|
|
||||||
if (priv->shortcuts == NULL || priv->storage_set == NULL) {
|
if (priv->shortcuts == NULL || priv->storage_set == NULL) {
|
||||||
gtk_object_unref (GTK_OBJECT (new));
|
bonobo_object_unref (BONOBO_OBJECT (new));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +398,7 @@ e_shell_quit (EShell *shell)
|
|||||||
g_return_if_fail (shell != NULL);
|
g_return_if_fail (shell != NULL);
|
||||||
g_return_if_fail (E_IS_SHELL (shell));
|
g_return_if_fail (E_IS_SHELL (shell));
|
||||||
|
|
||||||
gtk_object_destroy (GTK_OBJECT (shell));
|
bonobo_object_unref (BONOBO_OBJECT (shell));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,8 +28,9 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gtk/gtkobject.h>
|
#include <bonobo/bonobo-object.h>
|
||||||
|
|
||||||
|
#include "Evolution.h"
|
||||||
#include "e-shortcuts.h"
|
#include "e-shortcuts.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -49,25 +50,26 @@ typedef struct _EShellPrivate EShellPrivate;
|
|||||||
typedef struct _EShellClass EShellClass;
|
typedef struct _EShellClass EShellClass;
|
||||||
|
|
||||||
struct _EShell {
|
struct _EShell {
|
||||||
GtkObject parent;
|
BonoboObject parent;
|
||||||
|
|
||||||
EShellPrivate *priv;
|
EShellPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EShellClass {
|
struct _EShellClass {
|
||||||
GtkObjectClass parent_class;
|
BonoboObjectClass parent_class;
|
||||||
|
|
||||||
void (* no_views_left) (EShell *shell);
|
void (* no_views_left) (EShell *shell);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GtkType e_shell_get_type (void);
|
GtkType e_shell_get_type (void);
|
||||||
void e_shell_construct (EShell *shell,
|
void e_shell_construct (EShell *shell,
|
||||||
const char *local_directory);
|
Evolution_Shell corba_object,
|
||||||
EShell *e_shell_new (const char *local_directory);
|
const char *local_directory);
|
||||||
|
EShell *e_shell_new (const char *local_directory);
|
||||||
|
|
||||||
GtkWidget *e_shell_new_view (EShell *shell,
|
GtkWidget *e_shell_new_view (EShell *shell,
|
||||||
const char *uri);
|
const char *uri);
|
||||||
|
|
||||||
EShortcuts *e_shell_get_shortcuts (EShell *shell);
|
EShortcuts *e_shell_get_shortcuts (EShell *shell);
|
||||||
EStorageSet *e_shell_get_storage_set (EShell *shell);
|
EStorageSet *e_shell_get_storage_set (EShell *shell);
|
||||||
|
@ -28,8 +28,9 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "e-folder-type-repository.h"
|
#include <gtk/gtkwidget.h>
|
||||||
|
|
||||||
|
#include "e-folder-type-repository.h"
|
||||||
#include "e-storage.h"
|
#include "e-storage.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -400,7 +400,7 @@ e_storage_get_name (EStorage *storage)
|
|||||||
/* These functions are used by subclasses to add and remove folders from the
|
/* These functions are used by subclasses to add and remove folders from the
|
||||||
state stored in the storage object. */
|
state stored in the storage object. */
|
||||||
|
|
||||||
void
|
gboolean
|
||||||
e_storage_new_folder (EStorage *storage,
|
e_storage_new_folder (EStorage *storage,
|
||||||
const char *path,
|
const char *path,
|
||||||
EFolder *e_folder)
|
EFolder *e_folder)
|
||||||
@ -411,12 +411,12 @@ e_storage_new_folder (EStorage *storage,
|
|||||||
const char *name;
|
const char *name;
|
||||||
char *full_path;
|
char *full_path;
|
||||||
|
|
||||||
g_return_if_fail (storage != NULL);
|
g_return_val_if_fail (storage != NULL, FALSE);
|
||||||
g_return_if_fail (E_IS_STORAGE (storage));
|
g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
|
||||||
g_return_if_fail (path != NULL);
|
g_return_val_if_fail (path != NULL, FALSE);
|
||||||
g_return_if_fail (g_path_is_absolute (path));
|
g_return_val_if_fail (g_path_is_absolute (path), FALSE);
|
||||||
g_return_if_fail (e_folder != NULL);
|
g_return_val_if_fail (e_folder != NULL, FALSE);
|
||||||
g_return_if_fail (E_IS_FOLDER (e_folder));
|
g_return_val_if_fail (E_IS_FOLDER (e_folder), FALSE);
|
||||||
|
|
||||||
priv = storage->priv;
|
priv = storage->priv;
|
||||||
|
|
||||||
@ -424,12 +424,12 @@ e_storage_new_folder (EStorage *storage,
|
|||||||
if (parent_folder == NULL) {
|
if (parent_folder == NULL) {
|
||||||
g_warning ("%s: Trying to add a subfolder to a path that does not exist yet -- %s",
|
g_warning ("%s: Trying to add a subfolder to a path that does not exist yet -- %s",
|
||||||
__FUNCTION__, path);
|
__FUNCTION__, path);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = e_folder_get_name (e_folder);
|
name = e_folder_get_name (e_folder);
|
||||||
g_assert (name != NULL);
|
g_assert (name != NULL);
|
||||||
g_return_if_fail (*name != G_DIR_SEPARATOR);
|
g_return_val_if_fail (*name != G_DIR_SEPARATOR, FALSE);
|
||||||
|
|
||||||
full_path = g_concat_dir_and_file (path, name);
|
full_path = g_concat_dir_and_file (path, name);
|
||||||
|
|
||||||
@ -437,36 +437,40 @@ e_storage_new_folder (EStorage *storage,
|
|||||||
if (folder != NULL) {
|
if (folder != NULL) {
|
||||||
g_warning ("%s: Trying to add a subfolder for a path that already exists -- %s",
|
g_warning ("%s: Trying to add a subfolder for a path that already exists -- %s",
|
||||||
__FUNCTION__, full_path);
|
__FUNCTION__, full_path);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
folder = folder_new (e_folder);
|
folder = folder_new (e_folder);
|
||||||
folder_add_subfolder (parent_folder, folder);
|
folder_add_subfolder (parent_folder, folder);
|
||||||
|
|
||||||
g_hash_table_insert (priv->path_to_folder, full_path, folder);
|
g_hash_table_insert (priv->path_to_folder, full_path, folder);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
gboolean
|
||||||
e_storage_remove_folder (EStorage *storage,
|
e_storage_remove_folder (EStorage *storage,
|
||||||
const char *path)
|
const char *path)
|
||||||
{
|
{
|
||||||
EStoragePrivate *priv;
|
EStoragePrivate *priv;
|
||||||
Folder *folder;
|
Folder *folder;
|
||||||
|
|
||||||
g_return_if_fail (storage != NULL);
|
g_return_val_if_fail (storage != NULL, FALSE);
|
||||||
g_return_if_fail (E_IS_STORAGE (storage));
|
g_return_val_if_fail (E_IS_STORAGE (storage), FALSE);
|
||||||
g_return_if_fail (path != NULL);
|
g_return_val_if_fail (path != NULL, FALSE);
|
||||||
g_return_if_fail (g_path_is_absolute (path));
|
g_return_val_if_fail (g_path_is_absolute (path), FALSE);
|
||||||
|
|
||||||
priv = storage->priv;
|
priv = storage->priv;
|
||||||
|
|
||||||
folder = g_hash_table_lookup (priv->path_to_folder, path);
|
folder = g_hash_table_lookup (priv->path_to_folder, path);
|
||||||
if (folder == NULL) {
|
if (folder == NULL) {
|
||||||
g_warning ("%s: Folder not found -- %s", __FUNCTION__, path);
|
g_warning ("%s: Folder not found -- %s", __FUNCTION__, path);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
folder_destroy (folder);
|
folder_destroy (folder);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,18 +73,15 @@ EStorage *e_storage_new (void);
|
|||||||
gboolean e_storage_path_is_relative (const char *path);
|
gboolean e_storage_path_is_relative (const char *path);
|
||||||
gboolean e_storage_path_is_absolute (const char *path);
|
gboolean e_storage_path_is_absolute (const char *path);
|
||||||
|
|
||||||
GList *e_storage_list_folders (EStorage *storage,
|
GList *e_storage_list_folders (EStorage *storage, const char *path);
|
||||||
const char *path);
|
EStorageWatcher *e_storage_get_watcher_for_path (EStorage *storage, const char *path);
|
||||||
EStorageWatcher *e_storage_get_watcher_for_path (EStorage *storage,
|
EFolder *e_storage_get_folder (EStorage *storage, const char *path);
|
||||||
const char *path);
|
|
||||||
EFolder *e_storage_get_folder (EStorage *storage,
|
|
||||||
const char *path);
|
|
||||||
|
|
||||||
const char *e_storage_get_name (EStorage *storage);
|
const char *e_storage_get_name (EStorage *storage);
|
||||||
|
|
||||||
/* Protected. C++ anyone? */
|
/* Protected. C++ anyone? */
|
||||||
void e_storage_new_folder (EStorage *storage, const char *path, EFolder *folder);
|
gboolean e_storage_new_folder (EStorage *storage, const char *path, EFolder *folder);
|
||||||
void e_storage_remove_folder (EStorage *storage, const char *path);
|
gboolean e_storage_remove_folder (EStorage *storage, const char *path);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,279 +0,0 @@
|
|||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Author:
|
|
||||||
* Bertrand Guiheneuf (bg@aful.org)
|
|
||||||
*
|
|
||||||
* Dumped from bonobo/bonobo-persist-stream.c
|
|
||||||
*
|
|
||||||
* (C) 2000 Helix Code, Inc.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
#include <gtk/gtksignal.h>
|
|
||||||
#include <gtk/gtkmarshal.h>
|
|
||||||
#include "evolution-service-repository.h"
|
|
||||||
|
|
||||||
/* Parent class */
|
|
||||||
static BonoboObjectClass *evolution_service_repository_parent_class;
|
|
||||||
|
|
||||||
|
|
||||||
/* CORBA implementation Entry Point Vector */
|
|
||||||
POA_Evolution_ServiceRepository__vepv evolution_service_repository_vepv;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
*function assigned to the
|
|
||||||
* Evolution::ServiceRepository::set_shell
|
|
||||||
* method.
|
|
||||||
* This function calls the set_shell_fn in
|
|
||||||
* the EvolutionServiceRepository
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
impl_set_shell (PortableServer_Servant servant,
|
|
||||||
Evolution_Shell shell,
|
|
||||||
CORBA_Environment *ev)
|
|
||||||
{
|
|
||||||
BonoboObject *object = bonobo_object_from_servant (servant);
|
|
||||||
EvolutionServiceRepository *sr = EVOLUTION_SERVICE_REPOSITORY (object);
|
|
||||||
|
|
||||||
if (sr->set_shell_fn != NULL) {
|
|
||||||
(*sr->set_shell_fn)(sr, shell, sr->closure);
|
|
||||||
} else {
|
|
||||||
GtkObjectClass *oc = GTK_OBJECT (sr)->klass;
|
|
||||||
EvolutionServiceRepositoryClass *class = EVOLUTION_SERVICE_REPOSITORY_CLASS (oc);
|
|
||||||
(*class->set_shell)(sr, shell);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* evolution_service_repository_get_epv:
|
|
||||||
* create and initialize the ServiceRepository
|
|
||||||
* epv.
|
|
||||||
*/
|
|
||||||
POA_Evolution_ServiceRepository__epv *
|
|
||||||
evolution_service_repository_get_epv (void)
|
|
||||||
{
|
|
||||||
POA_Evolution_ServiceRepository__epv *epv;
|
|
||||||
|
|
||||||
epv = g_new0 (POA_Evolution_ServiceRepository__epv, 1);
|
|
||||||
|
|
||||||
epv->set_shell = impl_set_shell;
|
|
||||||
|
|
||||||
return epv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* create the Evolution_ServiceRepository vepv */
|
|
||||||
static void
|
|
||||||
init_service_repository_corba_class (void)
|
|
||||||
{
|
|
||||||
/* create the Bonobo interface epv */
|
|
||||||
evolution_service_repository_vepv.Bonobo_Unknown_epv =
|
|
||||||
bonobo_object_get_epv ();
|
|
||||||
|
|
||||||
/* create the ServiceRepository interface epv.
|
|
||||||
* Defined above */
|
|
||||||
evolution_service_repository_vepv.Evolution_ServiceRepository_epv =
|
|
||||||
evolution_service_repository_get_epv ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* default implementation for the ::set_shell method */
|
|
||||||
static void
|
|
||||||
evolution_service_repository_set_shell_default (EvolutionServiceRepository *service_repository,
|
|
||||||
Evolution_Shell shell)
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
evolution_service_repository_destroy (GtkObject *object)
|
|
||||||
{
|
|
||||||
GTK_OBJECT_CLASS (evolution_service_repository_parent_class)->destroy (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* initialize the Gtk object class */
|
|
||||||
static void
|
|
||||||
evolution_service_repository_class_init (EvolutionServiceRepositoryClass *klass)
|
|
||||||
{
|
|
||||||
GtkObjectClass *object_class = (GtkObjectClass *) klass;
|
|
||||||
|
|
||||||
evolution_service_repository_parent_class = gtk_type_class (bonobo_object_get_type ());
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Override and initialize methods
|
|
||||||
*/
|
|
||||||
object_class->destroy = evolution_service_repository_destroy;
|
|
||||||
klass->set_shell = evolution_service_repository_set_shell_default;
|
|
||||||
|
|
||||||
/* create the corba class */
|
|
||||||
init_service_repository_corba_class ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
evolution_service_repository_init (EvolutionServiceRepository *service_repository)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* evolution_service_repository_get_type:
|
|
||||||
*
|
|
||||||
* Returns: the GtkType for the EvolutionServiceRepository class.
|
|
||||||
*/
|
|
||||||
GtkType
|
|
||||||
evolution_service_repository_get_type (void)
|
|
||||||
{
|
|
||||||
static GtkType type = 0;
|
|
||||||
|
|
||||||
if (!type){
|
|
||||||
GtkTypeInfo info = {
|
|
||||||
"EvolutionServiceRepository",
|
|
||||||
sizeof (EvolutionServiceRepository),
|
|
||||||
sizeof (EvolutionServiceRepositoryClass),
|
|
||||||
(GtkClassInitFunc) evolution_service_repository_class_init,
|
|
||||||
(GtkObjectInitFunc) evolution_service_repository_init,
|
|
||||||
NULL, /* reserved 1 */
|
|
||||||
NULL, /* reserved 2 */
|
|
||||||
(GtkClassInitFunc) NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
type = gtk_type_unique (bonobo_object_get_type (), &info);
|
|
||||||
}
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* evolution_service_repository_construct: construct the object
|
|
||||||
* @sr: the gtk service repository object to construct
|
|
||||||
* @corba_service_repository: the corresponding corba object
|
|
||||||
* @set_shell_fn: the ::set_shell implementation for this object
|
|
||||||
* @closure: data to pass to the set_shell operation
|
|
||||||
*
|
|
||||||
* This construct an EvolutionServiceRepository object.
|
|
||||||
* The caller can give the function that will implement
|
|
||||||
* the Corba interface. If those methods are %NULL then the
|
|
||||||
* default class method will be called instead.
|
|
||||||
*
|
|
||||||
* Return value: The constructed service repository.
|
|
||||||
**/
|
|
||||||
EvolutionServiceRepository *
|
|
||||||
evolution_service_repository_construct (EvolutionServiceRepository *sr,
|
|
||||||
Evolution_ServiceRepository corba_service_repository,
|
|
||||||
EvolutionServiceRepositorySetShellFn set_shell_fn,
|
|
||||||
void *closure)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (sr != NULL, NULL);
|
|
||||||
g_return_val_if_fail (EVOLUTION_IS_SERVICE_REPOSITORY (sr), NULL);
|
|
||||||
g_return_val_if_fail (corba_service_repository != CORBA_OBJECT_NIL, NULL);
|
|
||||||
|
|
||||||
bonobo_object_construct (BONOBO_OBJECT (sr),
|
|
||||||
corba_service_repository);
|
|
||||||
|
|
||||||
sr->closure = closure;
|
|
||||||
sr->set_shell_fn = set_shell_fn;
|
|
||||||
|
|
||||||
return sr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* construct the corba
|
|
||||||
* Evolution_ServiceRepository object
|
|
||||||
*/
|
|
||||||
static Evolution_ServiceRepository
|
|
||||||
create_evolution_service_repository (BonoboObject *object)
|
|
||||||
{
|
|
||||||
POA_Evolution_ServiceRepository *servant;
|
|
||||||
CORBA_Environment ev;
|
|
||||||
|
|
||||||
/* create a servant */
|
|
||||||
servant = (POA_Evolution_ServiceRepository *) g_new0 (BonoboObjectServant, 1);
|
|
||||||
|
|
||||||
/* initialize its virtual entry point vector */
|
|
||||||
servant->vepv = &evolution_service_repository_vepv;
|
|
||||||
|
|
||||||
CORBA_exception_init (&ev);
|
|
||||||
|
|
||||||
/* initialise the servant */
|
|
||||||
POA_Evolution_ServiceRepository__init ((PortableServer_Servant) servant, &ev);
|
|
||||||
if (ev._major != CORBA_NO_EXCEPTION){
|
|
||||||
g_free (servant);
|
|
||||||
CORBA_exception_free (&ev);
|
|
||||||
return CORBA_OBJECT_NIL;
|
|
||||||
}
|
|
||||||
CORBA_exception_free (&ev);
|
|
||||||
|
|
||||||
/* activate it and return */
|
|
||||||
return (Evolution_ServiceRepository) bonobo_object_activate_servant (object, servant);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* evolution_service_repository_new: create a new EvolutionServiceRepository object
|
|
||||||
* @set_shell_fn: The ::set_shell method
|
|
||||||
* @closure: The data passed to the ::set_shell method
|
|
||||||
*
|
|
||||||
* Create a full EvolutionServiceRepository. Also create the correspoding
|
|
||||||
* servant. The ::set_shell method calls set_shell_fn unless set_shell_fn
|
|
||||||
* is %NULL, in which case, the class default method is called.
|
|
||||||
*
|
|
||||||
* Return value: The newly created EvolutionServiceRepository object
|
|
||||||
**/
|
|
||||||
EvolutionServiceRepository *
|
|
||||||
evolution_service_repository_new (EvolutionServiceRepositorySetShellFn set_shell_fn,
|
|
||||||
void *closure)
|
|
||||||
{
|
|
||||||
Evolution_ServiceRepository corba_sr;
|
|
||||||
EvolutionServiceRepository *sr;
|
|
||||||
|
|
||||||
/* create the gtk object */
|
|
||||||
sr = gtk_type_new (evolution_service_repository_get_type ());
|
|
||||||
|
|
||||||
/* create the Corba object */
|
|
||||||
corba_sr = create_evolution_service_repository (
|
|
||||||
BONOBO_OBJECT (sr));
|
|
||||||
|
|
||||||
/* check for an error in the creation of the corba object */
|
|
||||||
if (corba_sr == CORBA_OBJECT_NIL){
|
|
||||||
gtk_object_destroy (GTK_OBJECT (sr));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* construct the object */
|
|
||||||
evolution_service_repository_construct (sr, corba_sr, set_shell_fn, closure);
|
|
||||||
|
|
||||||
return sr;
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
||||||
#ifndef _EVOLUTION_SERVICE_REPOSITORY_H
|
|
||||||
#define _EVOLUTION_SERVICE_REPOSITORY_H 1
|
|
||||||
|
|
||||||
#include <bonobo/bonobo-object.h>
|
|
||||||
#include "Evolution.h"
|
|
||||||
|
|
||||||
BEGIN_GNOME_DECLS
|
|
||||||
|
|
||||||
#define EVOLUTION_SERVICE_REPOSITORY_TYPE (evolution_service_repository_get_type ())
|
|
||||||
#define EVOLUTION_SERVICE_REPOSITORY(o) (GTK_CHECK_CAST ((o), EVOLUTION_SERVICE_REPOSITORY_TYPE, EvolutionServiceRepository))
|
|
||||||
#define EVOLUTION_SERVICE_REPOSITORY_CLASS(k) (GTK_CHECK_CLASS_CAST((k), EVOLUTION_SERVICE_REPOSITORY_TYPE, EvolutionServiceRepositoryClass))
|
|
||||||
#define EVOLUTION_IS_SERVICE_REPOSITORY(o) (GTK_CHECK_TYPE ((o), EVOLUTION_SERVICE_REPOSITORY_TYPE))
|
|
||||||
#define EVOLUTION_IS_SERVICE_REPOSITORY_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), EVOLUTION_SERVICE_REPOSITORY_TYPE))
|
|
||||||
|
|
||||||
typedef struct _EvolutionServiceRepository EvolutionServiceRepositoryPrivate;
|
|
||||||
typedef struct _EvolutionServiceRepository EvolutionServiceRepository;
|
|
||||||
|
|
||||||
typedef void (*EvolutionServiceRepositorySetShellFn) (EvolutionServiceRepository *sr, const Evolution_Shell shell, void *closure);
|
|
||||||
|
|
||||||
|
|
||||||
struct _EvolutionServiceRepository {
|
|
||||||
BonoboObject object;
|
|
||||||
|
|
||||||
|
|
||||||
EvolutionServiceRepositorySetShellFn set_shell_fn;
|
|
||||||
|
|
||||||
void *closure;
|
|
||||||
|
|
||||||
EvolutionServiceRepositoryPrivate *priv;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
BonoboObjectClass parent_class;
|
|
||||||
|
|
||||||
void (*set_shell) (EvolutionServiceRepository *sr, Evolution_Shell shell);
|
|
||||||
|
|
||||||
} EvolutionServiceRepositoryClass;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GtkType evolution_service_repository_get_type (void);
|
|
||||||
|
|
||||||
EvolutionServiceRepository * evolution_service_repository_new (
|
|
||||||
EvolutionServiceRepositorySetShellFn set_shell_fn,
|
|
||||||
void *closure);
|
|
||||||
|
|
||||||
EvolutionServiceRepository * evolution_service_repository_construct (
|
|
||||||
EvolutionServiceRepository *sr,
|
|
||||||
Evolution_ServiceRepository corba_service_repository,
|
|
||||||
EvolutionServiceRepositorySetShellFn set_shell_fn,
|
|
||||||
void *closure);
|
|
||||||
|
|
||||||
|
|
||||||
POA_Evolution_ServiceRepository__epv *evolution_service_repository_get_epv (void);
|
|
||||||
|
|
||||||
extern POA_Evolution_ServiceRepository__vepv evolution_service_repository_vepv;
|
|
||||||
|
|
||||||
END_GNOME_DECLS
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _EVOLUTION_SERVICE_REPOSITORY_H */
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Component Interface
|
|
||||||
*
|
|
||||||
* Authors:
|
|
||||||
* Bertrand Guiheneuf (bg@aful.org)
|
|
||||||
*
|
|
||||||
* (C) 2000 Helix Code, Inc.
|
|
||||||
*/
|
|
||||||
#include <Bonobo.idl>
|
|
||||||
|
|
||||||
module Evolution {
|
|
||||||
interface ServiceRepository : Bonobo::Unknown {
|
|
||||||
|
|
||||||
void set_shell (in Shell shell);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
Reference in New Issue
Block a user