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
This commit is contained in:
parent
2cb31da22c
commit
c49c2a8e40
1 changed files with 9 additions and 3 deletions
|
@ -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)) {
|
||||
|
|
Loading…
Reference in a new issue