summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/usb-device-manager.c1
-rw-r--r--src/usb-device-widget.c6
2 files changed, 7 insertions, 0 deletions
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index cc95c68..9487f38 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -1827,6 +1827,7 @@ void spice_usb_device_manager_disconnect_device_async(SpiceUsbDeviceManager *sel
g_return_if_fail(SPICE_IS_USB_DEVICE_MANAGER(self));
g_return_if_fail(device != NULL);
+ g_return_if_fail(spice_usb_device_manager_is_device_connected(self, device);
SPICE_DEBUG("disconnecting device %p", device);
diff --git a/src/usb-device-widget.c b/src/usb-device-widget.c
index 085f640..d3ea79a 100644
--- a/src/usb-device-widget.c
+++ b/src/usb-device-widget.c
@@ -478,6 +478,7 @@ static void _disconnect_cb(GObject *gobject, GAsyncResult *res, gpointer user_da
connect_cb_data_free(data);
}
+static void checkbox_clicked_cb(GtkWidget *check, gpointer user_data);
static void connect_cb(GObject *gobject, GAsyncResult *res, gpointer user_data)
{
SpiceUsbDeviceManager *manager = SPICE_USB_DEVICE_MANAGER(gobject);
@@ -500,7 +501,12 @@ static void connect_cb(GObject *gobject, GAsyncResult *res, gpointer user_data)
g_signal_emit(self, signals[CONNECT_FAILED], 0, device, err);
g_error_free(err);
+ /* don't trigger a disconnect if connect failed */
+ g_signal_handlers_block_by_func(GTK_TOGGLE_BUTTON(data->check),
+ checkbox_clicked_cb, self);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->check), FALSE);
+ g_signal_handlers_unblock_by_func(GTK_TOGGLE_BUTTON(data->check),
+ checkbox_clicked_cb, self);
}
connect_cb_data_free(data);