diff options
author | Ettore Perazzoli <ettore@src.gnome.org> | 2002-10-18 04:47:06 +0800 |
---|---|---|
committer | Ettore Perazzoli <ettore@src.gnome.org> | 2002-10-18 04:47:06 +0800 |
commit | d91364b0562ad2d80186c8bc5e94a7792989a53d (patch) | |
tree | de24f00a6102a69bce5047e26726942ab87e895f /shell/evolution-test-component.c | |
parent | d4e1fb42e0e1017919ca21b5b59cc84b38f794f7 (diff) | |
download | gsoc2013-evolution-d91364b0562ad2d80186c8bc5e94a7792989a53d.tar.gz gsoc2013-evolution-d91364b0562ad2d80186c8bc5e94a7792989a53d.tar.zst gsoc2013-evolution-d91364b0562ad2d80186c8bc5e94a7792989a53d.zip |
New, implementation for the cancel_discover_shared_folder virtual method.
* e-corba-storage.c (cancel_discover_shared_folder): New,
implementation for the cancel_discover_shared_folder virtual
method.
(class_init): Install.
* evolution-test-component.c
(storage_discover_shared_folder_callback): Instead of passing the
listener to the timeout function, just pass the storage. Put the
listener and the timeout ID on the storage object by using
gtk_object_set_data().
(shared_folder_discovery_timeout_callback): Updated accordingly.
(storage_cancel_discover_shared_folder_callback): New, callback
for the cancel_discover_shared_folder signal.
(setup_custom_storage): Connect.
* e-shell-shared-folder-picker-dialog.c: New member storage in
struct DiscoveryData. While I am at it, rename member user to
user_email_address.
(discover_folder): Set the storage member.
(cleanup_discovery): Unref storage member.
(progress_dialog_clicked_callback): New, callback for the
"clicked" signal on the dialog.
(discover_folder): Connect.
* evolution-storage.c (class_init): Install signal
"cancel_discover_shared_folder".
(impl_Storage_cancelDiscoverSharedFolder): New, implementation for
the cancelDiscoverSharedFolder CORBA method; emit
"cancel_discover_shared_folder".
(evolution_storage_get_epv): Install CORBA method implementation.
* evolution-storage.h: Add signal cancel_discover_shared_folder.
* e-storage.c (e_storage_cancel_discover_shared_folder): New.
* e-storage.h: New virtual method cancel_discover_shared_folder.
* Evolution-Storage.idl (cancelDiscoverSharedFolder): New.
svn path=/trunk/; revision=18386
Diffstat (limited to 'shell/evolution-test-component.c')
-rw-r--r-- | shell/evolution-test-component.c | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c index 18e11e65e7..2ddda0a7ce 100644 --- a/shell/evolution-test-component.c +++ b/shell/evolution-test-component.c @@ -264,12 +264,15 @@ create_new_folder_selector (EvolutionShellComponent *shell_component) static int shared_folder_discovery_timeout_callback (void *data) { + GNOME_Evolution_Storage_FolderResult result; CORBA_Environment ev; Bonobo_Listener listener; CORBA_any any; - GNOME_Evolution_Storage_FolderResult result; + EvolutionStorage *storage; + + storage = EVOLUTION_STORAGE (data); - listener = (Bonobo_Listener) data; + listener = (Bonobo_Listener) gtk_object_get_data (GTK_OBJECT (storage), "listener"); result.result = GNOME_Evolution_Storage_OK; result.path = "/Shared Folders/The Public Folder"; @@ -284,18 +287,22 @@ shared_folder_discovery_timeout_callback (void *data) g_warning ("Cannot report result for shared folder discovery -- %s", BONOBO_EX_ID (&ev)); + Bonobo_Unknown_unref (listener, &ev); CORBA_Object_release (listener, &ev); CORBA_exception_free (&ev); + gtk_object_set_data (GTK_OBJECT (storage), "listener", NULL); + gtk_object_set_data (GTK_OBJECT (storage), "timeout_id", NULL); + return FALSE; } static void storage_discover_shared_folder_callback (EvolutionStorage *storage, + Bonobo_Listener listener, const char *user, const char *folder_name, - Bonobo_Listener listener, void *data) { CORBA_Environment ev; @@ -303,9 +310,42 @@ storage_discover_shared_folder_callback (EvolutionStorage *storage, CORBA_exception_init (&ev); listener_copy = CORBA_Object_duplicate (listener, &ev); + Bonobo_Unknown_ref (listener, &ev); + CORBA_exception_free (&ev); + + g_print ("Listener copy %p\n", listener_copy); + + timeout_id = g_timeout_add (1000, shared_folder_discovery_timeout_callback, storage); + + gtk_object_set_data (GTK_OBJECT (storage), "listener", listener_copy); + gtk_object_set_data (GTK_OBJECT (storage), "timeout_id", GINT_TO_POINTER (timeout_id)); +} + +static void +storage_cancel_discover_shared_folder_callback (EvolutionStorage *storage, + const char *user, + const char *folder_name, + void *data) +{ + Bonobo_Listener listener; + CORBA_Environment ev; + int timeout_id; + + timeout_id = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (storage), "timeout_id")); + if (timeout_id == 0) + return; + + g_source_remove (timeout_id); + gtk_object_set_data (GTK_OBJECT (storage), "timeout_id", NULL); + + listener = (Bonobo_Listener) gtk_object_get_data (GTK_OBJECT (storage), "listener"); + + CORBA_exception_init (&ev); + Bonobo_Unknown_unref (listener, &ev); + CORBA_Object_release (listener, &ev); CORBA_exception_free (&ev); - g_timeout_add (1000, shared_folder_discovery_timeout_callback, listener_copy); + gtk_object_set_data (GTK_OBJECT (storage), "listener", NULL); } static void @@ -328,6 +368,8 @@ setup_custom_storage (EvolutionShellClient *shell_client) gtk_signal_connect (GTK_OBJECT (the_storage), "discover_shared_folder", GTK_SIGNAL_FUNC (storage_discover_shared_folder_callback), shell_client); + gtk_signal_connect (GTK_OBJECT (the_storage), "cancel_discover_shared_folder", + GTK_SIGNAL_FUNC (storage_cancel_discover_shared_folder_callback), shell_client); /* Add some custom "Properties" items. */ evolution_storage_add_property_item (the_storage, "Sharing...", |