You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.1 KiB
87 lines
3.1 KiB
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
|
|
index b446c01..95740ff 100644
|
|
--- a/plugins/rdp/vinagre-rdp-tab.c
|
|
+++ b/plugins/rdp/vinagre-rdp-tab.c
|
|
@@ -76,7 +76,7 @@ struct _VinagreRdpTabPrivate
|
|
|
|
G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB)
|
|
|
|
-static void open_freerdp (VinagreRdpTab *rdp_tab);
|
|
+static gboolean open_freerdp (VinagreRdpTab *rdp_tab);
|
|
static void setup_toolbar (VinagreRdpTab *rdp_tab);
|
|
static void vinagre_rdp_tab_set_scaling (VinagreRdpTab *tab,
|
|
gboolean scaling);
|
|
@@ -248,9 +248,8 @@ vinagre_rdp_tab_constructed (GObject *object)
|
|
G_OBJECT_CLASS (vinagre_rdp_tab_parent_class)->constructed (object);
|
|
|
|
setup_toolbar (rdp_tab);
|
|
- open_freerdp (rdp_tab);
|
|
-
|
|
- g_idle_add ((GSourceFunc) emit_delayed_signal, object);
|
|
+ if (open_freerdp (rdp_tab))
|
|
+ g_idle_add ((GSourceFunc) emit_delayed_signal, object);
|
|
}
|
|
|
|
static void
|
|
@@ -947,8 +946,6 @@ frdp_authenticate (freerdp *instance,
|
|
}
|
|
else
|
|
{
|
|
- vinagre_tab_remove_from_notebook (tab);
|
|
-
|
|
return FALSE;
|
|
}
|
|
|
|
@@ -1239,7 +1236,7 @@ init_display (VinagreRdpTab *rdp_tab)
|
|
rdp_tab);
|
|
}
|
|
|
|
-static void
|
|
+static gboolean
|
|
open_freerdp (VinagreRdpTab *rdp_tab)
|
|
{
|
|
VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
|
@@ -1248,6 +1245,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
gboolean success = TRUE;
|
|
gboolean cancelled = FALSE;
|
|
guint authentication_errors = 0;
|
|
+ gboolean result = FALSE;
|
|
|
|
priv->events = g_queue_new ();
|
|
|
|
@@ -1260,10 +1258,11 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
success = freerdp_connect (priv->freerdp_session);
|
|
if (!success)
|
|
{
|
|
- authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
|
|
- freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
|
|
+ authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_AUTHENTICATION_FAILED ||
|
|
+ freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED;
|
|
|
|
- cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
|
|
+ cancelled = freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS ||
|
|
+ freerdp_get_last_error (priv->freerdp_session->context) == FREERDP_ERROR_CONNECT_CANCELLED;
|
|
|
|
freerdp_free (priv->freerdp_session);
|
|
init_freerdp (rdp_tab);
|
|
@@ -1244,7 +1243,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
init_freerdp (rdp_tab);
|
|
}
|
|
}
|
|
- while (!success && authentication_errors < 3);
|
|
+ while (!success && authentication_errors < 3 && !cancelled);
|
|
|
|
if (!success)
|
|
{
|
|
@@ -1284,7 +1283,10 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
{
|
|
priv->authentication_attempts = 0;
|
|
priv->update_id = g_timeout_add (5, (GSourceFunc) update, rdp_tab);
|
|
+ result = TRUE;
|
|
}
|
|
+
|
|
+ return result;
|
|
}
|
|
|
|
static void
|