diff options
-rw-r--r-- | shell/ChangeLog | 18 | ||||
-rw-r--r-- | shell/e-shell-shared-folder-picker-dialog.c | 87 |
2 files changed, 89 insertions, 16 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog index 9797b6a1fc..11029f6f39 100644 --- a/shell/ChangeLog +++ b/shell/ChangeLog @@ -1,5 +1,23 @@ 2002-05-10 Ettore Perazzoli <ettore@ximian.com> + * e-shell-shared-folder-picker-dialog.c: Add members `parent' and + `shell' in DiscoveryData. + (shell_view_destroy_callback): Callback for destruction of + ->parent; set ->parent to NULL. + (shell_destroy_callback): Callback for the desctruction of the + shell; clean up everything. + (discover_folder): Initialize ->parent and shell, and add the + corresponding destruction handlers. + (shared_folder_discovery_listener_callback): Open the discovered + folder. + (setup_progress_dialog): Renamed from `show_progress_dialog'. Set + up a timeout for displaying the dialog instead of displaying it + right away. + (progress_dialog_show_timeout_callback): Callback for showing the + dialog after the callback. + +2002-05-10 Ettore Perazzoli <ettore@ximian.com> + * e-shell-shared-folder-picker-dialog.c (shared_folder_discovery_listener_callback): Updated for FolderResult instead of DiscoverSharedFolderResult. diff --git a/shell/e-shell-shared-folder-picker-dialog.c b/shell/e-shell-shared-folder-picker-dialog.c index 2e2d971c5e..9dfca186bd 100644 --- a/shell/e-shell-shared-folder-picker-dialog.c +++ b/shell/e-shell-shared-folder-picker-dialog.c @@ -28,6 +28,7 @@ #include "e-shell-shared-folder-picker-dialog.h" #include "e-corba-storage.h" +#include "e-shell-constants.h" #include "evolution-storage-listener.h" #include "Evolution-Addressbook-SelectNames.h" @@ -46,6 +47,11 @@ #include <gtk/gtk.h> +/* Timeout for showing the progress dialog (msecs). */ + +#define PROGRESS_DIALOG_DELAY 500 + + /* Dialog creation and handling. */ static void @@ -255,6 +261,8 @@ show_dialog (EShell *shell, /* Discovery process. */ struct _DiscoveryData { + EShell *shell; + EShellView *parent; GtkWidget *dialog; EStorage *storage; char *user; @@ -297,11 +305,21 @@ progress_dialog_close_callback (GnomeDialog *dialog, return TRUE; } +static int +progress_dialog_show_timeout_callback (void *data) +{ + GtkWidget *dialog; + + dialog = GTK_WIDGET (data); + gtk_widget_show_all (dialog); + return FALSE; +} + static GtkWidget * -show_progress_dialog (EShell *shell, - EStorage *storage, - const char *user_email_address, - const char *folder_name) +create_progress_dialog (EShell *shell, + EStorage *storage, + const char *user_email_address, + const char *folder_name) { GtkWidget *dialog; GtkWidget *label; @@ -335,7 +353,7 @@ show_progress_dialog (EShell *shell, GTK_SIGNAL_FUNC (progress_bar_destroy_callback), GINT_TO_POINTER (progress_bar_timeout_id)); - gtk_widget_show_all (dialog); + g_timeout_add (PROGRESS_DIALOG_DELAY, progress_dialog_show_timeout_callback, dialog); return dialog; } @@ -351,8 +369,28 @@ cleanup_discovery (DiscoveryData *discovery_data) } static void -storage_destroyed_callback (GtkObject *object, - void *data) +shell_destroy_callback (GtkObject *object, + void *data) +{ + DiscoveryData *discovery_data; + + discovery_data = (DiscoveryData *) data; + cleanup_discovery (discovery_data); +} + +static void +shell_view_destroy_callback (GtkObject *object, + void *data) +{ + DiscoveryData *discovery_data; + + discovery_data = (DiscoveryData *) data; + discovery_data->parent = NULL; +} + +static void +storage_destroy_callback (GtkObject *object, + void *data) { DiscoveryData *discovery_data; @@ -378,10 +416,19 @@ shared_folder_discovery_listener_callback (BonoboListener *listener, cleanup_discovery (discovery_data); - /* FIXME: The folder has been discovered; do something here, i.e. show - the folder. */ + if (result == GNOME_Evolution_Storage_OK) { + char *uri; + + uri = g_strconcat (E_SHELL_URI_PREFIX, "/", + e_storage_get_name (discovery_data->storage), + result->path, + NULL); - e_notice (NULL, GNOME_MESSAGE_BOX_INFO, "Found folder\n%s", result->path); + if (discovery_data->parent != NULL) + e_shell_view_display_uri (discovery_data->parent, uri); + else + e_shell_create_view (discovery_data->shell, uri, NULL); + } } static void @@ -412,16 +459,24 @@ discover_folder (EShell *shell, if (storage == NULL || ! E_IS_CORBA_STORAGE (storage)) goto error; - dialog = show_progress_dialog (shell, storage, user_email_address, folder_name); + dialog = create_progress_dialog (shell, storage, user_email_address, folder_name); discovery_data = g_new (DiscoveryData, 1); - discovery_data->dialog = dialog; - discovery_data->storage = storage; - discovery_data->user = g_strdup (user_email_address); - discovery_data->folder_name = g_strdup (folder_name); + discovery_data->dialog = dialog; + discovery_data->shell = shell; + discovery_data->parent = parent; + discovery_data->storage = storage; + discovery_data->user = g_strdup (user_email_address); + discovery_data->folder_name = g_strdup (folder_name); + + gtk_signal_connect (GTK_OBJECT (shell), "destroy", + GTK_SIGNAL_FUNC (shell_destroy_callback), discovery_data); + + gtk_signal_connect (GTK_OBJECT (parent), "destroy", + GTK_SIGNAL_FUNC (shell_view_destroy_callback), discovery_data); gtk_signal_connect (GTK_OBJECT (storage), "destroy", - GTK_SIGNAL_FUNC (storage_destroyed_callback), discovery_data); + GTK_SIGNAL_FUNC (storage_destroy_callback), discovery_data); listener = bonobo_listener_new (shared_folder_discovery_listener_callback, discovery_data); |