summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@gnome.org>2013-11-19 19:20:02 +0100
committerMatthias Clasen <mclasen@redhat.com>2013-12-18 21:27:28 -0500
commitf1f8fb67a4ae2a3fe2759668f9451fb79fca48f8 (patch)
treef0353367af41ccba7089fcc7d2a5aadd51f102d7
parentcd64cd3410f657d94608e78aeb6f211d0436cae9 (diff)
downloadgdk-pixbuf-f1f8fb67a4ae2a3fe2759668f9451fb79fca48f8.tar.gz
Port gdk_pixbuf_save_to_stream_async to GTask
https://bugzilla.gnome.org/show_bug.cgi?id=712704
-rw-r--r--gdk-pixbuf/gdk-pixbuf-io.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/gdk-pixbuf/gdk-pixbuf-io.c b/gdk-pixbuf/gdk-pixbuf-io.c
index f0cb99d9a..3d9739d38 100644
--- a/gdk-pixbuf/gdk-pixbuf-io.c
+++ b/gdk-pixbuf/gdk-pixbuf-io.c
@@ -2824,16 +2824,15 @@ save_to_stream_async_data_free (SaveToStreamAsyncData *data)
}
static void
-save_to_stream_thread (GSimpleAsyncResult *result,
- GdkPixbuf *pixbuf,
- GCancellable *cancellable)
+save_to_stream_thread (GTask *task,
+ GdkPixbuf *pixbuf,
+ SaveToStreamAsyncData *data,
+ GCancellable *cancellable)
{
- SaveToStreamAsyncData *data;
SaveToStreamData sync_data;
gboolean retval;
GError *error = NULL;
- data = g_simple_async_result_get_op_res_gpointer (result);
sync_data.stream = data->stream;
sync_data.cancellable = cancellable;
@@ -2842,11 +2841,10 @@ save_to_stream_thread (GSimpleAsyncResult *result,
data->keys, data->values,
&error);
- /* Set the new pixbuf as the result, or error out */
if (retval == FALSE) {
- g_simple_async_result_take_error (result, error);
+ g_task_return_error (task, error);
} else {
- g_simple_async_result_set_op_res_gboolean (result, TRUE);
+ g_task_return_boolean (task, TRUE);
}
}
@@ -2879,7 +2877,7 @@ gdk_pixbuf_save_to_stream_async (GdkPixbuf *pixbuf,
gpointer user_data,
...)
{
- GSimpleAsyncResult *result;
+ GTask *task;
gchar **keys = NULL;
gchar **values = NULL;
va_list args;
@@ -2901,10 +2899,11 @@ gdk_pixbuf_save_to_stream_async (GdkPixbuf *pixbuf,
data->keys = keys;
data->values = values;
- result = g_simple_async_result_new (G_OBJECT (pixbuf), callback, user_data, gdk_pixbuf_save_to_stream_async);
- g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) save_to_stream_async_data_free);
- g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) save_to_stream_thread, G_PRIORITY_DEFAULT, cancellable);
- g_object_unref (result);
+ task = g_task_new (pixbuf, cancellable, callback, user_data);
+ g_task_set_source_tag (task, gdk_pixbuf_save_to_stream_async);
+ g_task_set_task_data (task, data, (GDestroyNotify) save_to_stream_async_data_free);
+ g_task_run_in_thread (task, (GTaskThreadFunc) save_to_stream_thread);
+ g_object_unref (task);
}
/**
@@ -2923,16 +2922,19 @@ gboolean
gdk_pixbuf_save_to_stream_finish (GAsyncResult *async_result,
GError **error)
{
- GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
+ GTask *task;
- g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), FALSE);
- g_return_val_if_fail (!error || (error && !*error), FALSE);
- g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdk_pixbuf_save_to_stream_async);
+ /* Can not use g_task_is_valid because our GTask has a
+ * source_object which is not available to us anymore.
+ */
+ g_return_val_if_fail (G_IS_TASK (async_result), NULL);
- if (g_simple_async_result_propagate_error (result, error))
- return FALSE;
+ task = G_TASK (async_result);
+
+ g_return_val_if_fail (!error || (error && !*error), FALSE);
+ g_warn_if_fail (g_task_get_source_tag (task) == gdk_pixbuf_save_to_stream_async);
- return g_simple_async_result_get_op_res_gboolean (result);
+ return g_task_propagate_boolean (task, error);
}
/**