keyboard.c for the Openbox window manager
Copyright (c) 2006 Mikael Magnusson
- Copyright (c) 2003 Ben Jansens
+ Copyright (c) 2003-2007 Dana Jansens
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "keyboard.h"
#include "translate.h"
#include "moveresize.h"
+#include "gettext.h"
#include <glib.h>
}
}
-void keyboard_grab_for_client(ObClient *c, gboolean grab)
-{
- grab_for_window(c->window, grab);
-}
-
static void grab_keys(gboolean grab)
{
GList *it;
grab_for_window(screen_support_win, grab);
- for (it = client_list; it; it = g_list_next(it))
- grab_for_window(((ObClient*)it->data)->window, grab);
+ grab_for_window(RootWindow(ob_display, ob_screen), grab);
}
static gboolean chain_timeout(gpointer data)
t = tree;
if (conflict) {
- g_warning("conflict with binding");
+ g_message(_("Conflict with key binding in config file"));
tree_destroy(tree);
return FALSE;
}
g_assert(action->data.any.interactive);
if (!interactive_states) {
- if (!grab_keyboard(TRUE))
- return FALSE;
- if (!grab_pointer(TRUE, OB_CURSOR_NONE)) {
- grab_keyboard(FALSE);
+ grab_pointer(TRUE, FALSE, OB_CURSOR_POINTER);
+ if (!grab_keyboard(TRUE)) {
+ grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
return FALSE;
}
}
if (!interactive_states) {
grab_keyboard(FALSE);
- grab_pointer(FALSE, OB_CURSOR_NONE);
+ grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
keyboard_reset_chains();
}
}
done = TRUE;
else */if (e->xkey.keycode == ob_keycode(OB_KEY_ESCAPE))
cancel = done = TRUE;
- }
+ } else if (e->type == ButtonPress)
+ cancel = done = TRUE;
+
if (done) {
keyboard_interactive_end(s, e->xkey.state, cancel, e->xkey.time);
ob_main_loop_timeout_remove(ob_main_loop, chain_timeout);
/* 5 second timeout for chains */
ob_main_loop_timeout_add(ob_main_loop, 5 * G_USEC_PER_SEC,
- chain_timeout, NULL, NULL);
+ chain_timeout, NULL,
+ g_direct_equal, NULL);
grab_keys(FALSE);
curpos = p;
grab_keys(TRUE);