[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