all repos — openbox @ 3ff416203439afb00b66b04f473669eab1f425e4

openbox fork - make it a bit more like ryudo

Parse multiple keys in one keybind
Dana Jansens danakj@orodu.net
commit

3ff416203439afb00b66b04f473669eab1f425e4

parent

36a437a70291c94b4c591df0cd99345f052a3e0c

1 files changed, 25 insertions(+), 20 deletions(-)

jump to
M openbox/config.copenbox/config.c

@@ -389,39 +389,44 @@ */

static void parse_key(xmlNodePtr node, GList *keylist) { - gchar *key; + gchar *keystring, **keys, **key; xmlNodePtr n; gboolean is_chroot = FALSE; - 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); - 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; + else if ((n = obt_xml_find_node(node->children, "action"))) { + while (n) { + ObActionsAct *action; - action = actions_parse(n); - if (action) - keyboard_bind(keylist, action); - n = obt_xml_find_node(n->next, "action"); + action = actions_parse(n); + if (action) + keyboard_bind(keylist, action); + n = obt_xml_find_node(n->next, "action"); + } } - } - if (is_chroot) - keyboard_chroot(keylist); + + if (is_chroot) + keyboard_chroot(keylist); + keylist = g_list_delete_link(keylist, g_list_last(keylist)); + } - g_free(key); - keylist = g_list_delete_link(keylist, g_list_last(keylist)); + g_strfreev(keys); + g_free(keystring); } static void parse_keyboard(xmlNodePtr node, gpointer d)