summaryrefslogtreecommitdiff
path: root/src/sensors/cd-sensor-dummy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sensors/cd-sensor-dummy.c')
-rw-r--r--src/sensors/cd-sensor-dummy.c151
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