all repos — openbox @ c49c2a8e408f7482f2b977d6cf97517684476ed7

openbox fork - make it a bit more like ryudo

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
Dana Jansens danakj@orodu.net
commit

c49c2a8e408f7482f2b977d6cf97517684476ed7

parent

2cb31da22c0a357a2251aabc660e0cc14b215d97

1 files changed, 9 insertions(+), 3 deletions(-)

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

@@ -81,7 +81,8 @@ last = a;

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 @@ g_free(tmp);

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 @@

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)) {