[Spice-devel] [RFC PATCH spice-server v4 22/22] stream-device: Implement mouse movement

Jonathon Jongsma jjongsma at redhat.com
Mon Aug 28 19:50:54 UTC 2017


Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


On Fri, 2017-08-25 at 10:54 +0100, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/stream-device.c | 35 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 34 insertions(+), 1 deletion(-)
> 
> diff --git a/server/stream-device.c b/server/stream-device.c
> index 88e5abba..3d33ca13 100644
> --- a/server/stream-device.c
> +++ b/server/stream-device.c
> @@ -64,7 +64,7 @@ G_DEFINE_TYPE(StreamDevice, stream_device,
> RED_TYPE_CHAR_DEVICE)
>  typedef void StreamMsgHandler(StreamDevice *dev,
> SpiceCharDeviceInstance *sin);
>  
>  static StreamMsgHandler handle_msg_format, handle_msg_data,
> handle_msg_invalid,
> -    handle_msg_cursor_set;
> +    handle_msg_cursor_set, handle_msg_cursor_move;
>  
>  static RedPipeItem *
>  stream_device_read_msg_from_dev(RedCharDevice *self,
> SpiceCharDeviceInstance *sin)
> @@ -111,6 +111,13 @@ stream_device_read_msg_from_dev(RedCharDevice
> *self, SpiceCharDeviceInstance *si
>      case STREAM_TYPE_CURSOR_SET:
>          handle_msg_cursor_set(dev, sin);
>          break;
> +    case STREAM_TYPE_CURSOR_MOVE:
> +        if (dev->hdr.size != sizeof(StreamMsgCursorMove)) {
> +            handle_msg_invalid(dev, sin);
> +        } else {
> +            handle_msg_cursor_move(dev, sin);
> +        }
> +        break;
>      case STREAM_TYPE_CAPABILITIES:
>          /* FIXME */
>      default:
> @@ -294,6 +301,32 @@ handle_msg_cursor_set(StreamDevice *dev,
> SpiceCharDeviceInstance *sin)
>  }
>  
>  static void
> +handle_msg_cursor_move(StreamDevice *dev, SpiceCharDeviceInstance
> *sin)
> +{
> +    StreamMsgCursorMove move;
> +    SpiceCharDeviceInterface *sif =
> spice_char_device_get_interface(sin);
> +    int n = sif->read(sin, (uint8_t *) &move, sizeof(move));
> +    if (n == 0) {
> +        return;
> +    }
> +    if (n != sizeof(move)) {
> +        handle_msg_invalid(dev, sin);
> +        return;
> +    }
> +    move.x = GINT32_FROM_LE(move.x);
> +    move.y = GINT32_FROM_LE(move.y);
> +
> +    RedCursorCmd *cmd = spice_new0(RedCursorCmd, 1);
> +    cmd->type = QXL_CURSOR_MOVE;
> +    cmd->u.position.x = move.x;
> +    cmd->u.position.y = move.y;
> +
> +    cursor_channel_process_cmd(dev->cursor_channel, cmd);
> +
> +    dev->hdr_pos = 0;
> +}
> +
> +static void
>  stream_device_send_msg_to_client(RedCharDevice *self, RedPipeItem
> *msg, RedClient *client)
>  {
>  }


More information about the Spice-devel mailing list