From fc1e5673bb9d91f89a851262cf5c66b50c31c18d Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Fri, 5 Oct 2001 17:49:35 +0000 Subject: If setting the owner fails, print the a warning message out. Then restart * e-shell.c (set_owner_on_components): If setting the owner fails, print the a warning message out. Then restart the component. * e-component-registry.c (component_free): Return a boolean value. %FALSE if ::unsetOwner raises an exception. (register_type): New arg @override_duplicate, to avoid complaining if a component gets re-registered. (register_component): Likewise. (e_component_registry_restart_component): New. * e-uri-schema-registry.c (e_uri_schema_registry_set_handler_for_schema): Changed return type to `void'. Just remove the old handler and set up the new one. * evolution-shell-component-client.c (corba_exception_to_result): Translate ::OldOwnerHasDied into EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED. * evolution-shell-component.h: New enum value `EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED'. * evolution-shell-component.c (impl_setOwner): If the old owner is not alive anymore [use CORBA_Object_non_existent() to figure this out], emit OWNER_UNSET and raise `OldOwnerHasDied'. (evolution_shell_component_result_to_string): New. * Evolution-ShellComponent.idl: New exception `OldOwnerHasDied'. (ShellComponent::setOwner): Can raise it. * e-folder-type-registry.c (e_folder_type_register_type_registered): New. (e_folder_type_register_unregister_type): New. svn path=/trunk/; revision=13446 --- shell/evolution-shell-component.c | 71 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) (limited to 'shell/evolution-shell-component.c') diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c index 341091dd29..6fa1210f03 100644 --- a/shell/evolution-shell-component.c +++ b/shell/evolution-shell-component.c @@ -305,8 +305,26 @@ impl_setOwner (PortableServer_Servant servant, priv = shell_component->priv; if (priv->owner_client != NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_AlreadyOwned, NULL); + int owner_is_dead; + + owner_is_dead = CORBA_Object_non_existent + (bonobo_object_corba_objref (BONOBO_OBJECT (priv->owner_client)), ev); + if (ev->_major != CORBA_NO_EXCEPTION) + owner_is_dead = TRUE; + + if (! owner_is_dead) { + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_Evolution_ShellComponent_AlreadyOwned, NULL); + } else { + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_Evolution_ShellComponent_OldOwnerHasDied, NULL); + + bonobo_object_unref (BONOBO_OBJECT (priv->owner_client)); + priv->owner_client = NULL; + + gtk_signal_emit (GTK_OBJECT (shell_component), signals[OWNER_UNSET]); + } + return; } @@ -824,6 +842,55 @@ evolution_shell_component_add_user_creatable_item (EvolutionShellComponent *she priv->user_creatable_item_types = g_slist_prepend (priv->user_creatable_item_types, type); } + +/* Public utility functions. */ + +const char * +evolution_shell_component_result_to_string (EvolutionShellComponentResult result) +{ + switch (result) { + case EVOLUTION_SHELL_COMPONENT_OK: + return _("Success"); + case EVOLUTION_SHELL_COMPONENT_CORBAERROR: + return _("CORBA error"); + case EVOLUTION_SHELL_COMPONENT_INTERRUPTED: + return _("Interrupted"); + case EVOLUTION_SHELL_COMPONENT_INVALIDARG: + return _("Invalid argument"); + case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED: + return _("Already has an owner"); + case EVOLUTION_SHELL_COMPONENT_NOTOWNED: + return _("No owner"); + case EVOLUTION_SHELL_COMPONENT_NOTFOUND: + return _("Not found"); + case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: + return _("Unsupported type"); + case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA: + return _("Unsupported schema"); + case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION: + return _("Unsupported operation"); + case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: + return _("Internal error"); + case EVOLUTION_SHELL_COMPONENT_BUSY: + return _("Busy"); + case EVOLUTION_SHELL_COMPONENT_EXISTS: + return _("Exists"); + case EVOLUTION_SHELL_COMPONENT_INVALIDURI: + return _("Invalid URI"); + case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED: + return _("Permission denied"); + case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS: + return _("Has subfolders"); + case EVOLUTION_SHELL_COMPONENT_NOSPACE: + return _("No space left"); + case EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED: + return _("Old owner has died"); + case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR: + default: + return _("Unknown error"); + } +} + E_MAKE_X_TYPE (evolution_shell_component, "EvolutionShellComponent", EvolutionShellComponent, class_init, init, PARENT_TYPE, -- cgit v1.2.3