qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 2/2] msmouse: send short messages if possible.


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 2/2] msmouse: send short messages if possible.
Date: Thu, 16 Jun 2016 09:13:40 +0100

On 16 June 2016 at 09:07, Gerd Hoffmann <address@hidden> wrote:
> Keep track of button changes.  Send the extended 4-byte messages for
> three button mice only in case we have something to report for the
> middle button.  Use the short 3-byte messages (original protocol for
> two-button microsoft mouse) otherwise.
>
> Signed-off-by: Gerd Hoffmann <address@hidden>
> ---
>  backends/msmouse.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/backends/msmouse.c b/backends/msmouse.c
> index b1e1bea..f6504be 100644
> --- a/backends/msmouse.c
> +++ b/backends/msmouse.c
> @@ -35,6 +35,7 @@ typedef struct {
>      QemuInputHandlerState *hs;
>      int axis[INPUT_AXIS__MAX];
>      bool btns[INPUT_BUTTON__MAX];
> +    bool btnc[INPUT_BUTTON__MAX];
>      uint8_t outbuf[32];
>      int outlen;
>  } MouseState;
> @@ -62,7 +63,7 @@ static void msmouse_chr_accept_input(CharDriverState *chr)
>  static void msmouse_queue_event(MouseState *mouse)
>  {
>      unsigned char bytes[4] = { 0x40, 0x00, 0x00, 0x00 };
> -    int dx, dy;
> +    int dx, dy, count = 3;
>
>      dx = mouse->axis[INPUT_AXIS_X];
>      mouse->axis[INPUT_AXIS_X] = 0;
> @@ -78,14 +79,19 @@ static void msmouse_queue_event(MouseState *mouse)
>      /* Buttons */
>      bytes[0] |= (mouse->btns[INPUT_BUTTON_LEFT]   ? 0x20 : 0x00);
>      bytes[0] |= (mouse->btns[INPUT_BUTTON_RIGHT]  ? 0x10 : 0x00);
> -    bytes[3] |= (mouse->btns[INPUT_BUTTON_MIDDLE] ? 0x20 : 0x00);
> +    if (mouse->btns[INPUT_BUTTON_MIDDLE] ||
> +        mouse->btnc[INPUT_BUTTON_MIDDLE]) {
> +        bytes[3] |= (mouse->btns[INPUT_BUTTON_MIDDLE] ? 0x20 : 0x00);
> +        mouse->btnc[INPUT_BUTTON_MIDDLE] = false;
> +        count = 4;
> +    }
>
> -    if (mouse->outlen <= sizeof(mouse->outbuf) - 4) {
> +    if (mouse->outlen <= sizeof(mouse->outbuf) - count) {
>          /* We always send the packet of, so that we do not have to keep track
>             of previous state of the middle button. This can potentially 
> confuse
>             some very old drivers for two button mice though. */

Is this comment now out of date ?

> -        memcpy(mouse->outbuf + mouse->outlen, bytes, 4);
> -        mouse->outlen += 4;
> +        memcpy(mouse->outbuf + mouse->outlen, bytes, count);
> +        mouse->outlen += count;
>      } else {
>          /* queue full -> drop event */
>      }
> @@ -107,6 +113,7 @@ static void msmouse_input_event(DeviceState *dev, 
> QemuConsole *src,
>      case INPUT_EVENT_KIND_BTN:
>          btn = evt->u.btn.data;
>          mouse->btns[btn->button] = btn->down;
> +        mouse->btnc[btn->button] = true;
>          break;
>
>      default:
> --
> 1.8.3.1
>

thanks
-- PMM



reply via email to

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