mirror of
https://github.com/qemu/qemu.git
synced 2025-01-19 20:13:27 +08:00
cocoa.m: Fix scroll wheel support
When using a mouse's scroll wheel in a guest with the cocoa front-end, the mouse pointer moves up and down instead of scrolling the window. This patch fixes this problem. Signed-off-by: John Arbuckle <programmingkidx@gmail.com> Message-id: 20180108180707.7976-1-programmingkidx@gmail.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
8e5dc9ba49
commit
ae7313e7fd
27
ui/cocoa.m
27
ui/cocoa.m
@ -786,11 +786,24 @@ QemuCocoaView *cocoaView;
|
||||
mouse_event = true;
|
||||
break;
|
||||
case NSEventTypeScrollWheel:
|
||||
if (isMouseGrabbed) {
|
||||
buttons |= ([event deltaY] < 0) ?
|
||||
MOUSE_EVENT_WHEELUP : MOUSE_EVENT_WHEELDN;
|
||||
}
|
||||
mouse_event = true;
|
||||
/*
|
||||
* Send wheel events to the guest regardless of window focus.
|
||||
* This is in-line with standard Mac OS X UI behaviour.
|
||||
*/
|
||||
|
||||
/* Determine if this is a scroll up or scroll down event */
|
||||
buttons = ([event scrollingDeltaY] > 0) ?
|
||||
INPUT_BUTTON_WHEEL_UP : INPUT_BUTTON_WHEEL_DOWN;
|
||||
qemu_input_queue_btn(dcl->con, buttons, true);
|
||||
qemu_input_event_sync();
|
||||
qemu_input_queue_btn(dcl->con, buttons, false);
|
||||
qemu_input_event_sync();
|
||||
|
||||
/*
|
||||
* Since deltaY also reports scroll wheel events we prevent mouse
|
||||
* movement code from executing.
|
||||
*/
|
||||
mouse_event = false;
|
||||
break;
|
||||
default:
|
||||
[NSApp sendEvent:event];
|
||||
@ -809,9 +822,7 @@ QemuCocoaView *cocoaView;
|
||||
static uint32_t bmap[INPUT_BUTTON__MAX] = {
|
||||
[INPUT_BUTTON_LEFT] = MOUSE_EVENT_LBUTTON,
|
||||
[INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON,
|
||||
[INPUT_BUTTON_RIGHT] = MOUSE_EVENT_RBUTTON,
|
||||
[INPUT_BUTTON_WHEEL_UP] = MOUSE_EVENT_WHEELUP,
|
||||
[INPUT_BUTTON_WHEEL_DOWN] = MOUSE_EVENT_WHEELDN,
|
||||
[INPUT_BUTTON_RIGHT] = MOUSE_EVENT_RBUTTON
|
||||
};
|
||||
qemu_input_update_buttons(dcl->con, bmap, last_buttons, buttons);
|
||||
last_buttons = buttons;
|
||||
|
Loading…
Reference in New Issue
Block a user