> > I guess this is just my patch with the erroneous const changes removed? I > guess > it can be considered ACKed then. > Both yes! > > On Mon, 2016-05-23 at 11:46 +0100, Frediano Ziglio wrote: > > From: Jonathon Jongsma <jjongsma@xxxxxxxxxx> > > > > Preparation for converting to GObject > > > > Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > > --- > > server/Makefile.am | 2 + > > server/inputs-channel-client.c | 87 > > ++++++++++++++++++++++++++++++++++++++++++ > > server/inputs-channel-client.h | 48 +++++++++++++++++++++++ > > server/inputs-channel.c | 78 +++++++++++-------------------------- > > server/inputs-channel.h | 2 + > > 5 files changed, 161 insertions(+), 56 deletions(-) > > create mode 100644 server/inputs-channel-client.c > > create mode 100644 server/inputs-channel-client.h > > > > diff --git a/server/Makefile.am b/server/Makefile.am > > index 5a5c7e8..cca3b9b 100644 > > --- a/server/Makefile.am > > +++ b/server/Makefile.am > > @@ -80,6 +80,8 @@ libserver_la_SOURCES = \ > > glz-encoder-priv.h \ > > inputs-channel.c \ > > inputs-channel.h \ > > + inputs-channel-client.c \ > > + inputs-channel-client.h \ > > jpeg-encoder.c \ > > jpeg-encoder.h \ > > lz4-encoder.c \ > > diff --git a/server/inputs-channel-client.c > > b/server/inputs-channel-client.c > > new file mode 100644 > > index 0000000..f9dd6b2 > > --- /dev/null > > +++ b/server/inputs-channel-client.c > > @@ -0,0 +1,87 @@ > > +/* > > + Copyright (C) 2009-2015 Red Hat, Inc. > > + > > + This library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + This library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with this library; if not, see > > <http://www.gnu.org/licenses/ > > >. > > +*/ > > +#ifdef HAVE_CONFIG_H > > +#include <config.h> > > +#endif > > + > > +#include "inputs-channel-client.h" > > +#include "inputs-channel.h" > > +#include "migration-protocol.h" > > + > > +struct InputsChannelClient { > > + RedChannelClient base; > > + uint16_t motion_count; > > +}; > > + > > +RedChannelClient* inputs_channel_client_create(RedChannel *channel, > > + RedClient *client, > > + RedsStream *stream, > > + int monitor_latency, > > + int num_common_caps, > > + uint32_t *common_caps, > > + int num_caps, > > + uint32_t *caps) > > +{ > > + InputsChannelClient* icc = > > + > > (InputsChannelClient*)red_channel_client_create(sizeof(InputsChannelClient), > > + channel, client, > > + stream, > > + monitor_latency, > > + num_common_caps, > > + common_caps, > > num_caps, > > + caps); > > + if (icc) > > + icc->motion_count = 0; > > + return &icc->base; > > +} > > + > > +void inputs_channel_client_send_migrate_data(RedChannelClient *rcc, > > + SpiceMarshaller *m, > > + RedPipeItem *item) > > +{ > > + InputsChannelClient *icc = SPICE_CONTAINEROF(rcc, InputsChannelClient, > > base); > > + InputsChannel *inputs = (InputsChannel*)rcc->channel; > > + > > + inputs_channel_set_src_during_migrate(inputs, FALSE); > > + red_channel_client_init_send_data(rcc, SPICE_MSG_MIGRATE_DATA, item); > > + > > + 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); > > +} > > + > > +void inputs_channel_client_handle_migrate_data(InputsChannelClient *icc, > > + uint16_t motion_count) > > +{ > > + icc->motion_count = motion_count; > > + > > + for (; icc->motion_count >= SPICE_INPUT_MOTION_ACK_BUNCH; > > + icc->motion_count -= SPICE_INPUT_MOTION_ACK_BUNCH) { > > + red_channel_client_pipe_add_type(&icc->base, > > RED_PIPE_ITEM_MOUSE_MOTION_ACK); > > + } > > +} > > + > > +void inputs_channel_client_on_mouse_motion(InputsChannelClient *icc) > > +{ > > + InputsChannel *inputs_channel = (InputsChannel *)icc->base.channel; > > + > > + if (++icc->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; > > + } > > +} > > diff --git a/server/inputs-channel-client.h > > b/server/inputs-channel-client.h > > new file mode 100644 > > index 0000000..e83cc29 > > --- /dev/null > > +++ b/server/inputs-channel-client.h > > @@ -0,0 +1,48 @@ > > +/* > > + Copyright (C) 2009-2015 Red Hat, Inc. > > + > > + This library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + This library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with this library; if not, see > > <http://www.gnu.org/licenses/ > > >. > > +*/ > > + > > +#ifndef _INPUTS_CHANNEL_CLIENT_H_ > > +#define _INPUTS_CHANNEL_CLIENT_H_ > > + > > +#include "red-channel.h" > > + > > +typedef struct InputsChannelClient InputsChannelClient; > > + > > +RedChannelClient* inputs_channel_client_create(RedChannel *channel, > > + RedClient *client, > > + RedsStream *stream, > > + int monitor_latency, > > + int num_common_caps, > > + uint32_t *common_caps, > > + int num_caps, > > + uint32_t *caps); > > + > > +void inputs_channel_client_send_migrate_data(RedChannelClient *rcc, > > + SpiceMarshaller *m, > > + RedPipeItem *item); > > +void inputs_channel_client_handle_migrate_data(InputsChannelClient *icc, > > + uint16_t motion_count); > > +void inputs_channel_client_on_mouse_motion(InputsChannelClient *icc); > > + > > +enum { > > + RED_PIPE_ITEM_INPUTS_INIT = RED_PIPE_ITEM_TYPE_CHANNEL_BASE, > > + RED_PIPE_ITEM_MOUSE_MOTION_ACK, > > + RED_PIPE_ITEM_KEY_MODIFIERS, > > + RED_PIPE_ITEM_MIGRATE_DATA, > > +}; > > + > > +#endif /* _INPUTS_CHANNEL_CLIENT_H_ */ > > diff --git a/server/inputs-channel.c b/server/inputs-channel.c > > index 197823d..a971bbb 100644 > > --- a/server/inputs-channel.c > > +++ b/server/inputs-channel.c > > @@ -39,6 +39,7 @@ > > #include "reds.h" > > #include "reds-stream.h" > > #include "red-channel.h" > > +#include "inputs-channel-client.h" > > #include "main-channel-client.h" > > #include "inputs-channel.h" > > #include "migration-protocol.h" > > @@ -99,11 +100,6 @@ RedsState* > > spice_tablet_state_get_server(SpiceTabletState > > *st) > > return st->reds; > > } > > > > -typedef struct InputsChannelClient { > > - RedChannelClient base; > > - uint16_t motion_count; > > -} InputsChannelClient; > > - > > struct InputsChannel { > > RedChannel base; > > uint8_t recv_buf[RECEIVE_BUF_SIZE]; > > @@ -115,13 +111,6 @@ struct InputsChannel { > > SpiceTabletInstance *tablet; > > }; > > > > -enum { > > - RED_PIPE_ITEM_INPUTS_INIT = RED_PIPE_ITEM_TYPE_CHANNEL_BASE, > > - RED_PIPE_ITEM_MOUSE_MOTION_ACK, > > - RED_PIPE_ITEM_KEY_MODIFIERS, > > - RED_PIPE_ITEM_MIGRATE_DATA, > > -}; > > - > > typedef struct RedInputsPipeItem { > > RedPipeItem base; > > } RedInputsPipeItem; > > @@ -239,21 +228,6 @@ static RedPipeItem *red_inputs_key_modifiers_item_new( > > return &item->base; > > } > > > > -static void inputs_channel_send_migrate_data(RedChannelClient *rcc, > > - SpiceMarshaller *m, > > - RedPipeItem *item) > > -{ > > - InputsChannelClient *icc = SPICE_CONTAINEROF(rcc, InputsChannelClient, > > base); > > - InputsChannel *inputs = SPICE_CONTAINEROF(rcc->channel, InputsChannel, > > base); > > - > > - inputs->src_during_migrate = FALSE; > > - red_channel_client_init_send_data(rcc, SPICE_MSG_MIGRATE_DATA, item); > > - > > - 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); > > -} > > - > > static void inputs_channel_send_item(RedChannelClient *rcc, RedPipeItem > > *base) > > { > > SpiceMarshaller *m = red_channel_client_get_marshaller(rcc); > > @@ -283,7 +257,7 @@ static void inputs_channel_send_item(RedChannelClient > > *rcc, RedPipeItem *base) > > red_channel_client_init_send_data(rcc, > > SPICE_MSG_INPUTS_MOUSE_MOTION_ACK, base); > > break; > > case RED_PIPE_ITEM_MIGRATE_DATA: > > - inputs_channel_send_migrate_data(rcc, m, base); > > + inputs_channel_client_send_migrate_data(rcc, m, base); > > break; > > default: > > spice_warning("invalid pipe iten %d", base->type); > > @@ -331,11 +305,7 @@ static int > > inputs_channel_handle_parsed(RedChannelClient > > *rcc, uint32_t size, ui > > SpiceMouseInstance *mouse = > > inputs_channel_get_mouse(inputs_channel); > > SpiceMsgcMouseMotion *mouse_motion = message; > > > > - if (++icc->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0 && > > - !inputs_channel->src_during_migrate) { > > - red_channel_client_pipe_add_type(rcc, > > RED_PIPE_ITEM_MOUSE_MOTION_ACK); > > - icc->motion_count = 0; > > - } > > + inputs_channel_client_on_mouse_motion(icc); > > if (mouse && reds_get_mouse_mode(reds) == SPICE_MOUSE_MODE_SERVER) > > { > > SpiceMouseInterface *sif; > > sif = SPICE_CONTAINEROF(mouse->base.sif, SpiceMouseInterface, > > base); > > @@ -349,11 +319,7 @@ static int > > inputs_channel_handle_parsed(RedChannelClient > > *rcc, uint32_t size, ui > > SpiceMsgcMousePosition *pos = message; > > SpiceTabletInstance *tablet = > > inputs_channel_get_tablet(inputs_channel); > > > > - if (++icc->motion_count % SPICE_INPUT_MOTION_ACK_BUNCH == 0 && > > - !inputs_channel->src_during_migrate) { > > - red_channel_client_pipe_add_type(rcc, > > RED_PIPE_ITEM_MOUSE_MOTION_ACK); > > - icc->motion_count = 0; > > - } > > + inputs_channel_client_on_mouse_motion(icc); > > if (reds_get_mouse_mode(reds) != SPICE_MOUSE_MODE_CLIENT) { > > break; > > } > > @@ -523,7 +489,7 @@ static void inputs_connect(RedChannel *channel, > > RedClient > > *client, > > int num_common_caps, uint32_t *common_caps, > > int num_caps, uint32_t *caps) > > { > > - InputsChannelClient *icc; > > + RedChannelClient *rcc; > > > > if (!reds_stream_is_ssl(stream) && > > !red_client_during_migrate_at_target(client)) { > > main_channel_client_push_notify(red_client_get_main(client), > > @@ -531,18 +497,13 @@ static void inputs_connect(RedChannel *channel, > > RedClient *client, > > } > > > > spice_printerr("inputs channel client create"); > > - icc = > > (InputsChannelClient*)red_channel_client_create(sizeof(InputsChannelClient), > > - channel, > > - client, > > - stream, > > - FALSE, > > - num_common_caps, > > common_caps, > > - num_caps, caps); > > - if (!icc) { > > + rcc = inputs_channel_client_create(channel, client, stream, FALSE, > > + num_common_caps, common_caps, > > + num_caps, caps); > > + if (!rcc) { > > return; > > } > > - icc->motion_count = 0; > > - inputs_pipe_add_init(&icc->base); > > + inputs_pipe_add_init(rcc); > > } > > > > static void inputs_migrate(RedChannelClient *rcc) > > @@ -583,7 +544,7 @@ static int > > inputs_channel_handle_migrate_data(RedChannelClient *rcc, > > uint32_t size, > > void *message) > > { > > - InputsChannelClient *icc = SPICE_CONTAINEROF(rcc, InputsChannelClient, > > base); > > + InputsChannelClient *icc = (InputsChannelClient*)rcc; > > InputsChannel *inputs = SPICE_CONTAINEROF(rcc->channel, InputsChannel, > > base); > > SpiceMigrateDataHeader *header; > > SpiceMigrateDataInputs *mig_data; > > @@ -598,12 +559,7 @@ static int > > inputs_channel_handle_migrate_data(RedChannelClient *rcc, > > return FALSE; > > } > > key_modifiers_sender(inputs); > > - icc->motion_count = mig_data->motion_count; > > - > > - for (; icc->motion_count >= SPICE_INPUT_MOTION_ACK_BUNCH; > > - icc->motion_count -= SPICE_INPUT_MOTION_ACK_BUNCH) { > > - red_channel_client_pipe_add_type(rcc, > > RED_PIPE_ITEM_MOUSE_MOTION_ACK); > > - } > > + inputs_channel_client_handle_migrate_data(icc, > > mig_data->motion_count); > > return TRUE; > > } > > > > @@ -709,3 +665,13 @@ void inputs_channel_detach_tablet(InputsChannel > > *inputs, > > SpiceTabletInstance *ta > > inputs->tablet = NULL; > > } > > > > +gboolean inputs_channel_is_src_during_migrate(InputsChannel *inputs) > > +{ > > + return inputs->src_during_migrate; > > +} > > + > > +void inputs_channel_set_src_during_migrate(InputsChannel *inputs, > > + gboolean value) > > +{ > > + inputs->src_during_migrate = value; > > +} > > diff --git a/server/inputs-channel.h b/server/inputs-channel.h > > index 9213aec..5b12fad 100644 > > --- a/server/inputs-channel.h > > +++ b/server/inputs-channel.h > > @@ -43,5 +43,7 @@ int inputs_channel_has_tablet(InputsChannel *inputs); > > void inputs_channel_detach_tablet(InputsChannel *inputs, > > SpiceTabletInstance > > *tablet); > > RedsState* spice_tablet_state_get_server(SpiceTabletState *dev); > > RedsState* spice_kbd_state_get_server(SpiceKbdState *dev); > > +gboolean inputs_channel_is_src_during_migrate(InputsChannel *inputs); > > +void inputs_channel_set_src_during_migrate(InputsChannel *inputs, gboolean > > value); > > > > #endif > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel