[Spice-devel] [PATCH v2 05/10] Add InputsChannelClientPrivate struct
Jonathon Jongsma
jjongsma at redhat.com
Wed Sep 7 20:37:23 UTC 2016
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
More information about the Spice-devel
mailing list