Blame SOURCES/vinagre-3.22.0-rdp-connection-cancel.patch

5d97d9
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
5d97d9
index b446c01..95740ff 100644
5d97d9
--- a/plugins/rdp/vinagre-rdp-tab.c
5d97d9
+++ b/plugins/rdp/vinagre-rdp-tab.c
5d97d9
@@ -76,7 +76,7 @@ struct _VinagreRdpTabPrivate
5d97d9
 
5d97d9
 G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB)
5d97d9
 
5d97d9
-static void open_freerdp (VinagreRdpTab *rdp_tab);
5d97d9
+static gboolean open_freerdp (VinagreRdpTab *rdp_tab);
5d97d9
 static void setup_toolbar (VinagreRdpTab *rdp_tab);
5d97d9
 static void vinagre_rdp_tab_set_scaling (VinagreRdpTab *tab,
5d97d9
                                          gboolean       scaling);
5d97d9
@@ -248,9 +248,8 @@ vinagre_rdp_tab_constructed (GObject *object)
5d97d9
     G_OBJECT_CLASS (vinagre_rdp_tab_parent_class)->constructed (object);
5d97d9
 
5d97d9
   setup_toolbar (rdp_tab);
5d97d9
-  open_freerdp (rdp_tab);
5d97d9
-
5d97d9
-  g_idle_add ((GSourceFunc) emit_delayed_signal, object);
5d97d9
+  if (open_freerdp (rdp_tab))
5d97d9
+    g_idle_add ((GSourceFunc) emit_delayed_signal, object);
5d97d9
 }
5d97d9
 
5d97d9
 static void
5d97d9
@@ -947,8 +946,6 @@ frdp_authenticate (freerdp  *instance,
5d97d9
     }
5d97d9
   else
5d97d9
     {
5d97d9
-      vinagre_tab_remove_from_notebook (tab);
5d97d9
-
5d97d9
       return FALSE;
5d97d9
     }
5d97d9
 
5d97d9
@@ -1239,7 +1236,7 @@ init_display (VinagreRdpTab *rdp_tab)
5d97d9
                                                    rdp_tab);
5d97d9
 }
5d97d9
 
5d97d9
-static void
5d97d9
+static gboolean
5d97d9
 open_freerdp (VinagreRdpTab *rdp_tab)
5d97d9
 {
5d97d9
   VinagreRdpTabPrivate *priv = rdp_tab->priv;
5d97d9
@@ -1248,6 +1245,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
5d97d9
   gboolean              success = TRUE;
5d97d9
   gboolean              cancelled = FALSE;
5d97d9
   guint                 authentication_errors = 0;
5d97d9
+  gboolean              result = FALSE;
5d97d9
 
5d97d9
   priv->events = g_queue_new ();
5d97d9
 
5d97d9
@@ -1260,10 +1258,11 @@ open_freerdp (VinagreRdpTab *rdp_tab)
5d97d9
       success = freerdp_connect (priv->freerdp_session);
5d97d9
       if (!success)
5d97d9
         {
5d97d9
-          authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
5d97d9
-                                   freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
5d97d9
+          authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_AUTHENTICATION_FAILED ||
5d97d9
+                                   freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED;
5d97d9
 
5d97d9
-          cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
5d97d9
+          cancelled = freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS ||
5d97d9
+                      freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_CONNECT_CANCELLED;
5d97d9
 
5d97d9
           freerdp_free (priv->freerdp_session);
5d97d9
           init_freerdp (rdp_tab);
5d97d9
@@ -1244,7 +1243,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
5d97d9
           init_freerdp (rdp_tab);
5d97d9
         }
5d97d9
     }
5d97d9
-  while (!success && authentication_errors < 3);
5d97d9
+  while (!success && authentication_errors < 3 && !cancelled);
5d97d9
 
5d97d9
   if (!success)
5d97d9
     {
5d97d9
@@ -1284,7 +1283,10 @@ open_freerdp (VinagreRdpTab *rdp_tab)
5d97d9
     {
5d97d9
       priv->authentication_attempts = 0;
5d97d9
       priv->update_id = g_timeout_add (5, (GSourceFunc) update, rdp_tab);
5d97d9
+      result = TRUE;
5d97d9
     }
5d97d9
+
5d97d9
+  return result;
5d97d9
 }
5d97d9
 
5d97d9
 static void