actions_setup_data(&data, uact, state, x, y, button, con, client);
if (!interactive_act || interactive_act->def != act->def) {
- /* cancel the old one */
- if (interactive_act)
- actions_interactive_cancel_act();
- if (actions_act_is_interactive(act))
+ if (actions_act_is_interactive(act)) {
+ /* cancel the old one */
+ if (interactive_act)
+ actions_interactive_cancel_act();
ok = actions_interactive_begin_act(act, state);
+ }
}
/* fire the action's run function with this data */
if (ok) {
- if (!act->def->run(&data, act->options))
- actions_interactive_end_act();
- else {
+ if (!act->def->run(&data, act->options)) {
+ if (actions_act_is_interactive(act))
+ actions_interactive_end_act();
+ } else {
/* make sure its interactive if it returned TRUE */
g_assert(act->def->i_cancel && act->def->i_input);