From c49c2a8e408f7482f2b977d6cf97517684476ed7 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 21 Feb 2008 13:00:11 -0500 Subject: [PATCH] If multiple key bindings at the same level are not able to be translated, then don't have them conflict and end up removing untranslated bindings from the key tree. This way they can be re-translated later. This fixes keybindings getting lost when VMWare grabs the keyboard/pointer --- openbox/keytree.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/openbox/keytree.c b/openbox/keytree.c index 56cc96d4..ca64385a 100644 --- a/openbox/keytree.c +++ b/openbox/keytree.c @@ -81,7 +81,8 @@ void tree_assimilate(KeyBindingTree *node) b = node; while (a) { last = a; - if (!(a->state == b->state && a->key == b->key)) { + /* check b->key != 0 for key bindings that didn't get translated */ + if (!(a->state == b->state && a->key == b->key && b->key != 0)) { a = a->next_sibling; } else { tmp = b; @@ -90,7 +91,9 @@ void tree_assimilate(KeyBindingTree *node) a = a->first_child; } } - if (!(last->state == b->state && last->key == b->key)) { + /* check b->key != 0, and save key bindings that didn't get translated + as siblings here */ + if (!(last->state == b->state && last->key == b->key && b->key != 0)) { last->next_sibling = b; b->parent = last->parent; } else { @@ -110,7 +113,10 @@ KeyBindingTree *tree_find(KeyBindingTree *search, gboolean *conflict) a = keyboard_firstnode; b = search; while (a && b) { - if (!(a->state == b->state && a->key == b->key)) { + /* check b->key != 0 for key bindings that didn't get translated, and + don't make them conflict with anything else so that they can all + live together in peace and harmony */ + if (!(a->state == b->state && a->key == b->key && b->key != 0)) { a = a->next_sibling; } else { if ((a->first_child == NULL) == (b->first_child == NULL)) { -- 2.45.2