qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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/44] input: mouse: switch legacy handlers to new core
Date: Mon, 24 Feb 2014 12:52:29 +0100	[thread overview]
Message-ID: <1393242771-28076-23-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1393242771-28076-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

  parent reply	other threads:[~2014-02-24 11:54 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-24 11:52 [Qemu-devel] [PULL v2 00/44] rework input handling, sdl2 support Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 01/44] ui/sdl2 : initial port to SDL 2.0 (v2.0) Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 02/44] sdl2: baum build fix Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 03/44] sdl2: remove text console logic Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 04/44] console: export QemuConsole index, width, height Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 05/44] input: rename file to legacy Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 06/44] input: qapi: define event types Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 07/44] input: qapi: add unmapped key Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 08/44] input: qapi: add pause key Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 09/44] input: add core bits of the new input layer Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 10/44] input: keyboard: add helper functions to core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 11/44] input: keyboard: switch legacy handlers to new core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 12/44] input: keyboard: switch qmp_send_key() " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 13/44] input: keyboard: switch gtk ui " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 14/44] input: keyboard: switch sdl " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 15/44] sdl2: switch keyboard handling " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 16/44] input: keyboard: switch vnc ui " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 17/44] input: keyboard: switch spice " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 18/44] input: keyboard: switch curses " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 19/44] input: mouse: add helpers functions to core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 20/44] input: mouse: add graphic_rotate support Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 21/44] input: mouse: add qemu_input_is_absolute() Gerd Hoffmann
2014-02-24 11:52 ` Gerd Hoffmann [this message]
2014-02-24 11:52 ` [Qemu-devel] [PATCH 23/44] input: mouse: switch gtk ui to new core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 24/44] input: mouse: switch sdl " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 25/44] sdl2: switch mouse handling " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 26/44] input: mouse: switch vnc ui " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 27/44] input: mouse: switch spice " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 28/44] input: mouse: switch monitor " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 29/44] input: keyboard: switch cocoa ui " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 30/44] input: mouse: " Gerd Hoffmann
2014-02-24 12:01   ` Andreas Färber
2014-02-24 11:52 ` [Qemu-devel] [PATCH 31/44] input: trace events Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 32/44] input-legacy: remove kbd_put_keycode Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 33/44] input-legacy: remove kbd_mouse_has_absolute Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 34/44] input-legacy: remove kbd_mouse_is_absolute Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 35/44] input-legacy: remove kbd_mouse_event Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 36/44] input: move mouse mode notifier to new core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 37/44] input: add input_mouse_mode tracepoint Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 38/44] sdl2: simplify keymap handling Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 39/44] sdl2: codestyle fixups Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 40/44] input: move qmp_query_mice to new core Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 41/44] input: move do_mouse_set " Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 42/44] input: remove index_from_keycode (no users) Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 43/44] console: add head to index to qemu consoles Gerd Hoffmann
2014-02-24 11:52 ` [Qemu-devel] [PATCH 44/44] console: add QemuUIInfo Gerd Hoffmann
2014-02-26 20:06 ` [Qemu-devel] [PULL v2 00/44] rework input handling, sdl2 support Peter Maydell
2014-02-27 13:19   ` Gerd Hoffmann
2014-02-27 13:30     ` Peter Maydell
2014-02-27 14:06       ` Gerd Hoffmann
2014-02-27 13:55     ` Eric Blake
2014-02-27 14:04       ` 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=1393242771-28076-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).