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
1 files changed,
9 insertions(+),
3 deletions(-)
jump to
M
openbox/keytree.c
→
openbox/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)) {