[libsecret] Proper async behavior for seahorse_collection_delete ()
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsecret] Proper async behavior for seahorse_collection_delete ()
- Date: Wed, 27 Jun 2012 14:44:32 +0000 (UTC)
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]