+ /* Ungrab the keyboard before running the action.
+
+ If there is an interactive action going on, then cancel it to
+ release the keyboard. If not, then call XUngrabKeyboard().
+
+ We call XUngrabKeyboard because a key press causes a passive
+ grab on the keyboard, and so if program we are executing wants to
+ grab the keyboard, it will fail if the button is still held down
+ (which is likely).
+
+ Use the X function not out own, because we're not considering
+ a grab to be in place at all so our function won't try ungrab
+ anything.
+ */
+ if (keyboard_interactively_grabbed())
+ keyboard_interactive_cancel();
+ else
+ XUngrabKeyboard(ob_display, data->any.time);
+