fixes for new keybindings stuff/chroot/parsing
This commit is contained in:
parent
b6d2529acb
commit
8c68c9ab0f
4 changed files with 28 additions and 14 deletions
|
@ -892,6 +892,11 @@ ActionString actionstrings[] =
|
|||
action_growtoedge,
|
||||
setup_action_growtoedge_east
|
||||
},
|
||||
{
|
||||
"breakchroot",
|
||||
action_break_chroot,
|
||||
NULL
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -1899,3 +1904,9 @@ void action_unshow_desktop(union ActionData *data)
|
|||
{
|
||||
screen_show_desktop(FALSE);
|
||||
}
|
||||
|
||||
void action_break_chroot(union ActionData *data)
|
||||
{
|
||||
/* break out of one chroot */
|
||||
keyboard_reset_chains(1);
|
||||
}
|
||||
|
|
|
@ -341,5 +341,7 @@ void action_toggle_show_desktop(union ActionData *data);
|
|||
void action_show_desktop(union ActionData *data);
|
||||
/* Any */
|
||||
void action_unshow_desktop(union ActionData *data);
|
||||
/* Any */
|
||||
void action_break_chroot(union ActionData *data);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -278,6 +278,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
|||
|
||||
if (!parse_attr_string("key", node, &key))
|
||||
return;
|
||||
|
||||
parse_attr_bool("chroot", node, &is_chroot);
|
||||
|
||||
keylist = g_list_append(keylist, key);
|
||||
|
@ -304,9 +305,6 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
|||
|
||||
g_free(key);
|
||||
keylist = g_list_delete_link(keylist, g_list_last(keylist));
|
||||
|
||||
/* go to next sibling */
|
||||
if (node->next) parse_key(i, doc, node->next, keylist);
|
||||
}
|
||||
|
||||
static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
||||
|
@ -325,7 +323,10 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
|
|||
}
|
||||
|
||||
if ((n = parse_find_node("keybind", node->children)))
|
||||
while (n) {
|
||||
parse_key(i, doc, n, NULL);
|
||||
n = parse_find_node("keybind", n->next);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -133,16 +133,16 @@ KeyBindingTree *tree_find(KeyBindingTree *search, gboolean *conflict)
|
|||
|
||||
gboolean tree_chroot(KeyBindingTree *tree, GList *keylist)
|
||||
{
|
||||
if (keylist == NULL) {
|
||||
tree->chroot = TRUE;
|
||||
return TRUE;
|
||||
} else {
|
||||
guint key, state;
|
||||
if (translate_key(keylist->data, &state, &key)) {
|
||||
while (tree != NULL && !(tree->state == state && tree->key == key))
|
||||
tree = tree->next_sibling;
|
||||
if (tree != NULL)
|
||||
return tree_chroot(tree, keylist->next);
|
||||
if (tree != NULL) {
|
||||
if (keylist->next == NULL) {
|
||||
tree->chroot = TRUE;
|
||||
return TRUE;
|
||||
} else
|
||||
return tree_chroot(tree->first_child, keylist->next);
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
|
|
Loading…
Reference in a new issue