> >> case NSEventTypeKeyUp: > >> keycode = cocoa_keycode_to_qemu([event keyCode]); > >> > >> + if (are_sets_equal(ungrab_set, key_set)) { > >> + [self ungrabMouse]; > >> + clear_set(key_set); > >> + return; > >> + } > >> + send_key_if_delayed(key_set, keycode); > >> + remove_number(key_set, keycode); > > > > This doesn't maintain the event ordering. > > I need more clearifiction. > > If the ungrab keys are 1-2-3, and the user does this: > down: 2 > down: 3 > down: 4 > > The only input that is sent to the guest is the 4. The 2 and 3 are > forgotten about. You want the 2 and the 3 sent to the guest in the > order they were pushed?
Yes. > Is there another condition that needs work. Well, basically if the key combination pressed isn't a hotkey all key events should be sent as-is to the guest. No events dropped, no events reordered. You can't use a set for this, because you don't know the event order then. With ungrab key 1-2-3 and this event sequence ... down: 1 down: 2 up: 2 up: 1 ... your send_key_if_delayed() logic sends this to the guest: down: 2 up: 2 down: 1 up: 1 cheers, Gerd