[Spice-devel] [PATCH spice-server] inputs-channel: Prefer channel core over global core interface

Jonathon Jongsma jjongsma at redhat.com
Fri Dec 1 22:39:04 UTC 2017


Acked-by: Jonathon Jongsma <jjongsma at redhat.com>



On Thu, 2017-11-30 at 12:07 +0000, Frediano Ziglio wrote:
> Potentially a channel can run with a different core interface
> than the global one attached to RedsState so instead of calling
> reds_core_* functions use the code interface attached to the
> channel.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/inputs-channel.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/server/inputs-channel.c b/server/inputs-channel.c
> index 8e9eae49..e796e6d3 100644
> --- a/server/inputs-channel.c
> +++ b/server/inputs-channel.c
> @@ -151,9 +151,10 @@ const VDAgentMouseState
> *inputs_channel_get_mouse_state(InputsChannel *inputs)
>       ((state & SPICE_MOUSE_BUTTON_MASK_MIDDLE) ?
> VD_AGENT_MBUTTON_MASK : 0) |    \
>       ((state & SPICE_MOUSE_BUTTON_MASK_RIGHT) ?
> VD_AGENT_RBUTTON_MASK : 0))
>  
> -static void activate_modifiers_watch(InputsChannel *inputs,
> RedsState *reds)
> +static void activate_modifiers_watch(InputsChannel *inputs)
>  {
> -    reds_core_timer_start(reds, inputs->key_modifiers_timer,
> KEY_MODIFIERS_TTL);
> +    SpiceCoreInterfaceInternal *core =
> red_channel_get_core_interface(RED_CHANNEL(inputs));
> +    core->timer_start(core, inputs->key_modifiers_timer,
> KEY_MODIFIERS_TTL);
>  }
>  
>  static void kbd_push_scan(SpiceKbdInstance *sin, uint8_t scan)
> @@ -252,7 +253,7 @@ static bool
> inputs_channel_handle_message(RedChannelClient *rcc, uint16_t type,
>          if (key_down->code == CAPS_LOCK_SCAN_CODE ||
>              key_down->code == NUM_LOCK_SCAN_CODE ||
>              key_down->code == SCROLL_LOCK_SCAN_CODE) {
> -            activate_modifiers_watch(inputs_channel, reds);
> +            activate_modifiers_watch(inputs_channel);
>          }
>      }
>          /* fallthrough */
> @@ -389,7 +390,7 @@ static bool
> inputs_channel_handle_message(RedChannelClient *rcc, uint16_t type,
>              kbd_push_scan(keyboard, CAPS_LOCK_SCAN_CODE);
>              kbd_push_scan(keyboard, CAPS_LOCK_SCAN_CODE |
> SCAN_CODE_RELEASE);
>          }
> -        activate_modifiers_watch(inputs_channel, reds);
> +        activate_modifiers_watch(inputs_channel);
>          break;
>      }
>      case SPICE_MSGC_DISCONNECTING:
> @@ -540,6 +541,7 @@ inputs_channel_constructed(GObject *object)
>      ClientCbs client_cbs = { NULL, };
>      InputsChannel *self = INPUTS_CHANNEL(object);
>      RedsState *reds = red_channel_get_server(RED_CHANNEL(self));
> +    SpiceCoreInterfaceInternal *core =
> red_channel_get_core_interface(RED_CHANNEL(self));
>  
>      G_OBJECT_CLASS(inputs_channel_parent_class)-
> >constructed(object);
>  
> @@ -550,7 +552,7 @@ inputs_channel_constructed(GObject *object)
>      red_channel_set_cap(RED_CHANNEL(self),
> SPICE_INPUTS_CAP_KEY_SCANCODE);
>      reds_register_channel(reds, RED_CHANNEL(self));
>  
> -    self->key_modifiers_timer = reds_core_timer_add(reds,
> key_modifiers_sender, self);
> +    self->key_modifiers_timer = core->timer_add(core,
> key_modifiers_sender, self);
>      if (!self->key_modifiers_timer) {
>          spice_error("key modifiers timer create failed");
>      }
> @@ -560,10 +562,10 @@ static void
>  inputs_channel_finalize(GObject *object)
>  {
>      InputsChannel *self = INPUTS_CHANNEL(object);
> -    RedsState *reds = red_channel_get_server(RED_CHANNEL(self));
> +    SpiceCoreInterfaceInternal *core =
> red_channel_get_core_interface(RED_CHANNEL(self));
>  
>      inputs_channel_detach_tablet(self, self->tablet);
> -    reds_core_timer_remove(reds, self->key_modifiers_timer);
> +    core->timer_remove(core, self->key_modifiers_timer);
>  
>      G_OBJECT_CLASS(inputs_channel_parent_class)->finalize(object);
>  }


More information about the Spice-devel mailing list