return NULL;
}
- def = g_new(ObActionsDefinition, 1);
+ def = g_slice_new(ObActionsDefinition);
def->ref = 1;
def->name = g_strdup(name);
def->free = free;
def->run = run;
+ def->shutdown = NULL;
registered = g_slist_prepend(registered, def);
return def;
{
if (def && --def->ref == 0) {
g_free(def->name);
- g_free(def);
+ g_slice_free(ObActionsDefinition, def);
}
}
/* if we found the action */
if (def) {
- act = g_new(ObActionsAct, 1);
+ act = g_slice_new(ObActionsAct);
act->ref = 1;
act->def = def;
actions_definition_ref(act->def);
act->def->free(act->options);
/* unref the definition */
actions_definition_unref(act->def);
- g_free(act);
+ g_slice_free(ObActionsAct, act);
}
}
interactive_act = act;
actions_act_ref(interactive_act);
- interactive_initial_state = state;
+ interactive_initial_state = obt_keyboard_only_modmasks(state);
/* if using focus_delay, stop the timer now so that focus doesn't go
moving on us, which would kill the action */
static void actions_interactive_end_act(void)
{
if (interactive_act) {
+ ObActionsAct *ia = interactive_act;
+
+ /* set this to NULL first so the i_post() function can't cause this to
+ get called again (if it decides it wants to cancel any ongoing
+ interactive action). */
+ interactive_act = NULL;
+
ungrab_keyboard();
- if (interactive_act->i_post)
- interactive_act->i_post(interactive_act->options);
+ if (ia->i_post)
+ ia->i_post(ia->options);
- actions_act_unref(interactive_act);
- interactive_act = NULL;
+ actions_act_unref(ia);
}
}