--- gtk/usb-device-manager.c | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c index 224b7e8..d9ed8a7 100644 --- a/gtk/usb-device-manager.c +++ b/gtk/usb-device-manager.c @@ -727,6 +727,7 @@ typedef struct _UsbInstallCbInfo { GCancellable *cancellable; GAsyncReadyCallback callback; gpointer user_data; + gboolean is_install; } UsbInstallCbInfo; /** @@ -764,6 +765,7 @@ static void spice_usb_device_manager_drv_install_cb(GObject *gobject, cancellable = cbinfo->cancellable; callback = cbinfo->callback; user_data = cbinfo->user_data; + is_install = cbinfo->is_install; g_free(cbinfo); @@ -1064,6 +1066,7 @@ void spice_usb_device_manager_connect_device_async(SpiceUsbDeviceManager *self, cbinfo->cancellable = cancellable; cbinfo->callback = callback; cbinfo->user_data = user_data; + cbinfo->is_install = TRUE; spice_win_usb_driver_install(installer, device, NULL, spice_usb_device_manager_drv_install_cb, cbinfo); @@ -1113,6 +1116,28 @@ void spice_usb_device_manager_disconnect_device(SpiceUsbDeviceManager *self, channel = spice_usb_device_manager_get_channel_for_dev(self, device); if (channel) spice_usbredir_channel_disconnect_device(channel); + +#ifdef G_OS_WIN32 + SpiceWinUsbDriver *installer; + UsbInstallCbInfo *cbinfo; + + g_warn_if_fail(device != NULL); + + installer = spice_win_usb_driver_new(); + cbinfo = g_new0(UsbInstallCbInfo, 1); + cbinfo->manager = self; + cbinfo->device = spice_usb_device_ref(device); + cbinfo->installer = installer; + cbinfo->cancellable = NULL; + cbinfo->callback = NULL; + cbinfo->user_data = NULL; + cbinfo->is_install = FALSE; + + spice_win_usb_driver_uninstall(installer, device, NULL, + spice_usb_device_manager_drv_install_cb, + cbinfo); +#endif + #endif } -- 1.7.7.6 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel