[Spice-devel] [PATCH v3 11/13] UsbDeviceWidget: consider asynchronous redirecting flow
Christophe Fergeau
cfergeau at redhat.com
Tue Aug 11 03:58:33 PDT 2015
On Mon, Aug 03, 2015 at 04:10:51PM +0300, Kirill Moizik wrote:
> From: Kirill Moizik <kmoizik at redhat.com>
>
> ---
> src/usb-device-widget.c | 46 ++++++++++++++++++++++++++--------------------
> 1 file changed, 26 insertions(+), 20 deletions(-)
>
> diff --git a/src/usb-device-widget.c b/src/usb-device-widget.c
> index 4d66e12..fcafc92 100644
> --- a/src/usb-device-widget.c
> +++ b/src/usb-device-widget.c
> @@ -366,33 +366,39 @@ static void check_can_redirect(GtkWidget *widget, gpointer user_data)
> SpiceUsbDevice *device;
> gboolean can_redirect;
> GError *err = NULL;
> + gboolean redirecting;
> + g_object_get(priv->manager, "redirecting", &redirecting, NULL);
>
> device = get_usb_device(widget);
> if (!device)
> return; /* Non device widget, ie the info_bar */
>
> - priv->device_count++;
> - can_redirect = spice_usb_device_manager_can_redirect_device(priv->manager,
> - device, &err);
> - gtk_widget_set_sensitive(widget, can_redirect);
> -
> - /* If we cannot redirect this device, append the error message to
> - err_msg, but only if it is *not* already there! */
> - if (!can_redirect) {
> - if (priv->err_msg) {
> - if (!strstr(priv->err_msg, err->message)) {
> - gchar *old_err_msg = priv->err_msg;
> + if (redirecting) {
> + // if we are at redirecting state, then there is at least one usb device
> + priv->device_count++;
> + can_redirect = FALSE;
Imo this should be handled by
spice_usb_device_manager_can_redirect_device() (this can have a special
error-code which is filtered out).
Christophe
> + } else {
>
> - priv->err_msg = g_strdup_printf("%s\n%s", priv->err_msg,
> - err->message);
> - g_free(old_err_msg);
> + priv->device_count++;
> + can_redirect = spice_usb_device_manager_can_redirect_device(priv->manager,
> + device, &err);
> + /* If we cannot redirect this device, append the error message to
> + err_msg, but only if it is *not* already there! */
> + if (!can_redirect) {
> + if (priv->err_msg) {
> + if (!strstr(priv->err_msg, err->message)) {
> + gchar *old_err_msg = priv->err_msg;
> + priv->err_msg = g_strdup_printf("%s\n%s", priv->err_msg,
> + err->message);
> + g_free(old_err_msg);
> + }
> + } else {
> + priv->err_msg = g_strdup(err->message);
> }
> - } else {
> - priv->err_msg = g_strdup(err->message);
> }
> + g_clear_error(&err);
> }
> -
> - g_clear_error(&err);
> + gtk_widget_set_sensitive(widget, can_redirect);
> }
>
> static gboolean spice_usb_device_widget_update_status(gpointer user_data)
> @@ -455,9 +461,9 @@ static void connect_cb(GObject *gobject, GAsyncResult *res, gpointer user_data)
> g_error_free(err);
>
> gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->check), FALSE);
> - spice_usb_device_widget_update_status(self);
> - }
>
> + }
> + spice_usb_device_widget_update_status(self);
> g_object_unref(data->check);
> g_object_unref(data->self);
> g_free(data);
> --
> 2.4.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150811/7e790671/attachment.sig>
More information about the Spice-devel
mailing list