[libsecret] Proper async behavior for seahorse_collection_delete ()



commit 738b11c14c672eae6e9a86a8c9b4e0ba076eb205
Author: Stef Walter <stefw gnome org>
Date:   Wed Jun 27 16:41:13 2012 +0200

    Proper async behavior for seahorse_collection_delete ()
    
     * The async 'source' object was set to a SecretService
       instead of a SecretCollection in the callback

 library/secret-collection.c |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)
---
diff --git a/library/secret-collection.c b/library/secret-collection.c
index 3cea1a6..d762989 100644
--- a/library/secret-collection.c
+++ b/library/secret-collection.c
@@ -1086,6 +1086,20 @@ secret_collection_create_sync (SecretService *service,
 	return collection;
 }
 
+static void
+on_service_delete_path (GObject *source,
+                        GAsyncResult *result,
+                        gpointer user_data)
+{
+	GSimpleAsyncResult *async = G_SIMPLE_ASYNC_RESULT (user_data);
+	GError *error = NULL;
+
+	secret_service_delete_path_finish (SECRET_SERVICE (source), result, &error);
+	if (error != NULL)
+		g_simple_async_result_take_error (async, error);
+	g_simple_async_result_complete (async);
+	g_object_unref (async);
+}
 /**
  * secret_collection_delete:
  * @self: a collection
@@ -1105,14 +1119,21 @@ secret_collection_delete (SecretCollection *self,
                           GAsyncReadyCallback callback,
                           gpointer user_data)
 {
+	GSimpleAsyncResult *async;
 	const gchar *object_path;
 
 	g_return_if_fail (SECRET_IS_COLLECTION (self));
 	g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
 
+	async = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
+	                                   secret_collection_delete);
+
 	object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (self));
 	_secret_service_delete_path (self->pv->service, object_path, FALSE,
-	                             cancellable, callback, user_data);
+	                             cancellable, on_service_delete_path,
+	                             g_object_ref (async));
+
+	g_object_unref (async);
 }
 
 /**
@@ -1132,8 +1153,13 @@ secret_collection_delete_finish (SecretCollection *self,
 {
 	g_return_val_if_fail (SECRET_IS_COLLECTION (self), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
+	                      secret_collection_delete), FALSE);
+
+	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+		return FALSE;
 
-	return secret_service_delete_path_finish (self->pv->service, result, error);
+	return TRUE;
 }
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]