summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2008-02-21 13:00:11 -0500
committerDana Jansens <danakj@orodu.net>2008-02-21 13:00:11 -0500
commitc49c2a8e408f7482f2b977d6cf97517684476ed7 (patch)
tree40ce4c54138e4be2b3c90ba819ec7e66a316729d
parent2cb31da22c0a357a2251aabc660e0cc14b215d97 (diff)
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
-rw-r--r--openbox/keytree.c12
1 files 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)) {