From 74301da8e7bbce31395871927fe8afd6e08bbfd9 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 8 Aug 2010 19:18:46 +0100 Subject: [PATCH] animator: Improve the key value copy Use the same code used elsewhere in Clutter when dealing with values that can be copied or transformed. --- clutter/clutter-animator.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/clutter/clutter-animator.c b/clutter/clutter-animator.c index f7c4403..513af5f 100644 --- a/clutter/clutter-animator.c +++ b/clutter/clutter-animator.c @@ -2115,23 +2115,38 @@ gboolean clutter_animator_key_get_value (const ClutterAnimatorKey *key, GValue *value) { - GType gtype; - g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + g_return_val_if_fail (G_VALUE_TYPE (value) != G_TYPE_INVALID, FALSE); - gtype = G_VALUE_TYPE (&key->value); - - if (g_value_type_compatible (gtype, G_VALUE_TYPE (value))) + if (!g_type_is_a (G_VALUE_TYPE (&key->value), G_VALUE_TYPE (value))) { - g_value_copy (&key->value, value); - return TRUE; - } + if (g_value_type_compatible (G_VALUE_TYPE (&key->value), + G_VALUE_TYPE (value))) + { + g_value_copy (&key->value, value); + return TRUE; + } - if (g_value_type_transformable (gtype, G_VALUE_TYPE (value))) - { - if (g_value_transform (&key->value, value)) - return TRUE; + if (g_value_type_transformable (G_VALUE_TYPE (&key->value), + G_VALUE_TYPE (value))) + { + if (g_value_transform (&key->value, value)) + return TRUE; + } + + g_warning ("%s: Unable to convert from %s to %s for the " + "property '%s' of object %s in the animator key", + G_STRLOC, + g_type_name (G_VALUE_TYPE (&key->value)), + g_type_name (G_VALUE_TYPE (value)), + key->property_name, + G_OBJECT_TYPE_NAME (key->object)); + + return FALSE; } + else + g_value_copy (&key->value, value); - return FALSE; + return TRUE; } -- 2.7.4