From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Akihiko Odaki" <akihiko.odaki@daynix.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Rene Engel" <ReneEngel80@emailn.de>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [PULL 04/12] ui/cocoa: Immediately call [-QemuCocoaView handleMouseEvent:buttons:]
Date: Tue, 5 Mar 2024 12:05:59 +0100 [thread overview]
Message-ID: <20240305110608.21618-5-philmd@linaro.org> (raw)
In-Reply-To: <20240305110608.21618-1-philmd@linaro.org>
From: Akihiko Odaki <akihiko.odaki@daynix.com>
Instead of using mouse_event variable to tell to handle a mouse event
later, immediately call [-QemuCocoaView handleMouseEvent:buttons:].
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Tested-by: Rene Engel <ReneEngel80@emailn.de>
Message-ID: <20240224-cocoa-v12-2-e89f70bdda71@daynix.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
ui/cocoa.m | 87 +++++++++++++++++++-----------------------------------
1 file changed, 30 insertions(+), 57 deletions(-)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index aecd60df2a..ff6486093c 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -807,9 +807,8 @@ - (bool) handleEventLocked:(NSEvent *)event
{
/* Return true if we handled the event, false if it should be given to OSX */
COCOA_DEBUG("QemuCocoaView: handleEvent\n");
- int buttons = 0;
+ InputButton button;
int keycode = 0;
- bool mouse_event = false;
// Location of event in virtual screen coordinates
NSPoint p = [self screenLocationOfEvent:event];
NSUInteger modifiers = [event modifierFlags];
@@ -955,7 +954,7 @@ - (bool) handleEventLocked:(NSEvent *)event
}
break;
}
- break;
+ return true;
case NSEventTypeKeyDown:
keycode = cocoa_keycode_to_qemu([event keyCode]);
@@ -991,7 +990,7 @@ - (bool) handleEventLocked:(NSEvent *)event
} else {
[self handleMonitorInput: event];
}
- break;
+ return true;
case NSEventTypeKeyUp:
keycode = cocoa_keycode_to_qemu([event keyCode]);
@@ -1004,7 +1003,7 @@ - (bool) handleEventLocked:(NSEvent *)event
if (qemu_console_is_graphic(NULL)) {
qkbd_state_key_event(kbd, keycode, false);
}
- break;
+ return true;
case NSEventTypeMouseMoved:
if (isAbsoluteEnabled) {
// Cursor re-entered into a window might generate events bound to screen coordinates
@@ -1020,34 +1019,20 @@ - (bool) handleEventLocked:(NSEvent *)event
}
}
}
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:0];
case NSEventTypeLeftMouseDown:
- buttons |= MOUSE_EVENT_LBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_LBUTTON];
case NSEventTypeRightMouseDown:
- buttons |= MOUSE_EVENT_RBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_RBUTTON];
case NSEventTypeOtherMouseDown:
- buttons |= MOUSE_EVENT_MBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_MBUTTON];
case NSEventTypeLeftMouseDragged:
- buttons |= MOUSE_EVENT_LBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_LBUTTON];
case NSEventTypeRightMouseDragged:
- buttons |= MOUSE_EVENT_RBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_RBUTTON];
case NSEventTypeOtherMouseDragged:
- buttons |= MOUSE_EVENT_MBUTTON;
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:MOUSE_EVENT_MBUTTON];
case NSEventTypeLeftMouseUp:
- mouse_event = true;
if (!isMouseGrabbed && [self screenContainsPoint:p]) {
/*
* In fullscreen mode, the window of cocoaView may not be the
@@ -1058,53 +1043,41 @@ - (bool) handleEventLocked:(NSEvent *)event
[self grabMouse];
}
}
- break;
+ return [self handleMouseEvent:event buttons:0];
case NSEventTypeRightMouseUp:
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:0];
case NSEventTypeOtherMouseUp:
- mouse_event = true;
- break;
+ return [self handleMouseEvent:event buttons:0];
case NSEventTypeScrollWheel:
/*
* Send wheel events to the guest regardless of window focus.
* This is in-line with standard Mac OS X UI behaviour.
*/
- /*
- * We shouldn't have got a scroll event when deltaY and delta Y
- * are zero, hence no harm in dropping the event
- */
- if ([event deltaY] != 0 || [event deltaX] != 0) {
/* Determine if this is a scroll up or scroll down event */
- if ([event deltaY] != 0) {
- buttons = ([event deltaY] > 0) ?
+ if ([event deltaY] != 0) {
+ button = ([event deltaY] > 0) ?
INPUT_BUTTON_WHEEL_UP : INPUT_BUTTON_WHEEL_DOWN;
- } else if ([event deltaX] != 0) {
- buttons = ([event deltaX] > 0) ?
+ } else if ([event deltaX] != 0) {
+ button = ([event deltaX] > 0) ?
INPUT_BUTTON_WHEEL_LEFT : INPUT_BUTTON_WHEEL_RIGHT;
- }
-
- qemu_input_queue_btn(dcl.con, buttons, true);
- qemu_input_event_sync();
- qemu_input_queue_btn(dcl.con, buttons, false);
- qemu_input_event_sync();
+ } else {
+ /*
+ * We shouldn't have got a scroll event when deltaY and delta Y
+ * are zero, hence no harm in dropping the event
+ */
+ return true;
}
- /*
- * Since deltaX/deltaY also report scroll wheel events we prevent mouse
- * movement code from executing.
- */
- mouse_event = false;
- break;
+ qemu_input_queue_btn(dcl.con, button, true);
+ qemu_input_event_sync();
+ qemu_input_queue_btn(dcl.con, button, false);
+ qemu_input_event_sync();
+
+ return true;
default:
return false;
}
-
- if (mouse_event) {
- return [self handleMouseEvent:event buttons:buttons];
- }
- return true;
}
- (bool) handleMouseEvent:(NSEvent *)event buttons:(uint32_t)buttons
--
2.41.0
next prev parent reply other threads:[~2024-03-05 11:07 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-05 11:05 [PULL 00/12] Cocoa patches for 2024-03-05 Philippe Mathieu-Daudé
2024-03-05 11:05 ` [PULL 01/12] ui/cocoa: add zoom-interpolation display option Philippe Mathieu-Daudé
2024-03-05 11:05 ` [PULL 02/12] ui/cocoa: Fix window clipping on macOS 14 Philippe Mathieu-Daudé
2024-03-05 11:05 ` [PULL 03/12] ui/cocoa: Split [-QemuCocoaView handleEventLocked:] Philippe Mathieu-Daudé
2024-03-05 11:05 ` Philippe Mathieu-Daudé [this message]
2024-03-05 11:06 ` [PULL 05/12] ui/cocoa: Release specific mouse buttons Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 06/12] ui/cocoa: Scale with NSView instead of Core Graphics Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 07/12] ui/cocoa: Fix pause label coordinates Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 08/12] ui/cocoa: Let the platform toggle fullscreen Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 09/12] ui/cocoa: Remove normalWindow Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 10/12] ui/cocoa: Make window resizable Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 11/12] ui/cocoa: Call console_select() with the BQL Philippe Mathieu-Daudé
2024-03-05 11:06 ` [PULL 12/12] ui/cocoa: Remove stretch_video flag Philippe Mathieu-Daudé
2024-03-05 15:27 ` [PULL 00/12] Cocoa patches for 2024-03-05 Peter Maydell
2024-03-09 14:58 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240305110608.21618-5-philmd@linaro.org \
--to=philmd@linaro.org \
--cc=ReneEngel80@emailn.de \
--cc=akihiko.odaki@daynix.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).