diff mbox

monitor: Fix 'mouse_button': do not move mouse

Message ID 1372855818-15337-1-git-send-email-eugene.shatokhin@rosalab.ru
State New
Headers show

Commit Message

Eugene Shatokhin July 3, 2013, 12:50 p.m. UTC
If absolute positions are used, 'mouse_button' command moved mouse
pointer to (0, 0) before generating a mouse button event. The event was
therefore generated at incorrect position.

This problem is now fixed.

Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
---
 monitor.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

Comments

Andreas Färber July 3, 2013, 4:08 p.m. UTC | #1
Am 03.07.2013 14:50, schrieb Eugene Shatokhin:
> If absolute positions are used, 'mouse_button' command moved mouse
> pointer to (0, 0) before generating a mouse button event. The event was
> therefore generated at incorrect position.
> 
> This problem is now fixed.
> 
> Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>

This patch has been rejected before. I had suggested a different
solution but that was not fully accepted either and I haven't respun yet:
http://lists.nongnu.org/archive/html/qemu-devel/2013-06/msg02506.html

Andreas

> ---
>  monitor.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/monitor.c b/monitor.c
> index 9be515c..d742942 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1267,6 +1267,9 @@ static void do_sum(Monitor *mon, const QDict *qdict)
>      monitor_printf(mon, "%05d\n", sum);
>  }
>  
> +static int mouse_x;
> +static int mouse_y;
> +static int mouse_z;
>  static int mouse_button_state;
>  
>  static void do_mouse_move(Monitor *mon, const QDict *qdict)
> @@ -1281,13 +1284,22 @@ static void do_mouse_move(Monitor *mon, const QDict *qdict)
>      if (dz_str)
>          dz = strtol(dz_str, NULL, 0);
>      kbd_mouse_event(dx, dy, dz, mouse_button_state);
> +    if (kbd_mouse_is_absolute()) {
> +        mouse_x = dx;
> +        mouse_y = dy;
> +        mouse_z = dz;
> +    }
>  }
>  
>  static void do_mouse_button(Monitor *mon, const QDict *qdict)
>  {
>      int button_state = qdict_get_int(qdict, "button_state");
>      mouse_button_state = button_state;
> -    kbd_mouse_event(0, 0, 0, mouse_button_state);
> +    if (kbd_mouse_is_absolute()) {
> +        kbd_mouse_event(mouse_x, mouse_y, mouse_z, mouse_button_state);
> +    } else {
> +        kbd_mouse_event(0, 0, 0, mouse_button_state);
> +    }
>  }
>  
>  static void do_ioport_read(Monitor *mon, const QDict *qdict)
>
Eugene Shatokhin July 3, 2013, 7:02 p.m. UTC | #2
Ah, I see it now. Thanks for the link, I should have found that thread earlier.

Indeed, there can be several mice and keeping the position in global variables is a bad idea here.

Will test your patches when you update them. 

Our automated testing system at ROSA Laboratory is quite similar to os-autoinst, so it is no surprise we ran into the same problem.

Thanks again for the info.

Regards,

Eugene
Eugene Shatokhin Feb. 25, 2014, 12:21 p.m. UTC | #3
Hi,

On 07/03/2013 08:08 PM, Andreas Färber wrote:
> Am 03.07.2013 14:50, schrieb Eugene Shatokhin:
>> If absolute positions are used, 'mouse_button' command moved mouse
>> pointer to (0, 0) before generating a mouse button event. The event was
>> therefore generated at incorrect position.
>>
>> This problem is now fixed.
>>
>> Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
>
> This patch has been rejected before. I had suggested a different
> solution but that was not fully accepted either and I haven't respun yet:
> http://lists.nongnu.org/archive/html/qemu-devel/2013-06/msg02506.html
>

Any news on this issue? I have just checked qemu 1.7.0 - the problem 
still exists there.

Regards,
Eugene
Gerd Hoffmann Feb. 25, 2014, 12:43 p.m. UTC | #4
On Di, 2014-02-25 at 16:21 +0400, Eugene Shatokhin wrote:
> Hi,
> 
> On 07/03/2013 08:08 PM, Andreas Färber wrote:
> > Am 03.07.2013 14:50, schrieb Eugene Shatokhin:
> >> If absolute positions are used, 'mouse_button' command moved mouse
> >> pointer to (0, 0) before generating a mouse button event. The event was
> >> therefore generated at incorrect position.
> >>
> >> This problem is now fixed.
> >>
> >> Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
> >
> > This patch has been rejected before. I had suggested a different
> > solution but that was not fully accepted either and I haven't respun yet:
> > http://lists.nongnu.org/archive/html/qemu-devel/2013-06/msg02506.html
> >
> 
> Any news on this issue? I have just checked qemu 1.7.0 - the problem 
> still exists there.

I have an outstanding pull request for a input layer rewrite:

http://www.kraxel.org/cgit/qemu/tag/?id=pull-input-2

Once it is merged it should be easy to fix as you can simply generate
mouse button events without having to care about the position at all.

cheers,
  Gerd
Eugene Shatokhin Feb. 25, 2014, 1:54 p.m. UTC | #5
On 02/25/2014 04:43 PM, Gerd Hoffmann wrote:
> On Di, 2014-02-25 at 16:21 +0400, Eugene Shatokhin wrote:
>> Hi,
>>
>> On 07/03/2013 08:08 PM, Andreas Färber wrote:
>>> Am 03.07.2013 14:50, schrieb Eugene Shatokhin:
>>>> If absolute positions are used, 'mouse_button' command moved mouse
>>>> pointer to (0, 0) before generating a mouse button event. The event was
>>>> therefore generated at incorrect position.
>>>>
>>>> This problem is now fixed.
>>>>
>>>> Signed-off-by: Eugene Shatokhin <eugene.shatokhin@rosalab.ru>
>>>
>>> This patch has been rejected before. I had suggested a different
>>> solution but that was not fully accepted either and I haven't respun yet:
>>> http://lists.nongnu.org/archive/html/qemu-devel/2013-06/msg02506.html
>>>
>>
>> Any news on this issue? I have just checked qemu 1.7.0 - the problem
>> still exists there.
>
> I have an outstanding pull request for a input layer rewrite:
>
> http://www.kraxel.org/cgit/qemu/tag/?id=pull-input-2
>
> Once it is merged it should be easy to fix as you can simply generate
> mouse button events without having to care about the position at all.
>
> cheers,
>    Gerd
>
>
>

Good to know that, thanks!

Regards,
Eugene
diff mbox

Patch

diff --git a/monitor.c b/monitor.c
index 9be515c..d742942 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1267,6 +1267,9 @@  static void do_sum(Monitor *mon, const QDict *qdict)
     monitor_printf(mon, "%05d\n", sum);
 }
 
+static int mouse_x;
+static int mouse_y;
+static int mouse_z;
 static int mouse_button_state;
 
 static void do_mouse_move(Monitor *mon, const QDict *qdict)
@@ -1281,13 +1284,22 @@  static void do_mouse_move(Monitor *mon, const QDict *qdict)
     if (dz_str)
         dz = strtol(dz_str, NULL, 0);
     kbd_mouse_event(dx, dy, dz, mouse_button_state);
+    if (kbd_mouse_is_absolute()) {
+        mouse_x = dx;
+        mouse_y = dy;
+        mouse_z = dz;
+    }
 }
 
 static void do_mouse_button(Monitor *mon, const QDict *qdict)
 {
     int button_state = qdict_get_int(qdict, "button_state");
     mouse_button_state = button_state;
-    kbd_mouse_event(0, 0, 0, mouse_button_state);
+    if (kbd_mouse_is_absolute()) {
+        kbd_mouse_event(mouse_x, mouse_y, mouse_z, mouse_button_state);
+    } else {
+        kbd_mouse_event(0, 0, 0, mouse_button_state);
+    }
 }
 
 static void do_ioport_read(Monitor *mon, const QDict *qdict)