set the interactive action to NULL before doing its cleanup phase

if the cleanup ends up cancelling the "current interactive action", it would
cause the end function to be called again, which sucks.  for instance if the
cleanup function uses the Focus action. this prevents the unwanted loop
into the interactive action cleanup.
This commit is contained in:
Dana Jansens 2010-05-17 21:58:44 -04:00
parent 9a826d8c3d
commit 53430914f0

View file

@ -383,13 +383,19 @@ static gboolean actions_interactive_begin_act(ObActionsAct *act, guint state)
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);
}
}