Prepare for GObject port --- server/inputs-channel.c | 68 ++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/server/inputs-channel.c b/server/inputs-channel.c index 85ca155..dfb7ba6 100644 --- a/server/inputs-channel.c +++ b/server/inputs-channel.c @@ -105,8 +105,7 @@ RedsState* spice_tablet_state_get_server(SpiceTabletState *st) return st->reds; } -struct InputsChannel { - RedChannel base; +typedef struct { uint8_t recv_buf[RECEIVE_BUF_SIZE]; VDAgentMouseState mouse_state; int src_during_migrate; @@ -115,6 +114,11 @@ struct InputsChannel { SpiceKbdInstance *keyboard; SpiceMouseInstance *mouse; SpiceTabletInstance *tablet; +} InputsChannelPrivate; + +struct InputsChannel { + RedChannel base; + InputsChannelPrivate priv[1]; }; typedef struct RedKeyModifiersPipeItem { @@ -138,13 +142,13 @@ void inputs_channel_set_tablet_logical_size(InputsChannel *inputs, int x_res, in { SpiceTabletInterface *sif; - sif = SPICE_UPCAST(SpiceTabletInterface, inputs->tablet->base.sif); - sif->set_logical_size(inputs->tablet, x_res, y_res); + sif = SPICE_UPCAST(SpiceTabletInterface, inputs->priv->tablet->base.sif); + sif->set_logical_size(inputs->priv->tablet, x_res, y_res); } const VDAgentMouseState *inputs_channel_get_mouse_state(InputsChannel *inputs) { - return &inputs->mouse_state; + return &inputs->priv->mouse_state; } static uint8_t *inputs_channel_alloc_msg_rcv_buf(RedChannelClient *rcc, @@ -157,7 +161,7 @@ static uint8_t *inputs_channel_alloc_msg_rcv_buf(RedChannelClient *rcc, spice_printerr("error: too large incoming message"); return NULL; } - return inputs_channel->recv_buf; + return inputs_channel->priv->recv_buf; } static void inputs_channel_release_msg_rcv_buf(RedChannelClient *rcc, @@ -183,7 +187,7 @@ static void inputs_channel_release_msg_rcv_buf(RedChannelClient *rcc, static void activate_modifiers_watch(InputsChannel *inputs, RedsState *reds) { - reds_core_timer_start(reds, inputs->key_modifiers_timer, KEY_MODIFIERS_TTL); + reds_core_timer_start(reds, inputs->priv->key_modifiers_timer, KEY_MODIFIERS_TTL); } static void kbd_push_scan(SpiceKbdInstance *sin, uint8_t scan) @@ -259,7 +263,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(red_channel_client_get_channel(rcc))->src_during_migrate = FALSE; + INPUTS_CHANNEL(red_channel_client_get_channel(rcc))->priv->src_during_migrate = FALSE; inputs_channel_client_send_migrate_data(rcc, m, base); break; default: @@ -333,7 +337,7 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui sif->position(tablet, pos->x, pos->y, RED_MOUSE_STATE_TO_LOCAL(pos->buttons_state)); break; } - VDAgentMouseState *mouse_state = &inputs_channel->mouse_state; + VDAgentMouseState *mouse_state = &inputs_channel->priv->mouse_state; mouse_state->x = pos->x; mouse_state->y = pos->y; mouse_state->buttons = RED_MOUSE_BUTTON_STATE_TO_AGENT(pos->buttons_state); @@ -351,11 +355,11 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui } if (reds_get_mouse_mode(reds) == SPICE_MOUSE_MODE_CLIENT) { if (reds_config_get_agent_mouse(reds) && reds_has_vdagent(reds)) { - inputs_channel->mouse_state.buttons = + inputs_channel->priv->mouse_state.buttons = RED_MOUSE_BUTTON_STATE_TO_AGENT(mouse_press->buttons_state) | (dz == -1 ? VD_AGENT_UBUTTON_MASK : 0) | (dz == 1 ? VD_AGENT_DBUTTON_MASK : 0); - reds_handle_agent_mouse_event(reds, &inputs_channel->mouse_state); + reds_handle_agent_mouse_event(reds, &inputs_channel->priv->mouse_state); } else if (inputs_channel_get_tablet(inputs_channel)) { SpiceTabletInterface *sif; sif = SPICE_CONTAINEROF(inputs_channel_get_tablet(inputs_channel)->base.sif, SpiceTabletInterface, base); @@ -373,9 +377,9 @@ static int inputs_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, ui SpiceMsgcMouseRelease *mouse_release = message; if (reds_get_mouse_mode(reds) == SPICE_MOUSE_MODE_CLIENT) { if (reds_config_get_agent_mouse(reds) && reds_has_vdagent(reds)) { - inputs_channel->mouse_state.buttons = + inputs_channel->priv->mouse_state.buttons = RED_MOUSE_BUTTON_STATE_TO_AGENT(mouse_release->buttons_state); - reds_handle_agent_mouse_event(reds, &inputs_channel->mouse_state); + reds_handle_agent_mouse_event(reds, &inputs_channel->priv->mouse_state); } else if (inputs_channel_get_tablet(inputs_channel)) { SpiceTabletInterface *sif; sif = SPICE_CONTAINEROF(inputs_channel_get_tablet(inputs_channel)->base.sif, SpiceTabletInterface, base); @@ -512,14 +516,14 @@ static void inputs_connect(RedChannel *channel, RedClient *client, static void inputs_migrate(RedChannelClient *rcc) { InputsChannel *inputs = INPUTS_CHANNEL(red_channel_client_get_channel(rcc)); - inputs->src_during_migrate = TRUE; + inputs->priv->src_during_migrate = TRUE; red_channel_client_default_migrate(rcc); } static void inputs_channel_push_keyboard_modifiers(InputsChannel *inputs, uint8_t modifiers) { if (!inputs || !red_channel_is_connected(&inputs->base) || - inputs->src_during_migrate) { + inputs->priv->src_during_migrate) { return; } red_channel_pipes_new_add_push(&inputs->base, @@ -602,7 +606,7 @@ InputsChannel* inputs_channel_new(RedsState *reds) red_channel_set_cap(&inputs->base, SPICE_INPUTS_CAP_KEY_SCANCODE); reds_register_channel(reds, &inputs->base); - if (!(inputs->key_modifiers_timer = reds_core_timer_add(reds, key_modifiers_sender, inputs))) { + if (!(inputs->priv->key_modifiers_timer = reds_core_timer_add(reds, key_modifiers_sender, inputs))) { spice_error("key modifiers timer create failed"); } return inputs; @@ -610,65 +614,65 @@ InputsChannel* inputs_channel_new(RedsState *reds) static SpiceKbdInstance* inputs_channel_get_keyboard(InputsChannel *inputs) { - return inputs->keyboard; + return inputs->priv->keyboard; } int inputs_channel_set_keyboard(InputsChannel *inputs, SpiceKbdInstance *keyboard) { - if (inputs->keyboard) { + if (inputs->priv->keyboard) { spice_printerr("already have keyboard"); return -1; } - inputs->keyboard = keyboard; - inputs->keyboard->st = spice_kbd_state_new(red_channel_get_server(&inputs->base)); + inputs->priv->keyboard = keyboard; + inputs->priv->keyboard->st = spice_kbd_state_new(red_channel_get_server(&inputs->base)); return 0; } static SpiceMouseInstance* inputs_channel_get_mouse(InputsChannel *inputs) { - return inputs->mouse; + return inputs->priv->mouse; } int inputs_channel_set_mouse(InputsChannel *inputs, SpiceMouseInstance *mouse) { - if (inputs->mouse) { + if (inputs->priv->mouse) { spice_printerr("already have mouse"); return -1; } - inputs->mouse = mouse; - inputs->mouse->st = spice_mouse_state_new(); + inputs->priv->mouse = mouse; + inputs->priv->mouse->st = spice_mouse_state_new(); return 0; } static SpiceTabletInstance* inputs_channel_get_tablet(InputsChannel *inputs) { - return inputs->tablet; + return inputs->priv->tablet; } int inputs_channel_set_tablet(InputsChannel *inputs, SpiceTabletInstance *tablet, RedsState *reds) { - if (inputs->tablet) { + if (inputs->priv->tablet) { spice_printerr("already have tablet"); return -1; } - inputs->tablet = tablet; - inputs->tablet->st = spice_tablet_state_new(); - inputs->tablet->st->reds = reds; + inputs->priv->tablet = tablet; + inputs->priv->tablet->st = spice_tablet_state_new(); + inputs->priv->tablet->st->reds = reds; return 0; } int inputs_channel_has_tablet(InputsChannel *inputs) { - return inputs != NULL && inputs->tablet != NULL; + return inputs != NULL && inputs->priv->tablet != NULL; } void inputs_channel_detach_tablet(InputsChannel *inputs, SpiceTabletInstance *tablet) { spice_printerr(""); - inputs->tablet = NULL; + inputs->priv->tablet = NULL; } gboolean inputs_channel_is_src_during_migrate(InputsChannel *inputs) { - return inputs->src_during_migrate; + return inputs->priv->src_during_migrate; } -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel