[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