[Spice-devel] [PATCH v5 02/13] win-usb-dev: Track device redirection operations in progress

Jonathon Jongsma jjongsma at redhat.com
Mon Feb 8 17:24:29 UTC 2016


On Thu, 2015-10-29 at 17:27 +0200, Dmitry Fleytman wrote:
> From: Kirill Moizik <kmoizik at redhat.com>
> 
> This commit introduces redirecting property of GUdevClient
> 
> This property indicates when a redirection operation
> is in progress on a device. It's set back to FALSE
> once the device is fully redirected to the guest.
> 
> Signed-off-by: Kirill Moizik <kmoizik at redhat.com>
> Signed-off-by: Dmitry Fleytman <dfleytma at redhat.com>
> ---
>  src/win-usb-dev.c | 61
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
> index 1e4b2d6..60bc434 100644
> --- a/src/win-usb-dev.c
> +++ b/src/win-usb-dev.c
> @@ -32,11 +32,17 @@
>  #define G_UDEV_CLIENT_GET_PRIVATE(obj) \
>      (G_TYPE_INSTANCE_GET_PRIVATE((obj), G_UDEV_TYPE_CLIENT,
> GUdevClientPrivate))
>  
> +enum {
> +    PROP_0,
> +    PROP_REDIRECTING
> +};
> +
>  struct _GUdevClientPrivate {
>      libusb_context *ctx;
>      gssize udev_list_size;
>      GList *udev_list;
>      HWND hwnd;
> +    gboolean redirecting;
>  };
>  
>  #define G_UDEV_CLIENT_WINCLASS_NAME  TEXT("G_UDEV_CLIENT")
> @@ -272,11 +278,52 @@ static void g_udev_client_finalize(GObject *gobject)
>          G_OBJECT_CLASS(g_udev_client_parent_class)->finalize(gobject);
>  }
>  
> +static void g_udev_client_get_property(GObject     *gobject,
> +                                       guint        prop_id,
> +                                       GValue      *value,
> +                                       GParamSpec  *pspec)
> +{
> +    GUdevClient *self = G_UDEV_CLIENT(gobject);
> +    GUdevClientPrivate *priv = self->priv;
> +
> +    switch (prop_id) {
> +    case PROP_REDIRECTING:
> +        g_value_set_boolean(value, priv->redirecting);
> +        break;
> +    default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
> +        break;
> +    }
> +}
> +
> +static void handle_dev_change(GUdevClient *self);


It seems this bit was accidentally included? I don't see it used anywhere within
this patch.

> +
> +static void g_udev_client_set_property(GObject       *gobject,
> +                                       guint          prop_id,
> +                                       const GValue  *value,
> +                                       GParamSpec    *pspec)
> +{
> +    GUdevClient *self = G_UDEV_CLIENT(gobject);
> +    GUdevClientPrivate *priv = self->priv;
> +
> +    switch (prop_id) {
> +    case PROP_REDIRECTING:
> +        priv->redirecting = g_value_get_boolean(value);
> +        break;
> +    default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
> +        break;
> +    }
> +}
> +
>  static void g_udev_client_class_init(GUdevClientClass *klass)
>  {
>      GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
> +    GParamSpec *pspec;
>  
>      gobject_class->finalize = g_udev_client_finalize;
> +    gobject_class->get_property = g_udev_client_get_property;
> +    gobject_class->set_property = g_udev_client_set_property;
>  
>      signals[UEVENT_SIGNAL] =
>          g_signal_new("uevent",
> @@ -290,6 +337,20 @@ static void g_udev_client_class_init(GUdevClientClass
> *klass)
>                       G_TYPE_STRING,
>                       G_UDEV_TYPE_DEVICE);
>  
> +    /**
> +    * GUdevClient::redirecting:
> +    *
> +    * This property indicates when a redirection operation
> +    * is in progress on a device. It's set back to FALSE
> +    * once the device is fully redirected to the guest.
> +    */
> +    pspec = g_param_spec_boolean("redirecting", "Redirecting",
> +                                 "USB redirection operation is in progress",
> +                                 FALSE,
> +                                 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
> +
> +    g_object_class_install_property(gobject_class, PROP_REDIRECTING, pspec);
> +
>      g_type_class_add_private(klass, sizeof(GUdevClientPrivate));
>  }
>  


Aside from the extra declaration above, the code looks fine. I can't yet tell wh
ether this property makes sense until I get farther into the patchset and see
how it is used.

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


More information about the Spice-devel mailing list