GSList *it;
ObActionsDefinition *def;
+ g_assert(run != NULL);
+ g_assert((i_input == NULL) == (i_cancel == NULL));
+
for (it = registered; it; it = g_slist_next(it)) {
def = it->data;
if (!g_ascii_strcasecmp(name, def->name)) /* already registered */
return FALSE;
}
- g_assert((i_input == NULL) == (i_cancel == NULL));
-
def = g_new(ObActionsDefinition, 1);
def->ref = 1;
def->name = g_strdup(name);
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->xmlChildrenNode);
+ if (act->def->setup)
+ act->options = act->def->setup(i, doc, node->xmlChildrenNode);
g_free(name);
}
{
if (act && --act->ref == 0) {
/* free the action specific options */
- act->def->free(act->options);
+ if (act->def->free)
+ act->def->free(act->options);
/* unref the definition */
actions_definition_unref(act->def);
g_free(act);
static void actions_setup_data(ObActionsData *data,
ObUserAction uact,
- Time time,
guint state,
gint x,
gint y,
struct _ObClient *client)
{
data->uact = uact;
- data->time = time;
data->state = state;
data->x = x;
data->y = y;
void actions_run_acts(GSList *acts,
ObUserAction uact,
- Time time,
guint state,
gint x,
gint y,
ObActionsAct *act = it->data;
gboolean ok = TRUE;
- actions_setup_data(&data, uact, time, state, x, y, con, client);
+ actions_setup_data(&data, uact, state, x, y, con, client);
if (actions_act_is_interactive(act) &&
(!interactive_act || interactive_act->def != act->def))