summaryrefslogtreecommitdiff
path: root/openbox/keyboard.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-13 15:29:49 +0000
committerDana Jansens <danakj@orodu.net>2007-05-13 15:29:49 +0000
commit56d7bc50f0da9fe694b20751fa67aaa7e9158967 (patch)
treeee770ebda41fd124383a9fadd73202e49010fbdd /openbox/keyboard.c
parentacfa2af3c2eacd099869cc5aebdcfa1241214e8b (diff)
don't allow focus to move during an interactive grab. if users set up actions
such that this would happen, then kill the interactive grab before moving focus. this is to avoid NotifyWhileGrabbed FocusOut's
Diffstat (limited to 'openbox/keyboard.c')
-rw-r--r--openbox/keyboard.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/openbox/keyboard.c b/openbox/keyboard.c
index 1534e198..5cfd4571 100644
--- a/openbox/keyboard.c
+++ b/openbox/keyboard.c
@@ -199,11 +199,13 @@ static void keyboard_interactive_end(guint state, gboolean cancel, Time time,
if (ungrab)
grab_keyboard(FALSE);
+ /* set this before running the actions so they know the keyboard is not
+ grabbed */
+ istate.active = 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;
}
static void keyboard_interactive_end_client(ObClient *client, gpointer data)
@@ -212,6 +214,12 @@ static void keyboard_interactive_end_client(ObClient *client, gpointer data)
istate.client = NULL;
}
+
+void keyboard_interactive_cancel()
+{
+ keyboard_interactive_end(0, TRUE, event_curtime, TRUE);
+}
+
gboolean keyboard_interactive_grab(guint state, ObClient *client,
ObAction *action)
{
@@ -333,7 +341,7 @@ void keyboard_shutdown(gboolean reconfig)
client_remove_destroy_notify(keyboard_interactive_end_client);
if (istate.active)
- keyboard_interactive_end(0, TRUE, 0, TRUE);
+ keyboard_interactive_cancel();
ob_main_loop_timeout_remove(ob_main_loop, chain_timeout);