create actions from string in a way that won't crash
This commit is contained in:
parent
4f7a70f9fa
commit
cfb33de8bc
1 changed files with 14 additions and 2 deletions
|
@ -31,6 +31,7 @@ static void actions_definition_ref(ObActionsDefinition *def);
|
||||||
static void actions_definition_unref(ObActionsDefinition *def);
|
static void actions_definition_unref(ObActionsDefinition *def);
|
||||||
static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state);
|
static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state);
|
||||||
static void actions_interactive_end_act();
|
static void actions_interactive_end_act();
|
||||||
|
static ObActionsAct* actions_build_act_from_string(const gchar *name);
|
||||||
|
|
||||||
static ObActionsAct *interactive_act = NULL;
|
static ObActionsAct *interactive_act = NULL;
|
||||||
static guint interactive_initial_state = 0;
|
static guint interactive_initial_state = 0;
|
||||||
|
@ -123,7 +124,7 @@ static void actions_definition_unref(ObActionsDefinition *def)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ObActionsAct* actions_parse_string(const gchar *name)
|
ObActionsAct* actions_build_act_from_string(const gchar *name)
|
||||||
{
|
{
|
||||||
GSList *it;
|
GSList *it;
|
||||||
ObActionsDefinition *def = NULL;
|
ObActionsDefinition *def = NULL;
|
||||||
|
@ -151,6 +152,17 @@ ObActionsAct* actions_parse_string(const gchar *name)
|
||||||
return act;
|
return act;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ObActionsAct* actions_parse_string(const gchar *name)
|
||||||
|
{
|
||||||
|
ObActionsAct *act = NULL;
|
||||||
|
|
||||||
|
if ((act = actions_build_act_from_string(name)))
|
||||||
|
if (act->def->setup)
|
||||||
|
act->options = act->def->setup(NULL, NULL, NULL);
|
||||||
|
|
||||||
|
return act;
|
||||||
|
}
|
||||||
|
|
||||||
ObActionsAct* actions_parse(ObParseInst *i,
|
ObActionsAct* actions_parse(ObParseInst *i,
|
||||||
xmlDocPtr doc,
|
xmlDocPtr doc,
|
||||||
xmlNodePtr node)
|
xmlNodePtr node)
|
||||||
|
@ -159,7 +171,7 @@ ObActionsAct* actions_parse(ObParseInst *i,
|
||||||
ObActionsAct *act = NULL;
|
ObActionsAct *act = NULL;
|
||||||
|
|
||||||
if (parse_attr_string("name", node, &name)) {
|
if (parse_attr_string("name", node, &name)) {
|
||||||
if ((act = actions_parse_string(name)))
|
if ((act = actions_build_act_from_string(name)))
|
||||||
/* there is more stuff to parse here */
|
/* there is more stuff to parse here */
|
||||||
if (act->def->setup)
|
if (act->def->setup)
|
||||||
act->options = act->def->setup(i, doc, node->xmlChildrenNode);
|
act->options = act->def->setup(i, doc, node->xmlChildrenNode);
|
||||||
|
|
Loading…
Reference in a new issue