diff options
author | Ettore Perazzoli <ettore@src.gnome.org> | 2000-06-10 03:19:36 +0800 |
---|---|---|
committer | Ettore Perazzoli <ettore@src.gnome.org> | 2000-06-10 03:19:36 +0800 |
commit | 7f36752a67c274640378ec096f37e690fd5ca8ed (patch) | |
tree | dcc3124da275074dcf11803bb553d2af384858db /shell/evolution-shell-component.c | |
parent | 59d329b5b090175e2ea5ffd06cb20dfcd41a7688 (diff) | |
download | gsoc2013-evolution-7f36752a67c274640378ec096f37e690fd5ca8ed.tar.gz gsoc2013-evolution-7f36752a67c274640378ec096f37e690fd5ca8ed.tar.zst gsoc2013-evolution-7f36752a67c274640378ec096f37e690fd5ca8ed.zip |
Initial support for creating/removing folders. This implies some new
IDL methods and new functions to implement on the component side. I
have also added a simple folder creation dialog in the shell. It's
quite unfinished and untested.
svn path=/trunk/; revision=3491
Diffstat (limited to 'shell/evolution-shell-component.c')
-rw-r--r-- | shell/evolution-shell-component.c | 106 |
1 files changed, 94 insertions, 12 deletions
diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c index d00db7c9d9..89a9866b38 100644 --- a/shell/evolution-shell-component.c +++ b/shell/evolution-shell-component.c @@ -40,7 +40,10 @@ static BonoboObjectClass *parent_class = NULL; struct _EvolutionShellComponentPrivate { GList *folder_types; /* EvolutionShellComponentFolderType */ - EvolutionShellComponentCreateViewFn create_view_fn; + EvolutionShellComponentCreateViewFn create_view_fn; + EvolutionShellComponentCreateFolderFn create_folder_fn; + EvolutionShellComponentRemoveFolderFn remove_folder_fn; + Evolution_Shell corba_owner; void *closure; }; @@ -167,29 +170,95 @@ impl_ShellComponent_unset_owner (PortableServer_Servant servant, static Bonobo_Control impl_ShellComponent_create_view (PortableServer_Servant servant, const CORBA_char *physical_uri, + const CORBA_char *type, CORBA_Environment *ev) { BonoboObject *bonobo_object; EvolutionShellComponent *shell_component; EvolutionShellComponentPrivate *priv; + EvolutionShellComponentResult result; BonoboControl *control; bonobo_object = bonobo_object_from_servant (servant); shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); priv = shell_component->priv; - control = (* priv->create_view_fn) (shell_component, physical_uri, priv->closure); + result = (* priv->create_view_fn) (shell_component, physical_uri, type, + &control, priv->closure); + + if (result != EVOLUTION_SHELL_COMPONENT_OK) { + switch (result) { + case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_Evolution_ShellComponent_UnsupportedType, + NULL); + break; + case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_Evolution_ShellComponent_InternalError, + NULL); + break; + default: + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_Evolution_ShellComponent_NotFound, + NULL); + } - if (control == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_NotFound, - NULL); return CORBA_OBJECT_NIL; } return bonobo_object_corba_objref (BONOBO_OBJECT (control)); } +static void +impl_ShellComponent_async_create_folder (PortableServer_Servant servant, + const Evolution_ShellComponentListener listener, + const CORBA_char *physical_uri, + const CORBA_char *type, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + EvolutionShellComponent *shell_component; + EvolutionShellComponentPrivate *priv; + + bonobo_object = bonobo_object_from_servant (servant); + shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); + priv = shell_component->priv; + + if (priv->create_folder_fn == NULL) { + Evolution_ShellComponentListener_report_result (listener, + Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, + ev); + return; + } + + (* priv->create_folder_fn) (shell_component, physical_uri, type, listener, priv->closure); +} + +static void +impl_ShellComponent_async_remove_folder (PortableServer_Servant servant, + const Evolution_ShellComponentListener listener, + const CORBA_char *physical_uri, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + EvolutionShellComponent *shell_component; + EvolutionShellComponentPrivate *priv; + + bonobo_object = bonobo_object_from_servant (servant); + shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); + priv = shell_component->priv; + + if (priv->remove_folder_fn == NULL) { + Evolution_ShellComponentListener_report_result (listener, + Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, + ev); + return; + } + + (* priv->remove_folder_fn) (shell_component, physical_uri, listener, priv->closure); +} + /* GtkObject methods. */ @@ -248,6 +317,8 @@ corba_class_init (void) epv->set_owner = impl_ShellComponent_set_owner; epv->unset_owner = impl_ShellComponent_unset_owner; epv->create_view = impl_ShellComponent_create_view; + epv->async_create_folder = impl_ShellComponent_async_create_folder; + epv->async_remove_folder = impl_ShellComponent_async_remove_folder; vepv = &ShellComponent_vepv; vepv->_base_epv = base_epv; @@ -294,10 +365,12 @@ init (EvolutionShellComponent *shell_component) priv = g_new (EvolutionShellComponentPrivate, 1); - priv->folder_types = NULL; - priv->create_view_fn = NULL; - priv->closure = NULL; - priv->corba_owner = CORBA_OBJECT_NIL; + priv->folder_types = NULL; + priv->create_view_fn = NULL; + priv->create_folder_fn = NULL; + priv->remove_folder_fn = NULL; + priv->corba_owner = CORBA_OBJECT_NIL; + priv->closure = NULL; shell_component->priv = priv; } @@ -308,6 +381,8 @@ evolution_shell_component_construct (EvolutionShellComponent *shell_component, const EvolutionShellComponentFolderType folder_types[], Evolution_ShellComponent corba_object, EvolutionShellComponentCreateViewFn create_view_fn, + EvolutionShellComponentCreateFolderFn create_folder_fn, + EvolutionShellComponentRemoveFolderFn remove_folder_fn, void *closure) { EvolutionShellComponentPrivate *priv; @@ -320,7 +395,10 @@ evolution_shell_component_construct (EvolutionShellComponent *shell_component, priv = shell_component->priv; - priv->create_view_fn = create_view_fn; + priv->create_view_fn = create_view_fn; + priv->create_folder_fn = create_folder_fn; + priv->remove_folder_fn = remove_folder_fn; + priv->closure = closure; for (i = 0; folder_types[i].name != NULL; i++) { @@ -345,6 +423,8 @@ evolution_shell_component_construct (EvolutionShellComponent *shell_component, EvolutionShellComponent * evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[], EvolutionShellComponentCreateViewFn create_view_fn, + EvolutionShellComponentCreateFolderFn create_folder_fn, + EvolutionShellComponentRemoveFolderFn remove_folder_fn, void *closure) { EvolutionShellComponent *new; @@ -358,7 +438,9 @@ evolution_shell_component_new (const EvolutionShellComponentFolderType folder_ty new = gtk_type_new (evolution_shell_component_get_type ()); corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant); - evolution_shell_component_construct (new, folder_types, corba_object, create_view_fn, closure); + evolution_shell_component_construct (new, folder_types, corba_object, + create_view_fn, create_folder_fn, remove_folder_fn, + closure); return new; } |