state: Return a boolean when getting the key value

Since the copy might fail, we should return a boolean value and not just
warn on the console - similarly to what ClutterAnimator does.
This commit is contained in:
Emmanuele Bassi 2010-08-08 19:17:14 +01:00
parent 786285a245
commit 1ca0c2a6d1
2 changed files with 19 additions and 9 deletions

View File

@ -1403,20 +1403,26 @@ clutter_state_key_get_mode (const ClutterStateKey *state_key)
* @state_key: a #ClutterStateKey
* @value: a #GValue initialized with the correct type for the @state_key
*
* Copies of the value for a #ClutterStateKey into @value
* Retrieves a copy of the value for a #ClutterStateKey.
*
* The #GValue needs to be already initialized for the value type
* of the property or to a transformable type
* of the property or to a type that allow transformation from the value
* type of the key.
*
* Use g_value_unset() when done.
*
* Return value: %TRUE if the value was successfully retrieved,
* and %FALSE otherwise
*
* Since: 1.4
*/
void
gboolean
clutter_state_key_get_value (const ClutterStateKey *state_key,
GValue *value)
{
g_return_if_fail (state_key != NULL);
g_return_if_fail (value != NULL);
g_return_if_fail (G_VALUE_TYPE (value) != G_TYPE_INVALID);
g_return_val_if_fail (state_key != NULL, FALSE);
g_return_val_if_fail (value != NULL, FALSE);
g_return_val_if_fail (G_VALUE_TYPE (value) != G_TYPE_INVALID, FALSE);
if (!g_type_is_a (G_VALUE_TYPE (&state_key->value), G_VALUE_TYPE (value)))
{
@ -1424,14 +1430,14 @@ clutter_state_key_get_value (const ClutterStateKey *state_key,
G_VALUE_TYPE (value)))
{
g_value_copy (&state_key->value, value);
return;
return TRUE;
}
if (g_value_type_transformable (G_VALUE_TYPE (&state_key->value),
G_VALUE_TYPE (value)))
{
if (g_value_transform (&state_key->value, value))
return;
return TRUE;
}
g_warning ("%s: Unable to convert from %s to %s for the "
@ -1441,9 +1447,13 @@ clutter_state_key_get_value (const ClutterStateKey *state_key,
g_type_name (G_VALUE_TYPE (value)),
state_key->property_name,
G_OBJECT_TYPE_NAME (state_key->object));
return FALSE;
}
else
g_value_copy (&state_key->value, value);
return TRUE;
}
/**

View File

@ -147,7 +147,7 @@ GType clutter_state_key_get_type (void) G_GNUC_CONS
gdouble clutter_state_key_get_pre_delay (const ClutterStateKey *state_key);
gdouble clutter_state_key_get_post_delay (const ClutterStateKey *state_key);
gulong clutter_state_key_get_mode (const ClutterStateKey *state_key);
void clutter_state_key_get_value (const ClutterStateKey *state_key,
gboolean clutter_state_key_get_value (const ClutterStateKey *state_key,
GValue *value);
GType clutter_state_key_get_property_type (const ClutterStateKey *key);
GObject * clutter_state_key_get_object (const ClutterStateKey *state_key);