[Spice-devel] [PATCH v3 11/13] UsbDeviceWidget: consider asynchronous redirecting flow
Dmitry Fleytman
dmitry at daynix.com
Sun Aug 16 05:16:37 PDT 2015
> On Aug 11, 2015, at 13:58 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
>
> 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).
I tried to do like you suggested but didn’t like it because it makes interface
of spice_usb_device_manager_can_redirect_device() ugly.
Also “is redirection in progress” is a temporary system property, not a permanent per-device one.
I’d leave this untouched.
>
> 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 --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150816/2ac4ec83/attachment.html>
More information about the Spice-devel
mailing list