Encapsulate private data and prepare for port to GObject. --- Changes in v2: - Fixed leak of priv by using 1-element array trick server/inputs-channel-client.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/server/inputs-channel-client.c b/server/inputs-channel-client.c index ce21b9c..6e352dc 100644 --- a/server/inputs-channel-client.c +++ b/server/inputs-channel-client.c @@ -23,11 +23,19 @@ #include "migration-protocol.h" #include "red-channel-client.h" -struct InputsChannelClient { - RedChannelClient base; +typedef struct InputsChannelClientPrivate InputsChannelClientPrivate; +struct InputsChannelClientPrivate +{ uint16_t motion_count; }; +struct InputsChannelClient +{ + RedChannelClient base; + + InputsChannelClientPrivate priv[1]; +}; + RedChannelClient* inputs_channel_client_create(RedChannel *channel, RedClient *client, RedsStream *stream, @@ -45,8 +53,9 @@ RedChannelClient* inputs_channel_client_create(RedChannel *channel, num_common_caps, common_caps, num_caps, caps); - if (icc) - icc->motion_count = 0; + if (icc) { + icc->priv->motion_count = 0; + } return &icc->base; } @@ -60,16 +69,16 @@ void inputs_channel_client_send_migrate_data(RedChannelClient *rcc, spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_INPUTS_MAGIC); spice_marshaller_add_uint32(m, SPICE_MIGRATE_DATA_INPUTS_VERSION); - spice_marshaller_add_uint16(m, icc->motion_count); + spice_marshaller_add_uint16(m, icc->priv->motion_count); } void inputs_channel_client_handle_migrate_data(InputsChannelClient *icc, uint16_t motion_count) { - icc->motion_count = motion_count; + icc->priv->motion_count = motion_count; - for (; icc->motion_count >= SPICE_INPUT_MOTION_ACK_BUNCH; - icc->motion_count -= SPICE_INPUT_MOTION_ACK_BUNCH) { + for (; icc->priv->motion_count >= SPICE_INPUT_MOTION_ACK_BUNCH; + icc->priv->motion_count -= SPICE_INPUT_MOTION_ACK_BUNCH) { red_channel_client_pipe_add_type(&icc->base, RED_PIPE_ITEM_MOUSE_MOTION_ACK); } } @@ -78,9 +87,9 @@ void inputs_channel_client_on_mouse_motion(InputsChannelClient *icc) { InputsChannel *inputs_channel = (InputsChannel *)red_channel_client_get_channel(&icc->base); - if (++icc->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0 && + if (++icc->priv->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0 && !inputs_channel_is_src_during_migrate(inputs_channel)) { red_channel_client_pipe_add_type(&icc->base, RED_PIPE_ITEM_MOUSE_MOTION_ACK); - icc->motion_count = 0; + icc->priv->motion_count = 0; } } -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel