--- gtk/usb-device-manager.c | 55 ++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c index a79bf70..147026c 100644 --- a/gtk/usb-device-manager.c +++ b/gtk/usb-device-manager.c @@ -1043,7 +1043,6 @@ typedef struct _UsbInstallCbInfo { GCancellable *cancellable; GAsyncReadyCallback callback; gpointer user_data; - gboolean is_install; } UsbInstallCbInfo; /** @@ -1072,8 +1071,6 @@ static void spice_usb_device_manager_drv_install_cb(GObject *gobject, UsbInstallCbInfo *cbinfo; GCancellable *cancellable; GAsyncReadyCallback callback; - gboolean is_install; - const gchar *opstr; g_return_if_fail(user_data != NULL); @@ -1084,7 +1081,6 @@ 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); @@ -1092,31 +1088,21 @@ static void spice_usb_device_manager_drv_install_cb(GObject *gobject, g_return_if_fail(SPICE_IS_WIN_USB_DRIVER(installer)); g_return_if_fail(device!= NULL); - opstr = is_install ? "install" : "uninstall"; - SPICE_DEBUG("Win USB driver %s finished", opstr); + SPICE_DEBUG("Win USB driver install finished"); status = spice_win_usb_driver_install_finish(installer, res, &err); - spice_usb_device_unref(device); - - if (is_install) { - spice_usb_device_set_state(device, SPICE_USB_DEVICE_STATE_INSTALLED); - } else { - spice_usb_device_set_state(device, SPICE_USB_DEVICE_STATE_NONE); - } - if (err) { - g_warning("win usb driver %s failed -- %s", opstr, err->message); + g_warning("win usb driver install failed -- %s", err->message); g_error_free(err); } if (!status) { - g_warning("failed to %s win usb driver (status=0)", opstr); + g_warning("failed to install win usb driver (status=0)"); } - if (! is_install) { - return; - } + spice_usb_device_unref(device); + spice_usb_device_set_state(device, SPICE_USB_DEVICE_STATE_INSTALLED); /* device is already ref'ed */ _spice_usb_device_manager_connect_device_async(self, @@ -1126,6 +1112,35 @@ static void spice_usb_device_manager_drv_install_cb(GObject *gobject, user_data); } + +static void spice_usb_device_manager_drv_uninstall_cb(GObject *gobject, + GAsyncResult *res, + gpointer user_data) +{ + UsbInstallCbInfo *cbinfo = user_data; + SpiceUsbDeviceManager *self = cbinfo->manager; + GError *err = NULL; + gint status; + + SPICE_DEBUG("Win USB driver uninstall finished"); + g_return_if_fail(SPICE_IS_USB_DEVICE_MANAGER(self)); + + status = spice_win_usb_driver_uninstall_finish(cbinfo->installer, res, &err); + if (err) { + g_warning("win usb driver uninstall failed -- %s", err->message); + g_clear_error(&err); + } + + if (!status) { + g_warning("failed to uninstall win usb driver (status=0)"); + } + + spice_usb_device_unref(cbinfo->device); + spice_usb_device_set_state(cbinfo->device, SPICE_USB_DEVICE_STATE_NONE); + + g_free(cbinfo); +} + #endif /* ------------------------------------------------------------------ */ @@ -1571,7 +1586,7 @@ void spice_usb_device_manager_disconnect_device(SpiceUsbDeviceManager *self, cbinfo->user_data = NULL; spice_win_usb_driver_uninstall_async(installer, device, NULL, - spice_usb_device_manager_drv_install_cb, + spice_usb_device_manager_drv_uninstall_cb, cbinfo); #endif -- 1.8.5.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel