qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] add command to position mouse pointer in absolute m


From: Marcelo Tosatti
Subject: [Qemu-devel] [PATCH] add command to position mouse pointer in absolute mode
Date: Thu, 5 Jun 2014 20:25:29 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

Add monitor command to change mouse cursor position when input 
device is in absolute mode.

Signed-off-by: Marcelo Tosatti <address@hidden>

---
 hmp-commands.hx |   22 +++++++++++++++++++---
 monitor.c       |   35 ++++++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 4 deletions(-)

Index: qemu/hmp-commands.hx
===================================================================
--- qemu.orig/hmp-commands.hx   2014-06-05 20:21:32.310919549 -0300
+++ qemu/hmp-commands.hx        2014-06-05 20:21:44.582879764 -0300
@@ -703,18 +703,34 @@
         .name       = "mouse_move",
         .args_type  = "dx_str:s,dy_str:s,dz_str:s?",
         .params     = "dx dy [dz]",
-        .help       = "send mouse move events",
-        .mhandler.cmd = do_mouse_move,
+        .help       = "send mouse move events (relative coordinates)",
+        .mhandler.cmd = do_mouse_move_rel,
     },
 
 STEXI
 @item mouse_move @var{dx} @var{dy} address@hidden
 @findex mouse_move
-Move the active mouse to the specified coordinates @var{dx} @var{dy}
+Move the active mouse to the specified relative coordinates @var{dx} @var{dy}
 with optional scroll axis @var{dz}.
 ETEXI
 
     {
+        .name       = "mouse_move_abs",
+        .args_type  = "dx_str:s,dy_str:s,dz_str:s?",
+        .params     = "dx dy [dz]",
+        .help       = "send mouse move events (absolute coordinates)",
+        .mhandler.cmd = do_mouse_move_abs,
+    },
+
+STEXI
address@hidden mouse_move_abs @var{dx} @var{dy} address@hidden
address@hidden mouse_move_abs
+Move the active mouse to the specified absolute coordinates @var{dx} @var{dy}
+with optional scroll axis @var{dz}.
+ETEXI
+
+
+    {
         .name       = "mouse_button",
         .args_type  = "button_state:i",
         .params     = "state",
Index: qemu/monitor.c
===================================================================
--- qemu.orig/monitor.c 2014-06-05 20:21:32.313919539 -0300
+++ qemu/monitor.c      2014-06-05 20:21:44.583879761 -0300
@@ -1436,7 +1436,7 @@
 
 static int mouse_button_state;
 
-static void do_mouse_move(Monitor *mon, const QDict *qdict)
+static void do_mouse_move_rel(Monitor *mon, const QDict *qdict)
 {
     int dx, dy, dz, button;
     const char *dx_str = qdict_get_str(qdict, "dx_str");
@@ -1450,6 +1450,39 @@
 
     if (dz_str) {
         dz = strtol(dz_str, NULL, 0);
+        if (dz != 0) {
+            button = (dz > 0) ? INPUT_BUTTON_WHEEL_UP : 
INPUT_BUTTON_WHEEL_DOWN;
+            qemu_input_queue_btn(NULL, button, true);
+            qemu_input_event_sync();
+            qemu_input_queue_btn(NULL, button, false);
+        }
+    }
+    qemu_input_event_sync();
+}
+
+static void do_mouse_move_abs(Monitor *mon, const QDict *qdict)
+{
+    int dx, dy, dz, button;
+    const char *dx_str = qdict_get_str(qdict, "dx_str");
+    const char *dy_str = qdict_get_str(qdict, "dy_str");
+    const char *dz_str = qdict_get_try_str(qdict, "dz_str");
+    int weight, height;
+
+    weight = qemu_console_get_width(NULL, 0);
+    height = qemu_console_get_height(NULL, 0);
+
+    if (!height || !weight) {
+        monitor_printf(mon, "failed to retrieve active console size\n");
+        return;
+    }
+
+    dx = strtol(dx_str, NULL, 0);
+    dy = strtol(dy_str, NULL, 0);
+    qemu_input_queue_abs(NULL, INPUT_AXIS_X, dx, weight);
+    qemu_input_queue_abs(NULL, INPUT_AXIS_Y, dy, height);
+
+    if (dz_str) {
+        dz = strtol(dz_str, NULL, 0);
         if (dz != 0) {
             button = (dz > 0) ? INPUT_BUTTON_WHEEL_UP : 
INPUT_BUTTON_WHEEL_DOWN;
             qemu_input_queue_btn(NULL, button, true);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]