summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-09-15 00:49:09 +0200
committerDana Jansens <danakj@orodu.net>2011-01-24 14:19:22 -0500
commit3ff416203439afb00b66b04f473669eab1f425e4 (patch)
tree23fbe00f98290f0d06442a9c8336e5afdf9668be /openbox
parent36a437a70291c94b4c591df0cd99345f052a3e0c (diff)
Parse multiple keys in one keybind
Diffstat (limited to 'openbox')
-rw-r--r--openbox/config.c47
1 files changed, 26 insertions, 21 deletions
diff --git a/openbox/config.c b/openbox/config.c
index 025a6833..27316bbb 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -389,39 +389,44 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d)
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;
-
- action = actions_parse(n);
- if (action)
- keyboard_bind(keylist, action);
- 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);
+ 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)