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:
Ettore Perazzoli
2000-05-23 10:15:30 +00:00
parent 84844abe32
commit d00e525efc
25 changed files with 1046 additions and 487 deletions

View File

@ -1,21 +1,24 @@
ABOUT-NLS
Makefile
Makefile.in
aclocal.m4
configure
config.cache
config.guess
config.sub
ltconfig
ltmain.sh
config.h
config.h.in
config.log
config.h
config.cache
libtool
config.status
config.sub
configure
install-sh
intl
libtool
ltconfig
ltmain.sh
missing
mkinstalldirs
stamp-h
Makefile
stamp.h
stamp-h.in
stamp.h
xlibtool
xltmain.sh
intl
ABOUT-NLS

View File

@ -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>
* message-list.c (get_message_info): Made static.

View File

@ -51,7 +51,6 @@ evolution_mail_LDADD = \
../shell/Evolution-common.o \
../shell/Evolution-stubs.o \
../shell/Evolution-skels.o \
../shell/evolution-service-repository.o \
../composer/libcomposer.la \
../widgets/e-table/libetable.a \
../widgets/e-text/libetext.a \

View File

@ -18,7 +18,6 @@
#include "folder-browser.h"
#include "mail.h"
#include "shell/Evolution.h"
#include "shell/evolution-service-repository.h"
#ifdef USING_OAF
#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"
#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
random_cb (GtkWidget *button, gpointer user_data)
{
@ -204,13 +160,6 @@ folder_browser_factory (BonoboGenericFactory *factory, void *closure)
bonobo_control_set_property_bag (control,
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);
}

View File

@ -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>
* main.c (new_view_idle_cb): add development_warning (moved from

18
shell/Evolution-Shell.idl Normal file
View 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 ();
};
};

View 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);
};
};

View 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);
};
};

View File

@ -1,14 +1,15 @@
/* -*- 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:
* 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>

View File

@ -21,8 +21,18 @@ EVOLUTION_CORBA_GENERATED = \
CLEANFILES = $(EVOLUTION_CORBA_GENERATED)
IDLS = \
Evolution.idl \
Evolution-Shell.idl \
Evolution-ShellComponent.idl \
Evolution-Storage.idl
evolution_SOURCES = \
$(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.h \
e-folder.c \
@ -54,13 +64,11 @@ evolution_SOURCES = \
e-storage-watcher.h \
e-storage.c \
e-storage.h \
evolution-service-repository.c \
evolution-service-repository.h \
main.c
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
evolution_LDADD = \
@ -70,9 +78,7 @@ evolution_LDADD = \
$(top_builddir)/e-util/libeutil.la \
$(BONOBO_GNOME_LIBS)
EXTRA_DIST = Evolution.idl \
Shell.idl \
evolution-service-repository.idl
EXTRA_DIST = $(IDLS)
if ENABLE_PURIFY
PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@

View 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)

View 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
View 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
View 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__ */

View File

@ -89,6 +89,8 @@ folder_type_new (const char *name,
else
new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
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);

View File

@ -83,7 +83,7 @@ remove (EFolder *folder)
static const char *
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)));
return NULL;
}

View File

@ -279,7 +279,7 @@ GnomeUIInfo e_shell_view_menu [] = {
{ GNOME_APP_UI_SUBTREE, N_("_Actions"), NULL, menu_actions },
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
};

View File

@ -28,8 +28,11 @@
#include <gtk/gtkobject.h>
#include <gtk/gtktypeutils.h>
#include "Evolution.h"
#include "e-util/e-util.h"
#include "e-corba-storage-registry.h"
#include "e-folder-type-repository.h"
#include "e-local-storage.h"
#include "e-shell-view.h"
@ -39,8 +42,8 @@
#include "e-shell.h"
#define PARENT_TYPE GTK_TYPE_OBJECT
static GtkObjectClass *parent_class = NULL;
#define PARENT_TYPE BONOBO_OBJECT_TYPE
static BonoboObjectClass *parent_class = NULL;
struct _EShellPrivate {
char *local_directory;
@ -50,6 +53,8 @@ struct _EShellPrivate {
EStorageSet *storage_set;
EShortcuts *shortcuts;
EFolderTypeRepository *folder_type_repository;
ECorbaStorageRegistry *corba_storage_registry;
};
#define SHORTCUTS_FILE_NAME "shortcuts.xml"
@ -62,9 +67,63 @@ enum {
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. */
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
setup_storages (EShell *shell)
{
@ -89,7 +148,7 @@ setup_storages (EShell *shell)
priv->storage_set = e_storage_set_new (shell->priv->folder_type_repository);
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);
if (priv->corba_storage_registry != NULL)
bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry));
g_free (priv);
(* 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
class_init (EShellClass *klass)
{
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->destroy = destroy;
@ -169,6 +253,8 @@ class_init (EShellClass *klass)
GTK_TYPE_NONE, 0);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
corba_class_init ();
}
static void
@ -184,6 +270,7 @@ init (EShell *shell)
priv->storage_set = NULL;
priv->shortcuts = NULL;
priv->folder_type_repository = NULL;
priv->corba_storage_registry = NULL;
shell->priv = priv;
}
@ -191,6 +278,7 @@ init (EShell *shell)
void
e_shell_construct (EShell *shell,
Evolution_Shell corba_object,
const char *local_directory)
{
EShellPrivate *priv;
@ -201,12 +289,11 @@ e_shell_construct (EShell *shell,
g_return_if_fail (local_directory != NULL);
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->local_directory = g_strdup (local_directory);
priv->folder_type_repository = e_folder_type_repository_new ();
if (! setup_storages (shell))
@ -231,14 +318,22 @@ e_shell_new (const char *local_directory)
{
EShell *new;
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 ());
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;
if (priv->shortcuts == NULL || priv->storage_set == NULL) {
gtk_object_unref (GTK_OBJECT (new));
bonobo_object_unref (BONOBO_OBJECT (new));
return NULL;
}
@ -303,7 +398,7 @@ e_shell_quit (EShell *shell)
g_return_if_fail (shell != NULL);
g_return_if_fail (E_IS_SHELL (shell));
gtk_object_destroy (GTK_OBJECT (shell));
bonobo_object_unref (BONOBO_OBJECT (shell));
}

View File

@ -28,8 +28,9 @@
#include <config.h>
#endif
#include <gtk/gtkobject.h>
#include <bonobo/bonobo-object.h>
#include "Evolution.h"
#include "e-shortcuts.h"
#ifdef __cplusplus
@ -49,25 +50,26 @@ typedef struct _EShellPrivate EShellPrivate;
typedef struct _EShellClass EShellClass;
struct _EShell {
GtkObject parent;
BonoboObject parent;
EShellPrivate *priv;
};
struct _EShellClass {
GtkObjectClass parent_class;
BonoboObjectClass parent_class;
void (* no_views_left) (EShell *shell);
};
GtkType e_shell_get_type (void);
void e_shell_construct (EShell *shell,
const char *local_directory);
EShell *e_shell_new (const char *local_directory);
GtkType e_shell_get_type (void);
void e_shell_construct (EShell *shell,
Evolution_Shell corba_object,
const char *local_directory);
EShell *e_shell_new (const char *local_directory);
GtkWidget *e_shell_new_view (EShell *shell,
const char *uri);
GtkWidget *e_shell_new_view (EShell *shell,
const char *uri);
EShortcuts *e_shell_get_shortcuts (EShell *shell);
EStorageSet *e_shell_get_storage_set (EShell *shell);

View File

@ -28,8 +28,9 @@
#include <config.h>
#endif
#include "e-folder-type-repository.h"
#include <gtk/gtkwidget.h>
#include "e-folder-type-repository.h"
#include "e-storage.h"
#ifdef __cplusplus

View File

@ -400,7 +400,7 @@ e_storage_get_name (EStorage *storage)
/* These functions are used by subclasses to add and remove folders from the
state stored in the storage object. */
void
gboolean
e_storage_new_folder (EStorage *storage,
const char *path,
EFolder *e_folder)
@ -411,12 +411,12 @@ e_storage_new_folder (EStorage *storage,
const char *name;
char *full_path;
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 (e_folder != NULL);
g_return_if_fail (E_IS_FOLDER (e_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);
g_return_val_if_fail (e_folder != NULL, FALSE);
g_return_val_if_fail (E_IS_FOLDER (e_folder), FALSE);
priv = storage->priv;
@ -424,12 +424,12 @@ e_storage_new_folder (EStorage *storage,
if (parent_folder == NULL) {
g_warning ("%s: Trying to add a subfolder to a path that does not exist yet -- %s",
__FUNCTION__, path);
return;
return FALSE;
}
name = e_folder_get_name (e_folder);
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);
@ -437,36 +437,40 @@ e_storage_new_folder (EStorage *storage,
if (folder != NULL) {
g_warning ("%s: Trying to add a subfolder for a path that already exists -- %s",
__FUNCTION__, full_path);
return;
return FALSE;
}
folder = folder_new (e_folder);
folder_add_subfolder (parent_folder, folder);
g_hash_table_insert (priv->path_to_folder, full_path, folder);
return TRUE;
}
void
gboolean
e_storage_remove_folder (EStorage *storage,
const char *path)
{
EStoragePrivate *priv;
Folder *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));
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 = g_hash_table_lookup (priv->path_to_folder, path);
if (folder == NULL) {
g_warning ("%s: Folder not found -- %s", __FUNCTION__, path);
return;
return FALSE;
}
folder_destroy (folder);
return TRUE;
}

View File

@ -73,18 +73,15 @@ EStorage *e_storage_new (void);
gboolean e_storage_path_is_relative (const char *path);
gboolean e_storage_path_is_absolute (const char *path);
GList *e_storage_list_folders (EStorage *storage,
const char *path);
EStorageWatcher *e_storage_get_watcher_for_path (EStorage *storage,
const char *path);
EFolder *e_storage_get_folder (EStorage *storage,
const char *path);
GList *e_storage_list_folders (EStorage *storage, const char *path);
EStorageWatcher *e_storage_get_watcher_for_path (EStorage *storage, const char *path);
EFolder *e_storage_get_folder (EStorage *storage, const char *path);
const char *e_storage_get_name (EStorage *storage);
/* Protected. C++ anyone? */
void e_storage_new_folder (EStorage *storage, const char *path, EFolder *folder);
void e_storage_remove_folder (EStorage *storage, const char *path);
gboolean e_storage_new_folder (EStorage *storage, const char *path, EFolder *folder);
gboolean e_storage_remove_folder (EStorage *storage, const char *path);
#ifdef __cplusplus
}

View File

@ -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;
}

View File

@ -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 */

View File

@ -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);
};
};