From: Kirill Moizik <kmoizik@xxxxxxxxxx> 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@xxxxxxxxxx> Signed-off-by: Dmitry Fleytman <dfleytma@xxxxxxxxxx> --- 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); + +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)); } -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel