X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.c;h=8d523dc8b2f83d01bb5d8269746e5c39a587d1bd;hb=828d06f271392abbef75bb37e2635b2085bdef90;hp=6cd1d1cc8d8af37bee1870e9ef7a032a51e56c75;hpb=5e8ec2cb781ba07341a5970b3e829cc59a8cf332;p=chaz%2Fopenbox diff --git a/openbox/actions.c b/openbox/actions.c index 6cd1d1cc..8d523dc8 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -100,36 +100,48 @@ static void actions_definition_unref(ObActionsDefinition *def) } } -ObActionsAct* actions_parse(ObParseInst *i, - xmlDocPtr doc, - xmlNodePtr node) +ObActionsAct* actions_parse_string(const gchar *name) { GSList *it; - gchar *name; ObActionsDefinition *def; ObActionsAct *act = NULL; - if (!parse_attr_string("name", node, &name)) return NULL; - /* find the requested action */ for (it = registered; it; it = g_slist_next(it)) { def = it->data; if (!g_ascii_strcasecmp(name, def->name)) break; + def = NULL; } /* if we found the action */ - if (it != NULL) { + if (def) { act = g_new(ObActionsAct, 1); act->ref = 1; act->def = def; actions_definition_ref(act->def); - act->options = def->setup(i, doc, node->children); + act->options = NULL; } else g_message(_("Invalid action '%s' requested. No such action exists."), name); - g_free(name); + return act; +} + +ObActionsAct* actions_parse(ObParseInst *i, + xmlDocPtr doc, + xmlNodePtr node) +{ + gchar *name; + ObActionsAct *act = NULL; + + if (parse_attr_string("name", node, &name)) { + if ((act = actions_parse_string(name))) + /* there is more stuff to parse here */ + act->options = act->def->setup(i, doc, node->children); + + g_free(name); + } return act; }