[Qemu-devel] [PATCH 30/42] input: mouse: switch cocoa ui to new core
Build fixes by Peter Maydell. Signed-off-by: Gerd Hoffmann kra...@redhat.com --- include/ui/console.h | 2 ++ ui/cocoa.m | 63 ++-- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 8543d18..a3062d0 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -14,6 +14,8 @@ #define MOUSE_EVENT_LBUTTON 0x01 #define MOUSE_EVENT_RBUTTON 0x02 #define MOUSE_EVENT_MBUTTON 0x04 +#define MOUSE_EVENT_WHEELUP 0x08 +#define MOUSE_EVENT_WHEELDN 0x10 /* identical to the ps/2 keyboard bits */ #define QEMU_SCROLL_LOCK_LED (1 0) diff --git a/ui/cocoa.m b/ui/cocoa.m index d4af3e5..f20fd1f 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -27,6 +27,7 @@ #include qemu-common.h #include ui/console.h +#include ui/input.h #include sysemu/sysemu.h #ifndef MAC_OS_X_VERSION_10_4 @@ -49,14 +50,6 @@ #endif #define cgrect(nsrect) (*(CGRect *)(nsrect)) -#define COCOA_MOUSE_EVENT \ -if (isTabletEnabled) { \ -kbd_mouse_event((int)(p.x * 0x7FFF / (screen.width - 1)), (int)((screen.height - p.y) * 0x7FFF / (screen.height - 1)), 0, buttons); \ -} else if (isMouseGrabbed) { \ -kbd_mouse_event((int)[event deltaX], (int)[event deltaY], 0, buttons); \ -} else { \ -[NSApp sendEvent:event]; \ -} typedef struct { int width; @@ -67,6 +60,7 @@ typedef struct { NSWindow *normalWindow; static DisplayChangeListener *dcl; +static int last_buttons; int gArgc; char **gArgv; @@ -501,6 +495,7 @@ QemuCocoaView *cocoaView; int buttons = 0; int keycode; +bool mouse_event = false; NSPoint p = [event locationInWindow]; switch ([event type]) { @@ -620,7 +615,7 @@ QemuCocoaView *cocoaView; } } } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseDown: if ([event modifierFlags] NSCommandKeyMask) { @@ -628,15 +623,15 @@ QemuCocoaView *cocoaView; } else { buttons |= MOUSE_EVENT_LBUTTON; } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSRightMouseDown: buttons |= MOUSE_EVENT_RBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseDown: buttons |= MOUSE_EVENT_MBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseDragged: if ([event modifierFlags] NSCommandKeyMask) { @@ -644,19 +639,19 @@ QemuCocoaView *cocoaView; } else { buttons |= MOUSE_EVENT_LBUTTON; } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSRightMouseDragged: buttons |= MOUSE_EVENT_RBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseDragged: buttons |= MOUSE_EVENT_MBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseUp: if (isTabletEnabled) { -COCOA_MOUSE_EVENT +mouse_event = true; } else if (!isMouseGrabbed) { if (p.x -1 p.x screen.width p.y -1 p.y screen.height) { [self grabMouse]; @@ -664,18 +659,20 @@ QemuCocoaView *cocoaView; [NSApp sendEvent:event]; } } else { -COCOA_MOUSE_EVENT +mouse_event = true; } break; case NSRightMouseUp: -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseUp: -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSScrollWheel: if (isTabletEnabled || isMouseGrabbed) { -kbd_mouse_event(0, 0, -[event deltaY], 0); +buttons |= ([event deltaY] 0) ? +MOUSE_EVENT_WHEELUP : MOUSE_EVENT_WHEELDN; +mouse_event = true; } else { [NSApp sendEvent:event]; } @@ -683,6 +680,30 @@ QemuCocoaView *cocoaView; default: [NSApp sendEvent:event]; } + +if (mouse_event) { +if (last_buttons != buttons) { +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, +}; +
[Qemu-devel] [PATCH 30/42] input: mouse: switch cocoa ui to new core [untested]
Signed-off-by: Gerd Hoffmann kra...@redhat.com --- include/ui/console.h | 2 ++ ui/cocoa.m | 63 ++-- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 8543d18..a3062d0 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -14,6 +14,8 @@ #define MOUSE_EVENT_LBUTTON 0x01 #define MOUSE_EVENT_RBUTTON 0x02 #define MOUSE_EVENT_MBUTTON 0x04 +#define MOUSE_EVENT_WHEELUP 0x08 +#define MOUSE_EVENT_WHEELDN 0x10 /* identical to the ps/2 keyboard bits */ #define QEMU_SCROLL_LOCK_LED (1 0) diff --git a/ui/cocoa.m b/ui/cocoa.m index a029493..9cc512f 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -27,6 +27,7 @@ #include qemu-common.h #include ui/console.h +#include ui/input.h #include sysemu/sysemu.h #ifndef MAC_OS_X_VERSION_10_4 @@ -49,14 +50,6 @@ #endif #define cgrect(nsrect) (*(CGRect *)(nsrect)) -#define COCOA_MOUSE_EVENT \ -if (isTabletEnabled) { \ -kbd_mouse_event((int)(p.x * 0x7FFF / (screen.width - 1)), (int)((screen.height - p.y) * 0x7FFF / (screen.height - 1)), 0, buttons); \ -} else if (isMouseGrabed) { \ -kbd_mouse_event((int)[event deltaX], (int)[event deltaY], 0, buttons); \ -} else { \ -[NSApp sendEvent:event]; \ -} typedef struct { int width; @@ -67,6 +60,7 @@ typedef struct { NSWindow *normalWindow; static DisplayChangeListener *dcl; +static int last_buttons; int gArgc; char **gArgv; @@ -489,6 +483,7 @@ QemuCocoaView *cocoaView; int buttons = 0; int keycode; +bool mouse_event = false; NSPoint p = [event locationInWindow]; switch ([event type]) { @@ -595,7 +590,7 @@ QemuCocoaView *cocoaView; } } } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseDown: if ([event modifierFlags] NSCommandKeyMask) { @@ -603,15 +598,15 @@ QemuCocoaView *cocoaView; } else { buttons |= MOUSE_EVENT_LBUTTON; } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSRightMouseDown: buttons |= MOUSE_EVENT_RBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseDown: buttons |= MOUSE_EVENT_MBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseDragged: if ([event modifierFlags] NSCommandKeyMask) { @@ -619,19 +614,19 @@ QemuCocoaView *cocoaView; } else { buttons |= MOUSE_EVENT_LBUTTON; } -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSRightMouseDragged: buttons |= MOUSE_EVENT_RBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseDragged: buttons |= MOUSE_EVENT_MBUTTON; -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSLeftMouseUp: if (isTabletEnabled) { -COCOA_MOUSE_EVENT +mouse_event = true; } else if (!isMouseGrabed) { if (p.x -1 p.x screen.width p.y -1 p.y screen.height) { [self grabMouse]; @@ -639,18 +634,20 @@ QemuCocoaView *cocoaView; [NSApp sendEvent:event]; } } else { -COCOA_MOUSE_EVENT +mouse_event = true; } break; case NSRightMouseUp: -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSOtherMouseUp: -COCOA_MOUSE_EVENT +mouse_event = true; break; case NSScrollWheel: if (isTabletEnabled || isMouseGrabed) { -kbd_mouse_event(0, 0, -[event deltaY], 0); +button |= ([event deltaY] 0) ? +MOUSE_EVENT_WHEELUP : MOUSE_EVENT_WHEELDN; +mouse_event = true; } else { [NSApp sendEvent:event]; } @@ -658,6 +655,30 @@ QemuCocoaView *cocoaView; default: [NSApp sendEvent:event]; } + +if (mouse_event) { +if (last_buttons != buttons) { +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, +}; +qemu_input_update_buttons(con, bmap, last_buttons, buttons); +