Re: [PATCH v3 11/13] UsbDeviceWidget: consider asynchronous redirecting flow

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 03, 2015 at 04:10:51PM +0300, Kirill Moizik wrote:
> From: Kirill Moizik <kmoizik@xxxxxxxxxx>
> 
> ---
>  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@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

Attachment: pgpcJqvd1KrtF.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]