static void set_curpos(KeyBindingTree *newpos)
{
- grab_keys(FALSE);
- curpos = newpos;
- grab_keys(TRUE);
+ if (curpos != newpos) {
+ grab_keys(FALSE);
+ curpos = newpos;
+ grab_keys(TRUE);
+ }
if (curpos != NULL) {
gchar *text = NULL;
g_assert(istate.active);
+ /* ungrab first so they won't be NotifyWhileGrabbed */
+ if (ungrab)
+ grab_keyboard(FALSE);
+
alist = g_slist_append(NULL, istate.action);
action_run_interactive(alist, istate.client, state, time, cancel, TRUE);
g_slist_free(alist);
istate.active = FALSE;
-
- if (ungrab)
- grab_keyboard(FALSE);
}
static void keyboard_interactive_end_client(ObClient *client, gpointer data)
handled = TRUE;
}
} else if (e->type == ButtonPress) {
- cancel = FALSE;
+ cancel = TRUE;
done = TRUE;
handled = FALSE;
}