diff options
author | Ettore Perazzoli <ettore@src.gnome.org> | 2002-05-16 05:41:51 +0800 |
---|---|---|
committer | Ettore Perazzoli <ettore@src.gnome.org> | 2002-05-16 05:41:51 +0800 |
commit | 3d386b57d1682ad0f5fb0b9a60f0d65906f578b7 (patch) | |
tree | 67f79ba63a89ee7f5e1e463b8b4e082bfca83620 /shell/e-shell.c | |
parent | c1ce3633db69de57b4a589587627fa088f9a3e5f (diff) | |
download | gsoc2013-evolution-3d386b57d1682ad0f5fb0b9a60f0d65906f578b7.tar.gz gsoc2013-evolution-3d386b57d1682ad0f5fb0b9a60f0d65906f578b7.tar.zst gsoc2013-evolution-3d386b57d1682ad0f5fb0b9a60f0d65906f578b7.zip |
Check with e_shell_prepare_for_quit() before quitting.
* e-shell-view-menu.c (command_quit): Check with
e_shell_prepare_for_quit() before quitting.
* e-shell.c (e_shell_prepare_for_quit): New.
* evolution-test-component.c (request_quit_fn): New function
asking for confirmation to quit.
* evolution-shell-component.c (evolution_shell_component_new): New
arg @request_quit_fn.
(impl_requestQuit): New, implementation for
EvolutionShellComponent::requestQuit.
(evolution_shell_component_result_to_string): Handle
EVOLUTION_SHELL_COMPONENT_CANCEL.
(evolution_shell_component_client_request_quit): New.
* Evolution-ShellComponent.idl (requestQuit): New.
* component-factory.c (create_component): Pass NULL as
@request_quit_fn.
* component-factory.c (create_component): Pass NULL as
@request_quit_fn.
* gui/component-factory.c (create_object): Pass NULL as
@request_quit_fn.
* gui/component/addressbook-component.c (create_component): Pass
NULL as @request_quit_fn.
svn path=/trunk/; revision=16925
Diffstat (limited to 'shell/e-shell.c')
-rw-r--r-- | shell/e-shell.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/shell/e-shell.c b/shell/e-shell.c index ff227dbb23..6353a45f55 100644 --- a/shell/e-shell.c +++ b/shell/e-shell.c @@ -70,6 +70,7 @@ #include "e-splash.h" #include "e-uri-schema-registry.h" +#include "evolution-shell-component-client.h" #include "evolution-shell-component-utils.h" #include "evolution-storage-set-view-factory.h" @@ -2145,6 +2146,69 @@ e_shell_construct_result_to_string (EShellConstructResult result) } +static void +prepare_for_quit_callback (EvolutionShellComponentClient *client, + EvolutionShellComponentResult result, + void *data) +{ + GNOME_Evolution_ShellComponentListener_Result *result_return; + + result_return = (GNOME_Evolution_ShellComponentListener_Result *) data; + *result_return = result; +} + +gboolean +e_shell_prepare_for_quit (EShell *shell) +{ + EShellPrivate *priv; + GList *component_ids; + GList *p; + gboolean retval; + + g_return_val_if_fail (E_IS_SHELL (shell), FALSE); + + priv = shell->priv; + + /* Make all the views insensitive so we have some modal-like + behavior. */ + for (p = priv->views; p != NULL; p = p->next) + gtk_widget_set_sensitive (GTK_WIDGET (p->data), FALSE); + + component_ids = e_component_registry_get_id_list (priv->component_registry); + + for (p = component_ids; p != NULL; p = p->next) { + EvolutionShellComponentClient *client; + const char *id; + GNOME_Evolution_ShellComponentListener_Result result; + + id = (const char *) p->data; + client = e_component_registry_get_component_by_id (priv->component_registry, id); + + result = (GNOME_Evolution_ShellComponentListener_Result) -1; + + evolution_shell_component_client_request_quit (client, prepare_for_quit_callback, &result); + + while (result == (GNOME_Evolution_ShellComponentListener_Result) -1) + gtk_main_iteration (); + + if (result != GNOME_Evolution_ShellComponentListener_OK) { + retval = FALSE; + goto end; + } + } + + retval = TRUE; + + end: + /* Restore all the views to be sensitive. */ + for (p = priv->views; p != NULL; p = p->next) + gtk_widget_set_sensitive (GTK_WIDGET (p->data), TRUE); + + e_free_string_list (component_ids); + return retval; +} + + E_MAKE_X_TYPE (e_shell, "EShell", EShell, class_init, init, PARENT_TYPE, POA_GNOME_Evolution_Shell__init, |