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@xxxxxxxxxx> > --- > 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, > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel