From: Dana Jansens Date: Thu, 21 Feb 2008 18:00:11 +0000 (-0500) Subject: If multiple key bindings at the same level are not able to be translated, then don... X-Git-Tag: release-3.4.7-pre1~9^2 X-Git-Url: http://git.openbox.org/?p=mikachu%2Fopenbox.git;a=commitdiff_plain;h=c49c2a8e408f7482f2b977d6cf97517684476ed7;ds=sidebyside 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 --- diff --git a/openbox/keytree.c b/openbox/keytree.c index 56cc96d..ca64385 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)) {