aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-corba-storage.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/e-corba-storage.c')
-rw-r--r--shell/e-corba-storage.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/shell/e-corba-storage.c b/shell/e-corba-storage.c
index 8caaac7776..0dd61461df 100644
--- a/shell/e-corba-storage.c
+++ b/shell/e-corba-storage.c
@@ -262,6 +262,8 @@ destroy (GtkObject *object)
g_free (priv);
+ corba_storage->priv = NULL;
+
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
@@ -455,21 +457,44 @@ async_xfer_folder (EStorage *storage,
CORBA_exception_free (&ev);
}
-static void
-async_open_folder (EStorage *storage,
- const char *path)
+static gboolean
+async_open_folder_idle (gpointer data)
{
+ gpointer *pair = data;
+
+ EStorage *storage = pair[0];
+ char *path = pair[1];
+
ECorbaStorage *corba_storage;
- ECorbaStoragePrivate *priv;
CORBA_Environment ev;
corba_storage = E_CORBA_STORAGE (storage);
- priv = corba_storage->priv;
- CORBA_exception_init (&ev);
- GNOME_Evolution_Storage_asyncOpenFolder (priv->storage_interface,
- path, &ev);
- CORBA_exception_free (&ev);
+ if (corba_storage->priv != NULL) {
+
+ CORBA_exception_init (&ev);
+ GNOME_Evolution_Storage_asyncOpenFolder (corba_storage->priv->storage_interface,
+ path, &ev);
+ CORBA_exception_free (&ev);
+ }
+
+ gtk_object_unref (GTK_OBJECT (storage));
+ g_free (path);
+ g_free (pair);
+
+ return FALSE;
+}
+
+static void
+async_open_folder (EStorage *storage,
+ const char *path)
+{
+ gpointer *pair = g_new (gpointer, 2);
+ pair[0] = storage;
+ gtk_object_ref (GTK_OBJECT (storage));
+ pair[1] = g_strdup (path);
+
+ g_idle_add (async_open_folder_idle, pair);
}