[Spice-devel] [PATCH 1/2] usb-device-widget: Improve "there are no free USB channnels" string

Fabiano FidĂȘncio fidencio at redhat.com
Tue Jan 19 13:36:37 PST 2016


As the message can be understand as an error message, let's replace it
for a more user-friendly message and display it in the infobar as an
info message instead of a warning message.

Related: rhbz#1298772
---
 src/spice-client.h       |  2 ++
 src/usb-device-manager.c |  6 ++++--
 src/usb-device-widget.c  | 10 ++++++++--
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/spice-client.h b/src/spice-client.h
index 32b79ea..cccb325 100644
--- a/src/spice-client.h
+++ b/src/spice-client.h
@@ -70,6 +70,7 @@ G_BEGIN_DECLS
  * @SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME: username is required
  * @SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME: password and username are required
  * @SPICE_CLIENT_ERROR_USB_SERVICE: USB service error
+ * @SPICE_CLIENT_ERROR_USB_NO_FREE_CHANNELS_AVAILABLE: there are no more free channels available for redirecting a device
  *
  * Error codes returned by spice-client API.
  */
@@ -82,6 +83,7 @@ typedef enum
     SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME,
     SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME,
     SPICE_CLIENT_ERROR_USB_SERVICE,
+    SPICE_CLIENT_ERROR_USB_NO_FREE_CHANNELS_AVAILABLE,
 } SpiceClientError;
 
 #ifndef SPICE_DISABLE_DEPRECATED
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index c62f56e..a22d926 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -1673,8 +1673,10 @@ spice_usb_device_manager_can_redirect_device(SpiceUsbDeviceManager  *self,
             break;
     }
     if (i == priv->channels->len) {
-        g_set_error_literal(err, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
-                            _("There are no free USB channels"));
+        g_set_error_literal(err,
+                SPICE_CLIENT_ERROR,
+                SPICE_CLIENT_ERROR_USB_NO_FREE_CHANNELS_AVAILABLE,
+                _("All available USB channels are in use.\nNo additional devices can be redirected"));
         return FALSE;
     }
 
diff --git a/src/usb-device-widget.c b/src/usb-device-widget.c
index fe983c9..830bdce 100644
--- a/src/usb-device-widget.c
+++ b/src/usb-device-widget.c
@@ -74,6 +74,7 @@ struct _SpiceUsbDeviceWidgetPrivate {
     GtkWidget *info_bar;
     gchar *err_msg;
     gsize device_count;
+    gboolean is_info_message;
 };
 
 static guint signals[LAST_SIGNAL] = { 0, };
@@ -381,6 +382,10 @@ static void check_can_redirect(GtkWidget *widget, gpointer user_data)
     /* If we cannot redirect this device, append the error message to
        err_msg, but only if it is *not* already there! */
     if (!can_redirect) {
+        priv->is_info_message = g_error_matches(err,
+                SPICE_CLIENT_ERROR,
+                SPICE_CLIENT_ERROR_USB_NO_FREE_CHANNELS_AVAILABLE);
+
         if (priv->err_msg) {
             if (!strstr(priv->err_msg, err->message)) {
                 gchar *old_err_msg = priv->err_msg;
@@ -407,8 +412,9 @@ static gboolean spice_usb_device_widget_update_status(gpointer user_data)
 
     if (priv->err_msg) {
         spice_usb_device_widget_show_info_bar(self, priv->err_msg,
-                                              GTK_MESSAGE_INFO,
-                                              GTK_STOCK_DIALOG_WARNING);
+                GTK_MESSAGE_INFO,
+                priv->is_info_message ?
+                GTK_STOCK_DIALOG_INFO : GTK_STOCK_DIALOG_WARNING);
         g_free(priv->err_msg);
         priv->err_msg = NULL;
     } else {
-- 
2.5.0



More information about the Spice-devel mailing list