[Spice-devel] [PATCH spice-gtk 2/6] usbredir: Treat the user cancelling the policykit dialog as a cancel

Hans de Goede hdegoede at redhat.com
Wed Feb 22 08:28:22 PST 2012


Rather then treating it as any other error. This avoids showing an error
dialog after the user pressed cancel in the policykit dialog.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 gtk/spice-client-glib-usb-acl-helper.c |    5 +++++
 gtk/usb-acl-helper.c                   |   13 ++++++++++---
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/gtk/spice-client-glib-usb-acl-helper.c b/gtk/spice-client-glib-usb-acl-helper.c
index bd01979..aaa1180 100644
--- a/gtk/spice-client-glib-usb-acl-helper.c
+++ b/gtk/spice-client-glib-usb-acl-helper.c
@@ -177,6 +177,11 @@ static void check_authorization_cb(PolkitAuthority *authority,
         return;
     }
 
+    if (polkit_authorization_result_get_dismissed(result)) {
+        ERROR("CANCELED\n");
+        return;
+    }
+
     if (!polkit_authorization_result_get_is_authorized(result)) {
         ERROR("Not authorized\n");
         return;
diff --git a/gtk/usb-acl-helper.c b/gtk/usb-acl-helper.c
index b79e122..6a459c5 100644
--- a/gtk/usb-acl-helper.c
+++ b/gtk/usb-acl-helper.c
@@ -87,6 +87,13 @@ static void spice_usb_acl_helper_class_init(SpiceUsbAclHelperClass *klass)
 /* ------------------------------------------------------------------ */
 /* callbacks                                                          */
 
+static void async_result_set_cancelled(GSimpleAsyncResult *result)
+{
+    g_simple_async_result_set_error(result,
+                G_IO_ERROR, G_IO_ERROR_CANCELLED,
+                "Setting USB device node ACL cancelled");
+}
+
 static gboolean cb_out_watch(GIOChannel    *channel,
                              GIOCondition   cond,
                              gpointer      *user_data)
@@ -111,6 +118,8 @@ static gboolean cb_out_watch(GIOChannel    *channel,
             string[strlen(string) - 1] = 0;
             if (!strcmp(string, "SUCCESS")) {
                 success = TRUE;
+            } else if (!strcmp(string, "CANCELED")) {
+                async_result_set_cancelled(priv->result);
             } else {
                 g_simple_async_result_set_error(priv->result,
                             SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
@@ -278,9 +287,7 @@ void spice_usb_acl_helper_close_acl(SpiceUsbAclHelper *self)
 
     /* If the acl open has not completed yet report it as cancelled */
     if (priv->result) {
-        g_simple_async_result_set_error(priv->result,
-                    G_IO_ERROR, G_IO_ERROR_CANCELLED,
-                    "Setting USB device node ACL cancelled");
+        async_result_set_cancelled(priv->result);
         g_simple_async_result_complete_in_idle(priv->result);
     }
 
-- 
1.7.7.6



More information about the Spice-devel mailing list