script: Allow resolving signals states added from code

Currently, defining states for object signals can only be done by
defining a ClutterState inside the ClutterScript definition. We should
allow creating a (named) ClutterState in code, and associating it to a
ClutterScript instance — and have the Script resolve the "state" field
of a signal definition correctly.
This commit is contained in:
Emmanuele Bassi
2011-06-10 17:16:45 +01:00
parent e745ce52e7
commit 29d7c5a297
3 changed files with 125 additions and 55 deletions

View File

@ -592,20 +592,11 @@ parse_signals (ClutterScript *script,
}
}
/* mandatory: "state" */
if (json_object_has_member (object, "state"))
/* mandatory: "target-state" or "handler" */
if (json_object_has_member (object, "target-state"))
{
const gchar *state;
const gchar *target;
state = json_object_get_string_member (object, "state");
if (state == NULL)
{
_clutter_script_warn_invalid_value (script,
"state", "string",
val);
continue;
}
const gchar *state = NULL;
const gchar *target = NULL;
target = json_object_get_string_member (object, "target-state");
if (target == NULL)
@ -616,10 +607,13 @@ parse_signals (ClutterScript *script,
continue;
}
if (json_object_has_member (object, "state"))
state = json_object_get_string_member (object, "state");
CLUTTER_NOTE (SCRIPT,
"Added signal '%s' (state:%s, target:%s)",
name,
state, target);
state != NULL ? state : "<default>", target);
sinfo = g_slice_new0 (SignalInfo);
sinfo->is_handler = FALSE;
@ -627,9 +621,7 @@ parse_signals (ClutterScript *script,
sinfo->state = g_strdup (state);
sinfo->target = g_strdup (target);
}
/* mandatory: "handler" */
if (json_object_has_member (object, "handler"))
else if (json_object_has_member (object, "handler"))
{
const gchar *handler;
const gchar *connect;
@ -676,13 +668,12 @@ parse_signals (ClutterScript *script,
sinfo->object = g_strdup (connect);
sinfo->flags = flags;
}
if (sinfo != NULL)
retval = g_list_prepend (retval, sinfo);
else
_clutter_script_warn_missing_attribute (script,
NULL,
"handler or state");
if (sinfo != NULL)
retval = g_list_prepend (retval, sinfo);
}
return retval;