[Spice-devel] [PATCH v2 2/9] Add CursorChannelPrivate struct
Pavel Grunt
pgrunt at redhat.com
Thu Sep 15 14:20:26 UTC 2016
On Wed, 2016-09-14 at 11:53 -0500, Jonathon Jongsma wrote:
> Encapsulate private data of CursorChannel in a private struct. This
> isn't very useful at the moment, but it will help prepare the way
> for
> porting the RedChannel heirarchy to GObject.
Acked-by: Pavel Grunt <pgrunt at redhat.com>
> ---
> Changes in v2:
> - use priv[1] to avoid memory leak
>
> server/cursor-channel.c | 57 +++++++++++++++++++++++++++-----------
> -----------
> 1 file changed, 31 insertions(+), 26 deletions(-)
>
> diff --git a/server/cursor-channel.c b/server/cursor-channel.c
> index 080b22b..52c8e2d 100644
> --- a/server/cursor-channel.c
> +++ b/server/cursor-channel.c
> @@ -47,9 +47,8 @@ typedef struct RedCursorPipeItem {
> CursorItem *cursor_item;
> } RedCursorPipeItem;
>
> -struct CursorChannel {
> - CommonGraphicsChannel common; // Must be the first thing
> -
> +typedef struct CursorChannelPrivate CursorChannelPrivate;
> +struct CursorChannelPrivate {
> CursorItem *item;
> int cursor_visible;
> SpicePoint16 cursor_position;
> @@ -62,6 +61,12 @@ struct CursorChannel {
> #endif
> };
>
> +struct CursorChannel {
> + CommonGraphicsChannel common; // Must be the first thing
> +
> + CursorChannelPrivate priv[1];
> +};
> +
> static void cursor_pipe_item_free(RedPipeItem *pipe_item);
>
> static CursorItem *cursor_item_new(QXLInstance *qxl, RedCursorCmd
> *cmd)
> @@ -108,10 +113,10 @@ static void cursor_item_unref(CursorItem
> *item)
>
> static void cursor_set_item(CursorChannel *cursor, CursorItem
> *item)
> {
> - if (cursor->item)
> - cursor_item_unref(cursor->item);
> + if (cursor->priv->item)
> + cursor_item_unref(cursor->priv->item);
>
> - cursor->item = item ? cursor_item_ref(item) : NULL;
> + cursor->priv->item = item ? cursor_item_ref(item) : NULL;
> }
>
> static RedPipeItem *new_cursor_pipe_item(RedChannelClient *rcc,
> void *data, int num)
> @@ -202,12 +207,12 @@ static void
> red_marshall_cursor_init(CursorChannelClient *ccc, SpiceMarshaller *
> cursor_channel =
> (CursorChannel*)red_channel_client_get_channel(rcc);
>
> red_channel_client_init_send_data(rcc, SPICE_MSG_CURSOR_INIT,
> NULL);
> - msg.visible = cursor_channel->cursor_visible;
> - msg.position = cursor_channel->cursor_position;
> - msg.trail_length = cursor_channel->cursor_trail_length;
> - msg.trail_frequency = cursor_channel->cursor_trail_frequency;
> + msg.visible = cursor_channel->priv->cursor_visible;
> + msg.position = cursor_channel->priv->cursor_position;
> + msg.trail_length = cursor_channel->priv->cursor_trail_length;
> + msg.trail_frequency = cursor_channel->priv-
> >cursor_trail_frequency;
>
> - cursor_fill(ccc, &msg.cursor, cursor_channel->item, &info);
> + cursor_fill(ccc, &msg.cursor, cursor_channel->priv->item,
> &info);
> spice_marshall_msg_cursor_init(base_marshaller, &msg);
> add_buf_from_info(base_marshaller, &info);
> }
> @@ -242,7 +247,7 @@ static void cursor_marshall(CursorChannelClient
> *ccc,
>
> red_channel_client_init_send_data(rcc,
> SPICE_MSG_CURSOR_SET, pipe_item);
> cursor_set.position = cmd->u.set.position;
> - cursor_set.visible = cursor_channel->cursor_visible;
> + cursor_set.visible = cursor_channel->priv-
> >cursor_visible;
>
> cursor_fill(ccc, &cursor_set.cursor, item, &info);
> spice_marshall_msg_cursor_set(m, &cursor_set);
> @@ -324,8 +329,8 @@ CursorChannel* cursor_channel_new(RedWorker
> *worker)
> &cbs,
> red_channel_client_handle_message);
>
> cursor_channel = (CursorChannel *)channel;
> - cursor_channel->cursor_visible = TRUE;
> - cursor_channel->mouse_mode = SPICE_MOUSE_MODE_SERVER;
> + cursor_channel->priv->cursor_visible = TRUE;
> + cursor_channel->priv->mouse_mode = SPICE_MOUSE_MODE_SERVER;
>
> return cursor_channel;
> }
> @@ -342,20 +347,20 @@ void cursor_channel_process_cmd(CursorChannel
> *cursor, RedCursorCmd *cursor_cmd)
>
> switch (cursor_cmd->type) {
> case QXL_CURSOR_SET:
> - cursor->cursor_visible = cursor_cmd->u.set.visible;
> + cursor->priv->cursor_visible = cursor_cmd->u.set.visible;
> cursor_set_item(cursor, cursor_item);
> break;
> case QXL_CURSOR_MOVE:
> - cursor_show = !cursor->cursor_visible;
> - cursor->cursor_visible = TRUE;
> - cursor->cursor_position = cursor_cmd->u.position;
> + cursor_show = !cursor->priv->cursor_visible;
> + cursor->priv->cursor_visible = TRUE;
> + cursor->priv->cursor_position = cursor_cmd->u.position;
> break;
> case QXL_CURSOR_HIDE:
> - cursor->cursor_visible = FALSE;
> + cursor->priv->cursor_visible = FALSE;
> break;
> case QXL_CURSOR_TRAIL:
> - cursor->cursor_trail_length = cursor_cmd->u.trail.length;
> - cursor->cursor_trail_frequency = cursor_cmd-
> >u.trail.frequency;
> + cursor->priv->cursor_trail_length = cursor_cmd-
> >u.trail.length;
> + cursor->priv->cursor_trail_frequency = cursor_cmd-
> >u.trail.frequency;
> break;
> default:
> spice_warning("invalid cursor command %u", cursor_cmd-
> >type);
> @@ -363,7 +368,7 @@ void cursor_channel_process_cmd(CursorChannel
> *cursor, RedCursorCmd *cursor_cmd)
> }
>
> if (red_channel_is_connected(&cursor->common.base) &&
> - (cursor->mouse_mode == SPICE_MOUSE_MODE_SERVER
> + (cursor->priv->mouse_mode == SPICE_MOUSE_MODE_SERVER
> || cursor_cmd->type != QXL_CURSOR_MOVE
> || cursor_show)) {
> red_channel_pipes_new_add(&cursor->common.base,
> @@ -380,9 +385,9 @@ void cursor_channel_reset(CursorChannel *cursor)
> spice_return_if_fail(cursor);
>
> cursor_set_item(cursor, NULL);
> - cursor->cursor_visible = TRUE;
> - cursor->cursor_position.x = cursor->cursor_position.y = 0;
> - cursor->cursor_trail_length = cursor->cursor_trail_frequency =
> 0;
> + cursor->priv->cursor_visible = TRUE;
> + cursor->priv->cursor_position.x = cursor->priv-
> >cursor_position.y = 0;
> + cursor->priv->cursor_trail_length = cursor->priv-
> >cursor_trail_frequency = 0;
>
> if (red_channel_is_connected(channel)) {
> red_channel_pipes_add_type(channel,
> RED_PIPE_ITEM_TYPE_INVAL_CURSOR_CACHE);
> @@ -423,7 +428,7 @@ void cursor_channel_set_mouse_mode(CursorChannel
> *cursor, uint32_t mode)
> {
> spice_return_if_fail(cursor);
>
> - cursor->mouse_mode = mode;
> + cursor->priv->mouse_mode = mode;
> }
>
> void cursor_channel_connect(CursorChannel *cursor, RedClient
> *client, RedsStream *stream,
>
More information about the Spice-devel
mailing list