diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-11-26 15:19:28 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-12-01 21:22:41 +0000 |
commit | 8d3a5d9b0f76e3f965ce2b845f6e9027fd98fd30 (patch) | |
tree | 0d914973077d7b72ff2b00bea00bf3f496022ff2 /ui | |
parent | e3d58827fe4efa8d40a78359350a185e238514e0 (diff) | |
download | qemu-8d3a5d9b0f76e3f965ce2b845f6e9027fd98fd30.tar.gz qemu-8d3a5d9b0f76e3f965ce2b845f6e9027fd98fd30.tar.bz2 qemu-8d3a5d9b0f76e3f965ce2b845f6e9027fd98fd30.zip |
ui/cocoa.m: Prevent activation clicks from going to guest
When QEMU is brought to the foreground, the click event that activates QEMU
should not go to the guest. Accidents happen when they do go to the guest
without giving the user a chance to handle them. In particular, if the
guest input device is not an absolute-position one then the location of
the guest cursor (and thus the click) will likely not be the location of
the host cursor when it is clicked, and could be completely obscured
below another window. Don't send mouse clicks to QEMU unless the
window either has focus or has grabbed mouse events.
Reported-by: John Arbuckle <programmingkidx@gmail.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: John Arbuckle <programmingkidx@gmail.com>
Message-id: 1448551168-13196-1-git-send-email-peter.maydell@linaro.org
Diffstat (limited to 'ui')
-rw-r--r-- | ui/cocoa.m | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ui/cocoa.m b/ui/cocoa.m index 1554331554..d76b942732 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -724,7 +724,15 @@ QemuCocoaView *cocoaView; } if (mouse_event) { - if (last_buttons != buttons) { + /* Don't send button events to the guest unless we've got a + * mouse grab or window focus. If we have neither then this event + * is the user clicking on the background window to activate and + * bring us to the front, which will be done by the sendEvent + * call below. We definitely don't want to pass that click through + * to the guest. + */ + if ((isMouseGrabbed || [[self window] isKeyWindow]) && + (last_buttons != buttons)) { static uint32_t bmap[INPUT_BUTTON_MAX] = { [INPUT_BUTTON_LEFT] = MOUSE_EVENT_LBUTTON, [INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON, |