From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>, Anthony Liguori <aliguori@amazon.com>
Subject: [Qemu-devel] [PATCH 22/42] input: mouse: switch legacy handlers to new core
Date: Mon, 16 Dec 2013 11:48:58 +0100 [thread overview]
Message-ID: <1387190958-19470-23-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1387190958-19470-1-git-send-email-kraxel@redhat.com>
legacy mouse event handlers are registered in the new core,
so they receive events submitted to the new input core.
legacy kbd_mouse_event() continues to use the old code paths.
So new-core event handlers wouldn't see events submitted via
kbd_mouse_event.
This leads to the constrain that we we must transition all
kbd_mouse_event() users first to keep things working. But
that is easier to handle than translating legacy mouse events
into new-core mouse events ;)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/input-legacy.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+)
diff --git a/ui/input-legacy.c b/ui/input-legacy.c
index a4006cc..dd2dec3 100644
--- a/ui/input-legacy.c
+++ b/ui/input-legacy.c
@@ -41,6 +41,12 @@ struct QEMUPutMouseEntry {
/* used internally by qemu for handling mice */
QTAILQ_ENTRY(QEMUPutMouseEntry) node;
+
+ /* new input core */
+ QemuInputHandler h;
+ QemuInputHandlerState *s;
+ int axis[INPUT_AXIS_MAX];
+ int buttons;
};
struct QEMUPutKbdEntry {
@@ -376,6 +382,51 @@ static void check_mode_change(void)
current_has_absolute = has_absolute;
}
+static void legacy_mouse_event(DeviceState *dev, QemuConsole *src,
+ InputEvent *evt)
+{
+ static const int bmap[INPUT_BUTTON_MAX] = {
+ [INPUT_BUTTON_LEFT] = MOUSE_EVENT_LBUTTON,
+ [INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON,
+ [INPUT_BUTTON_RIGHT] = MOUSE_EVENT_RBUTTON,
+ };
+ QEMUPutMouseEntry *s = (QEMUPutMouseEntry *)dev;
+
+ switch (evt->kind) {
+ case INPUT_EVENT_KIND_BTN:
+ if (evt->btn->down) {
+ s->buttons |= bmap[evt->btn->button];
+ } else {
+ s->buttons &= ~bmap[evt->btn->button];
+ }
+ break;
+ case INPUT_EVENT_KIND_ABS:
+ s->axis[evt->abs->axis] = evt->abs->value;
+ break;
+ case INPUT_EVENT_KIND_REL:
+ s->axis[evt->rel->axis] += evt->rel->value;
+ break;
+ default:
+ break;
+ }
+}
+
+static void legacy_mouse_sync(DeviceState *dev)
+{
+ QEMUPutMouseEntry *s = (QEMUPutMouseEntry *)dev;
+
+ s->qemu_put_mouse_event(s->qemu_put_mouse_event_opaque,
+ s->axis[INPUT_AXIS_X],
+ s->axis[INPUT_AXIS_Y],
+ 0,
+ s->buttons);
+
+ if (!s->qemu_put_mouse_event_absolute) {
+ s->axis[INPUT_AXIS_X] = 0;
+ s->axis[INPUT_AXIS_Y] = 0;
+ }
+}
+
QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
void *opaque, int absolute,
const char *name)
@@ -393,6 +444,14 @@ QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
QTAILQ_INSERT_TAIL(&mouse_handlers, s, node);
+ s->h.name = name;
+ s->h.mask = INPUT_EVENT_MASK_BTN |
+ (absolute ? INPUT_EVENT_MASK_ABS : INPUT_EVENT_MASK_REL);
+ s->h.event = legacy_mouse_event;
+ s->h.sync = legacy_mouse_sync;
+ s->s = qemu_input_handler_register((DeviceState *)s,
+ &s->h);
+
check_mode_change();
return s;
@@ -403,6 +462,8 @@ void qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry)
QTAILQ_REMOVE(&mouse_handlers, entry, node);
QTAILQ_INSERT_HEAD(&mouse_handlers, entry, node);
+ qemu_input_handler_activate(entry->s);
+
check_mode_change();
}
@@ -410,6 +471,8 @@ void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
{
QTAILQ_REMOVE(&mouse_handlers, entry, node);
+ qemu_input_handler_unregister(entry->s);
+
g_free(entry->qemu_put_mouse_event_name);
g_free(entry);
--
1.8.3.1
next prev parent reply other threads:[~2013-12-16 10:49 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-16 10:48 [Qemu-devel] [PATCH 00/42] rework input handling, sdl2 support Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 01/42] ui/sdl2 : initial port to SDL 2.0 (v2.0) Gerd Hoffmann
2013-12-16 22:12 ` Stefan Weil
2013-12-16 22:18 ` Dave Airlie
2013-12-17 11:16 ` Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 02/42] sdl2: baum build fix Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 03/42] sdl2: remove text console logic Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 04/42] console: export QemuConsole index, width, height Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 05/42] input: rename file to legacy Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 06/42] input: qapi: define event types Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 07/42] input: qapi: add unmapped key Gerd Hoffmann
2013-12-17 21:06 ` Eric Blake
2013-12-16 10:48 ` [Qemu-devel] [PATCH 08/42] input: qapi: add pause key Gerd Hoffmann
2013-12-17 21:06 ` Eric Blake
2013-12-16 10:48 ` [Qemu-devel] [PATCH 09/42] input: add core bits of the new input layer Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 10/42] input: keyboard: add helper functions to core Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 11/42] input: keyboard: switch legacy handlers to new core Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 12/42] input: keyboard: switch qmp_send_key() " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 13/42] input: keyboard: switch gtk ui " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 14/42] input: keyboard: switch sdl " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 15/42] sdl2: switch keyboard handling " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 16/42] input: keyboard: switch vnc ui " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 17/42] input: keyboard: switch spice " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 18/42] input: keyboard: switch curses " Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 19/42] input: mouse: add helpers functions to core Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 20/42] input: mouse: add graphic_rotate support Gerd Hoffmann
2013-12-16 10:48 ` [Qemu-devel] [PATCH 21/42] input: mouse: add qemu_input_is_absolute() Gerd Hoffmann
2013-12-16 10:48 ` Gerd Hoffmann [this message]
2013-12-16 10:48 ` [Qemu-devel] [PATCH 23/42] input: mouse: switch gtk ui to new core Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 24/42] input: mouse: switch sdl " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 25/42] sdl2: switch mouse handling " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 26/42] input: mouse: switch vnc ui " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 27/42] input: mouse: switch spice " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 28/42] input: mouse: switch monitor " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 29/42] input: keyboard: switch cocoa ui to new core [untested] Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 30/42] input: mouse: " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 31/42] input: trace events Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 32/42] input-legacy: remove kbd_put_keycode Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 33/42] input-legacy: remove kbd_mouse_has_absolute Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 34/42] input-legacy: remove kbd_mouse_is_absolute Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 35/42] input-legacy: remove kbd_mouse_event Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 36/42] input: move mouse mode notifier to new core Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 37/42] input: add input_mouse_mode tracepoint Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 38/42] sdl2: simplify keymap handling Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 39/42] sdl2: codestyle fixups Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 40/42] input: move qmp_query_mice to new core Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 41/42] input: move do_mouse_set " Gerd Hoffmann
2013-12-16 10:49 ` [Qemu-devel] [PATCH 42/42] input: remove index_from_keycode (no users) Gerd Hoffmann
-- strict thread matches above, loose matches on Subject: below --
2014-01-28 9:56 [Qemu-devel] [PULL 00/42] rework input handling, sdl2 support Gerd Hoffmann
2014-01-28 9:57 ` [Qemu-devel] [PATCH 22/42] input: mouse: switch legacy handlers to new core Gerd Hoffmann
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=1387190958-19470-23-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=aliguori@amazon.com \
--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).