menu_clear_entries(menu);
- for (desktop = 0; desktop < screen_num_desktops; desktop++) {
+ for (desktop_it = 0; desktop_it < screen_num_desktops; desktop_it++) {
gboolean empty = TRUE;
gboolean onlyiconic = TRUE;
+ gboolean noicons = TRUE;
+
+ desktop = desktop_it;
+ if (desktop == 0)
+ desktop = screen_desktop;
+ else if (desktop <= screen_desktop)
+ desktop -= 1;
menu_add_separator(menu, SEPARATOR, screen_desktop_names[desktop]);
for (it = focus_order; it; it = g_list_next(it)) {
static void parse_key(xmlNodePtr node, GList *keylist)
{
- gchar *key;
+ gchar *keystring, **keys, **key;
xmlNodePtr n;
gboolean is_chroot = FALSE;
+ gboolean grab = TRUE;
- if (!obt_xml_attr_string(node, "key", &key))
+ if (!obt_xml_attr_string(node, "key", &keystring))
return;
obt_xml_attr_bool(node, "chroot", &is_chroot);
+ obt_xml_attr_bool(node, "grab", &grab);
- keylist = g_list_append(keylist, key);
+ keys = g_strsplit(keystring, " ", 0);
+ for (key = keys; *key; ++key) {
+ keylist = g_list_append(keylist, *key);
- if ((n = obt_xml_find_node(node->children, "keybind"))) {
- while (n) {
- parse_key(n, keylist);
- n = obt_xml_find_node(n->next, "keybind");
+ if ((n = obt_xml_find_node(node->children, "keybind"))) {
+ while (n) {
+ parse_key(n, keylist);
+ n = obt_xml_find_node(n->next, "keybind");
+ }
}
- }
- else if ((n = obt_xml_find_node(node->children, "action"))) {
- while (n) {
- ObActionsAct *action;
-
- action = actions_parse(n);
- if (action)
- keyboard_bind(keylist, action, grab);
- n = obt_xml_find_node(n->next, "action");
+ else if ((n = obt_xml_find_node(node->children, "action"))) {
+ while (n) {
+ ObActionsAct *action;
+
+ action = actions_parse(n);
+ if (action)
- keyboard_bind(keylist, action);
++ keyboard_bind(keylist, action, grab);
+ n = obt_xml_find_node(n->next, "action");
+ }
}
- }
- if (is_chroot)
- keyboard_chroot(keylist);
- g_free(key);
- keylist = g_list_delete_link(keylist, g_list_last(keylist));
+ if (is_chroot)
+ keyboard_chroot(keylist);
+ keylist = g_list_delete_link(keylist, g_list_last(keylist));
+ }
+
+ g_strfreev(keys);
+ g_free(keystring);
}
static void parse_keyboard(xmlNodePtr node, gpointer d)
if (prompt && !used)
used = event_handle_prompt(prompt, e);
- if (e->type == ButtonPress) {
+ if (e->type == ButtonPress)
pressed = e->xbutton.button;
- pressed_win = e->xbutton.subwindow;
- }
++
+ /* We ignored the release event so make sure we don't think
+ the button is still pressed */
+ else if (e->type == ButtonRelease)
+ button = 0;
}
}
else if (e->type == KeyPress || e->type == KeyRelease ||
gboolean mouse_event(ObClient *client, XEvent *e)
{
static Time ltime;
- static guint button = 0, state = 0, lbutton = 0;
+ static guint state = 0, lbutton = 0;
static Window lwindow = None;
- static gint px, py, pwx = -1, pwy = -1;
+ static gint px, py, pwx = -1, pwy = -1, lx = -10, ly = -10;
gboolean used = FALSE;
ObFrameContext context;