diff options
Diffstat (limited to 'src/sensors/cd-sensor-dummy.c')
-rw-r--r-- | src/sensors/cd-sensor-dummy.c | 151 |
1 files changed, 44 insertions, 107 deletions
diff --git a/src/sensors/cd-sensor-dummy.c b/src/sensors/cd-sensor-dummy.c index a079f9a..b322e22 100644 --- a/src/sensors/cd-sensor-dummy.c +++ b/src/sensors/cd-sensor-dummy.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * - * Copyright (C) 2010-2011 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2010-2015 Richard Hughes <richard@hughsie.com> * * Licensed under the GNU General Public License Version 2 * @@ -51,71 +51,46 @@ cd_sensor_dummy_get_private (CdSensor *sensor) return g_object_get_data (G_OBJECT (sensor), "priv"); } -static void -cd_sensor_get_sample_state_finish (CdSensorAsyncState *state, - const GError *error) -{ - if (state->ret) { - g_simple_async_result_set_op_res_gpointer (state->res, - state->sample, - (GDestroyNotify) cd_color_xyz_free); - } else { - g_simple_async_result_set_from_error (state->res, error); - } - - /* set state */ - cd_sensor_set_state (state->sensor, CD_SENSOR_STATE_IDLE); - - /* complete */ - g_simple_async_result_complete_in_idle (state->res); - - g_object_unref (state->res); - g_object_unref (state->sensor); - g_slice_free (CdSensorAsyncState, state); -} - static gboolean -cd_sensor_get_ambient_wait_cb (CdSensorAsyncState *state) +cd_sensor_get_ambient_wait_cb (GTask *task) { - state->ret = TRUE; - state->sample = cd_color_xyz_new (); - state->sample->X = 7.7f; - state->sample->Y = CD_SENSOR_NO_VALUE; - state->sample->Z = CD_SENSOR_NO_VALUE; + CdColorXYZ *sample = NULL; + + sample = cd_color_xyz_new (); + sample->X = 7.7f; + sample->Y = CD_SENSOR_NO_VALUE; + sample->Z = CD_SENSOR_NO_VALUE; + g_task_return_pointer (task, sample, (GDestroyNotify) cd_color_xyz_free); - /* just return without a problem */ - cd_sensor_get_sample_state_finish (state, NULL); return G_SOURCE_REMOVE; } static gboolean -cd_sensor_get_sample_wait_cb (CdSensorAsyncState *state) +cd_sensor_get_sample_wait_cb (GTask *task) { - CdSensorDummyPrivate *priv = cd_sensor_dummy_get_private (state->sensor); + CdSensor *sensor = CD_SENSOR (g_task_get_source_object (task)); + CdSensorDummyPrivate *priv = cd_sensor_dummy_get_private (sensor); + CdColorXYZ *sample = NULL; g_autoptr(GError) error = NULL; /* never setup */ if (priv->transform_fake == NULL) { - g_set_error_literal (&error, - CD_SENSOR_ERROR, - CD_SENSOR_ERROR_NO_SUPPORT, - "no fake transfor set up"); - cd_sensor_get_sample_state_finish (state, error); + g_task_return_new_error (task, + CD_SENSOR_ERROR, + CD_SENSOR_ERROR_NO_SUPPORT, + "no fake transfor set up"); return G_SOURCE_REMOVE; } /* run the sample through the profile */ - state->ret = TRUE; - state->sample = cd_color_xyz_new (); - cmsDoTransform (priv->transform_fake, - &priv->sample_fake, - state->sample, 1); + sample = cd_color_xyz_new (); + cmsDoTransform (priv->transform_fake, &priv->sample_fake, sample, 1); /* emulate */ - cd_sensor_button_pressed (state->sensor); + cd_sensor_button_pressed (sensor); /* just return without a problem */ - cd_sensor_get_sample_state_finish (state, NULL); + g_task_return_pointer (task, sample, (GDestroyNotify) cd_color_xyz_free); return G_SOURCE_REMOVE; } @@ -126,26 +101,20 @@ cd_sensor_get_sample_async (CdSensor *sensor, GAsyncReadyCallback callback, gpointer user_data) { - CdSensorAsyncState *state; + g_autoptr(GTask) task = NULL; g_return_if_fail (CD_IS_SENSOR (sensor)); - /* save state */ - state = g_slice_new0 (CdSensorAsyncState); - state->res = g_simple_async_result_new (G_OBJECT (sensor), - callback, - user_data, - cd_sensor_get_sample_async); - state->sensor = g_object_ref (sensor); + task = g_task_new (sensor, cancellable, callback, user_data); /* set state */ cd_sensor_set_state (sensor, CD_SENSOR_STATE_MEASURING); /* just complete in idle */ if (cap != CD_SENSOR_CAP_AMBIENT) - g_timeout_add_seconds (2, (GSourceFunc) cd_sensor_get_sample_wait_cb, state); + g_timeout_add_seconds (2, (GSourceFunc) cd_sensor_get_sample_wait_cb, task); else - g_timeout_add_seconds (2, (GSourceFunc) cd_sensor_get_ambient_wait_cb, state); + g_timeout_add_seconds (2, (GSourceFunc) cd_sensor_get_ambient_wait_cb, task); } CdColorXYZ * @@ -153,19 +122,8 @@ cd_sensor_get_sample_finish (CdSensor *sensor, GAsyncResult *res, GError **error) { - GSimpleAsyncResult *simple; - - g_return_val_if_fail (CD_IS_SENSOR (sensor), NULL); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), NULL); - g_return_val_if_fail (error == NULL || *error == NULL, NULL); - - /* failed */ - simple = G_SIMPLE_ASYNC_RESULT (res); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - - /* grab detail */ - return cd_color_xyz_dup (g_simple_async_result_get_op_res_gpointer (simple)); + g_return_val_if_fail (g_task_is_valid (res, sensor), FALSE); + return g_task_propagate_pointer (G_TASK (res), error); } gboolean @@ -173,19 +131,8 @@ cd_sensor_set_options_finish (CdSensor *sensor, GAsyncResult *res, GError **error) { - GSimpleAsyncResult *simple; - - g_return_val_if_fail (CD_IS_SENSOR (sensor), FALSE); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - /* failed */ - simple = G_SIMPLE_ASYNC_RESULT (res); - if (g_simple_async_result_propagate_error (simple, error)) - return FALSE; - - /* grab detail */ - return g_simple_async_result_get_op_res_gboolean (simple); + g_return_val_if_fail (g_task_is_valid (res, sensor), FALSE); + return g_task_propagate_boolean (G_TASK (res), error); } void @@ -196,19 +143,15 @@ cd_sensor_set_options_async (CdSensor *sensor, gpointer user_data) { CdSensorDummyPrivate *priv = cd_sensor_dummy_get_private (sensor); - GSimpleAsyncResult *res; GList *l; - gboolean ret = TRUE; const gchar *key_name; GVariant *value; + g_autoptr(GTask) task = NULL; g_autoptr(GList) keys = NULL; g_return_if_fail (CD_IS_SENSOR (sensor)); - res = g_simple_async_result_new (G_OBJECT (sensor), - callback, - user_data, - cd_sensor_set_options_async); + task = g_task_new (sensor, cancellable, callback, user_data); /* look for any keys we recognise */ keys = g_hash_table_get_keys (options); @@ -216,13 +159,12 @@ cd_sensor_set_options_async (CdSensor *sensor, key_name = (const gchar *) l->data; value = g_hash_table_lookup (options, key_name); if (g_strcmp0 (g_variant_get_type_string (value), "d") != 0) { - ret = FALSE; - g_simple_async_result_set_error (res, - CD_SENSOR_ERROR, - CD_SENSOR_ERROR_NO_SUPPORT, - "unexpected type '%s' not supported", - g_variant_get_type_string (value)); - break; + g_task_return_new_error (task, + CD_SENSOR_ERROR, + CD_SENSOR_ERROR_NO_SUPPORT, + "unexpected type '%s' not supported", + g_variant_get_type_string (value)); + return; } if (g_strcmp0 (key_name, "sample[red]") == 0) { priv->sample_fake.R = g_variant_get_double (value); @@ -231,22 +173,17 @@ cd_sensor_set_options_async (CdSensor *sensor, } else if (g_strcmp0 (key_name, "sample[blue]") == 0) { priv->sample_fake.B = g_variant_get_double (value); } else { - ret = FALSE; - g_simple_async_result_set_error (res, - CD_SENSOR_ERROR, - CD_SENSOR_ERROR_NO_SUPPORT, - "option '%s' is not supported", - key_name); - break; + g_task_return_new_error (task, + CD_SENSOR_ERROR, + CD_SENSOR_ERROR_NO_SUPPORT, + "option '%s' is not supported", + key_name); + return; } } /* success */ - if (ret) - g_simple_async_result_set_op_res_gboolean (res, TRUE); - - /* complete */ - g_simple_async_result_complete_in_idle (res); + g_task_return_boolean (task, TRUE); } static void |