summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk4
-rw-r--r--gnu/packages/gnome.scm15
-rw-r--r--gnu/packages/patches/vinagre-newer-freerdp.patch320
-rw-r--r--gnu/packages/patches/vinagre-newer-rdp-parameters.patch212
-rw-r--r--gnu/packages/patches/vinagre-revert-1.patch56
-rw-r--r--gnu/packages/patches/vinagre-revert-2.patch448
6 files changed, 544 insertions, 511 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 925d955a66..0bb0203354 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1227,8 +1227,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/upx-fix-CVE-2017-15056.patch		\
   %D%/packages/patches/valgrind-enable-arm.patch		\
   %D%/packages/patches/valgrind-glibc-compat.patch		\
-  %D%/packages/patches/vinagre-revert-1.patch                   \
-  %D%/packages/patches/vinagre-revert-2.patch                   \
+  %D%/packages/patches/vinagre-newer-freerdp.patch             \
+  %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
   %D%/packages/patches/virglrenderer-CVE-2017-6386.patch 	\
   %D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch		\
   %D%/packages/patches/vorbis-tools-CVE-2014-9640.patch		\
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 5fec15b5d5..2331b33f71 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -2221,13 +2221,20 @@ selection and URL hints.")))
               (uri (string-append "mirror://gnome/sources/" name "/"
                                   (version-major+minor version) "/"
                                   name "-" version ".tar.xz"))
-              (patches ; We have to revert 2 commits to build against freerdp 1.1.
-               (search-patches "vinagre-revert-1.patch"
-                               "vinagre-revert-2.patch"))
+              (patches (search-patches "vinagre-newer-freerdp.patch"
+                                       "vinagre-newer-rdp-parameters.patch"))
               (sha256
                (base32
                 "10jya3jyrm18nbw3v410gbkc7677bqamax44pzgd3j15randn76d"))))
     (build-system glib-or-gtk-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-configure
+           (lambda _
+             (substitute* "configure"
+               (("freerdp") "freerdp2"))
+             #t)))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
@@ -2244,8 +2251,6 @@ selection and URL hints.")))
        ("spice-gtk" ,spice-gtk)
        ("telepathy-glib" ,telepathy-glib)
        ("vte" ,vte)))
-    (arguments
-     `(#:configure-flags '("--enable-rdp")))
     (home-page "https://wiki.gnome.org/Apps/Vinagre")
     (synopsis "Remote desktop viewer for GNOME")
     (description "Vinagre is a remote display client supporting the VNC, SPICE
diff --git a/gnu/packages/patches/vinagre-newer-freerdp.patch b/gnu/packages/patches/vinagre-newer-freerdp.patch
new file mode 100644
index 0000000000..ab79fefc5c
--- /dev/null
+++ b/gnu/packages/patches/vinagre-newer-freerdp.patch
@@ -0,0 +1,320 @@
+https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch
+
+From 83ec3835c36d5cd2c957512c18d21a33b4136c95 Mon Sep 17 00:00:00 2001
+From: Ondrej Holy <oholy@redhat.com>
+Date: Tue, 20 Nov 2018 14:57:17 +0100
+Subject: [PATCH 1/2] Fix build with recent FreeRDP versions
+
+Vinagre is not buildable with recent FreeRDP versions and similar patches
+are used by distributions to fix that. I have also removed some old
+compatibility codes, because it wasn't buildable against 1.0, nor 1.1
+anyway and 1.2 has never been officially released and is superseded by 2.0.
+
+https://gitlab.gnome.org/GNOME/vinagre/issues/4
+---
+ configure.ac                  |   7 +-
+ plugins/rdp/vinagre-rdp-tab.c | 129 +++++++---------------------------
+ 2 files changed, 27 insertions(+), 109 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5b51a82..61617f1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -58,16 +58,15 @@ AS_IF([test "x$have_ssh" = "xyes"],
+ AM_CONDITIONAL([VINAGRE_ENABLE_SSH], [test "x$have_ssh" = "xyes"])
+ 
+ # Whether to enable support for RDP.
+-RDP_DEPS="freerdp x11"
++RDP_DEPS="freerdp2 x11"
++
+ AC_ARG_ENABLE([rdp],
+   [AS_HELP_STRING([--disable-rdp],
+     [Disable Remote Desktop Protocol (RDP) support])])
+ 
+ AS_IF([test "x$enable_rdp" != "xno"],
+   [PKG_CHECK_EXISTS([$RDP_DEPS],
+-    [have_rdp=yes
+-     PKG_CHECK_EXISTS(freerdp >= 1.1,
+-       [AC_DEFINE([HAVE_FREERDP_1_1], [1], [FreeRDP is of version 1.1 or newer])], [])],
++    [have_rdp=yes],
+     [have_rdp=no])],
+   [have_rdp=no])
+ 
+diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
+index 5b98c24..28e3eb6 100644
+--- a/plugins/rdp/vinagre-rdp-tab.c
++++ b/plugins/rdp/vinagre-rdp-tab.c
+@@ -29,12 +29,7 @@
+ #include <freerdp/types.h>
+ #include <freerdp/freerdp.h>
+ #include <freerdp/gdi/gdi.h>
+-#if HAVE_FREERDP_1_1
+ #include <freerdp/locale/keyboard.h>
+-#else
+-#include <freerdp/kbd/vkcodes.h>
+-#include <gdk/gdkx.h>
+-#endif
+ 
+ #include "vinagre-rdp-tab.h"
+ #include "vinagre-rdp-connection.h"
+@@ -44,12 +39,6 @@
+ 
+ #define SELECT_TIMEOUT 50
+ 
+-#if !HAVE_FREERDP_1_1
+-typedef boolean BOOL;
+-typedef uint8   UINT8;
+-typedef uint16  UINT16;
+-#endif
+-
+ struct _VinagreRdpTabPrivate
+ {
+   freerdp         *freerdp_session;
+@@ -476,16 +465,18 @@ frdp_drawing_area_draw (GtkWidget *area,
+   return TRUE;
+ }
+ 
+-static void
++static BOOL
+ frdp_begin_paint (rdpContext *context)
+ {
+   rdpGdi *gdi = context->gdi;
+ 
+   gdi->primary->hdc->hwnd->invalid->null = 1;
+   gdi->primary->hdc->hwnd->ninvalid = 0;
++
++  return TRUE;
+ }
+ 
+-static void
++static BOOL
+ frdp_end_paint (rdpContext *context)
+ {
+   VinagreRdpTab        *rdp_tab = ((frdpContext *) context)->rdp_tab;
+@@ -495,7 +486,7 @@ frdp_end_paint (rdpContext *context)
+   gint                  x, y, w, h;
+ 
+   if (gdi->primary->hdc->hwnd->invalid->null)
+-    return;
++    return TRUE;
+ 
+   x = gdi->primary->hdc->hwnd->invalid->x;
+   y = gdi->primary->hdc->hwnd->invalid->y;
+@@ -517,6 +508,8 @@ frdp_end_paint (rdpContext *context)
+     {
+       gtk_widget_queue_draw_area (priv->display, x, y, w, h);
+     }
++
++  return TRUE;
+ }
+ 
+ static BOOL
+@@ -524,7 +517,6 @@ frdp_pre_connect (freerdp *instance)
+ {
+   rdpSettings *settings = instance->settings;
+ 
+-#if HAVE_FREERDP_1_1
+   settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE;
+   settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE;
+   settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE;
+@@ -549,32 +541,6 @@ frdp_pre_connect (freerdp *instance)
+   settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE;
+   settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE;
+   settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE;
+-#else
+-  settings->order_support[NEG_DSTBLT_INDEX] = true;
+-  settings->order_support[NEG_PATBLT_INDEX] = true;
+-  settings->order_support[NEG_SCRBLT_INDEX] = true;
+-  settings->order_support[NEG_OPAQUE_RECT_INDEX] = true;
+-  settings->order_support[NEG_DRAWNINEGRID_INDEX] = false;
+-  settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
+-  settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
+-  settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
+-  settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = true;
+-  settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false;
+-  settings->order_support[NEG_LINETO_INDEX] = true;
+-  settings->order_support[NEG_POLYLINE_INDEX] = true;
+-  settings->order_support[NEG_MEMBLT_INDEX] = true;
+-  settings->order_support[NEG_MEM3BLT_INDEX] = false;
+-  settings->order_support[NEG_MEMBLT_V2_INDEX] = true;
+-  settings->order_support[NEG_MEM3BLT_V2_INDEX] = false;
+-  settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
+-  settings->order_support[NEG_GLYPH_INDEX_INDEX] = true;
+-  settings->order_support[NEG_FAST_INDEX_INDEX] = true;
+-  settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
+-  settings->order_support[NEG_POLYGON_SC_INDEX] = false;
+-  settings->order_support[NEG_POLYGON_CB_INDEX] = false;
+-  settings->order_support[NEG_ELLIPSE_SC_INDEX] = false;
+-  settings->order_support[NEG_ELLIPSE_CB_INDEX] = false;
+-#endif
+ 
+   return TRUE;
+ }
+@@ -587,15 +553,7 @@ frdp_post_connect (freerdp *instance)
+   rdpGdi               *gdi;
+   int                   stride;
+ 
+-  gdi_init (instance,
+-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \
+-    !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && \
+-    FREERDP_VERSION_MINOR >= 2))
+-                    CLRBUF_24BPP,
+-#else
+-                    CLRBUF_32BPP,
+-#endif
+-                    NULL);
++  gdi_init (instance, PIXEL_FORMAT_BGRA32);
+   gdi = instance->context->gdi;
+ 
+   instance->update->BeginPaint = frdp_begin_paint;
+@@ -705,21 +663,15 @@ frdp_key_pressed (GtkWidget   *widget,
+   VinagreRdpTab        *rdp_tab = (VinagreRdpTab *) user_data;
+   VinagreRdpTabPrivate *priv = rdp_tab->priv;
+   frdpEventKey         *frdp_event;
+-#if HAVE_FREERDP_1_1
+   UINT16                scancode;
+-#endif
+ 
+   frdp_event = g_new0 (frdpEventKey, 1);
+   frdp_event->type = FRDP_EVENT_TYPE_KEY;
+   frdp_event->flags = event->type == GDK_KEY_PRESS ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE;
+ 
+-#if HAVE_FREERDP_1_1
+   scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode (event->hardware_keycode);
+   frdp_event->code = RDP_SCANCODE_CODE(scancode);
+   frdp_event->extended = RDP_SCANCODE_EXTENDED(scancode);
+-#else
+-  frdp_event->code = freerdp_kbd_get_scancode_by_keycode (event->hardware_keycode, &frdp_event->extended);
+-#endif
+ 
+   if (frdp_event->extended)
+     frdp_event->flags |= KBD_FLAGS_EXTENDED;
+@@ -934,11 +886,13 @@ frdp_authenticate (freerdp  *instance,
+   return TRUE;
+ }
+ 
+-static BOOL
++static DWORD
+ frdp_certificate_verify (freerdp *instance,
+-                         char    *subject,
+-                         char    *issuer,
+-                         char    *fingerprint)
++                         const char *common_name,
++                         const char *subject,
++                         const char *issuer,
++                         const char *fingerprint,
++                         BOOL host_mismatch)
+ {
+   VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
+   GtkBuilder *builder;
+@@ -968,17 +922,18 @@ frdp_certificate_verify (freerdp *instance,
+   gtk_widget_hide (dialog);
+ 
+ 
+-  return response == GTK_RESPONSE_YES;
++  return (response == GTK_RESPONSE_YES) ? 1 : 0;
+ }
+ 
+-
+-#if HAVE_FREERDP_1_1
+-static BOOL
++static DWORD
+ frdp_changed_certificate_verify (freerdp *instance,
+-                                 char    *subject,
+-                                 char    *issuer,
+-                                 char    *new_fingerprint,
+-                                 char    *old_fingerprint)
++                                 const char *common_name,
++                                 const char *subject,
++                                 const char *issuer,
++                                 const char *new_fingerprint,
++                                 const char *old_subject,
++                                 const char *old_issuer,
++                                 const char *old_fingerprint)
+ {
+   VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
+   GtkBuilder *builder;
+@@ -1023,9 +978,8 @@ frdp_changed_certificate_verify (freerdp *instance,
+   gtk_widget_hide (dialog);
+ 
+ 
+-  return response == GTK_RESPONSE_YES;
++  return (response == GTK_RESPONSE_YES) ? 1 : 0;
+ }
+-#endif
+ 
+ static void
+ init_freerdp (VinagreRdpTab *rdp_tab)
+@@ -1053,15 +1007,9 @@ init_freerdp (VinagreRdpTab *rdp_tab)
+   priv->freerdp_session->PostConnect = frdp_post_connect;
+   priv->freerdp_session->Authenticate = frdp_authenticate;
+   priv->freerdp_session->VerifyCertificate = frdp_certificate_verify;
+-#if HAVE_FREERDP_1_1
+   priv->freerdp_session->VerifyChangedCertificate = frdp_changed_certificate_verify;
+-#endif
+ 
+-#if HAVE_FREERDP_1_1
+   priv->freerdp_session->ContextSize = sizeof (frdpContext);
+-#else
+-  priv->freerdp_session->context_size = sizeof (frdpContext);
+-#endif
+ 
+   freerdp_context_new (priv->freerdp_session);
+   ((frdpContext *) priv->freerdp_session->context)->rdp_tab = rdp_tab;
+@@ -1070,53 +1018,24 @@ init_freerdp (VinagreRdpTab *rdp_tab)
+   settings = priv->freerdp_session->settings;
+ 
+   /* Security settings */
+-#if HAVE_FREERDP_1_1
+   settings->RdpSecurity = TRUE;
+   settings->TlsSecurity = TRUE;
+   settings->NlaSecurity = TRUE;
+   settings->EncryptionMethods = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
+   settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
+-#else
+-  settings->rdp_security = true;
+-  settings->tls_security = true;
+-  settings->nla_security = true;
+-  settings->encryption = true;
+-  settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
+-  settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
+-#endif
+-#include <freerdp/version.h>
+-#if (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2 && FREERDP_VERSION_REVISION >= 1) || (FREERDP_VERSION_MAJOR == 2)
+   settings->UseRdpSecurityLayer = FALSE;
+-#else
+-  settings->DisableEncryption = FALSE;
+-#endif
+ 
+   /* Set display size */
+-#if HAVE_FREERDP_1_1
+   settings->DesktopWidth = width;
+   settings->DesktopHeight = height;
+-#else
+-  settings->width = width;
+-  settings->height = height;
+-#endif
+ 
+   /* Set hostname */
+-#if HAVE_FREERDP_1_1
+   settings->WindowTitle = g_strdup (hostname);
+   settings->ServerHostname = g_strdup (hostname);
+   settings->ServerPort = port;
+-#else
+-  settings->window_title = g_strdup (hostname);
+-  settings->hostname = g_strdup (hostname);
+-  settings->port = port;
+-#endif
+ 
+   /* Set keyboard layout */
+-#if HAVE_FREERDP_1_1
+   freerdp_keyboard_init (KBD_US);
+-#else
+-  freerdp_kbd_init (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), KBD_US);
+-#endif
+ 
+   /* Allow font smoothing by default */
+   settings->AllowFontSmoothing = TRUE;
+-- 
+2.18.1
+
diff --git a/gnu/packages/patches/vinagre-newer-rdp-parameters.patch b/gnu/packages/patches/vinagre-newer-rdp-parameters.patch
new file mode 100644
index 0000000000..99bcee5a98
--- /dev/null
+++ b/gnu/packages/patches/vinagre-newer-rdp-parameters.patch
@@ -0,0 +1,212 @@
+https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch
+
+From 141f9383129795da267a8111897fb3a0a324b080 Mon Sep 17 00:00:00 2001
+From: Ondrej Holy <oholy@redhat.com>
+Date: Thu, 22 Nov 2018 17:22:35 +0100
+Subject: [PATCH 2/2] Handle new RDP certificate parameters
+
+The freerdp2 certificate callbacks contains more parameters, let's
+present some of them to user also.
+---
+ data/vinagre.ui               | 80 ++++++++++++++++++++++++++++++-----
+ plugins/rdp/vinagre-rdp-tab.c | 26 +++++-------
+ 2 files changed, 80 insertions(+), 26 deletions(-)
+
+diff --git a/data/vinagre.ui b/data/vinagre.ui
+index 3135336..d7ce258 100644
+--- a/data/vinagre.ui
++++ b/data/vinagre.ui
+@@ -885,7 +885,7 @@ Do you trust the new certificate?</property>
+                 <property name="vexpand">True</property>
+                 <property name="xalign">0</property>
+                 <property name="xpad">12</property>
+-                <property name="label" translatable="yes" comments="Subject of the certificate.">Subject:</property>
++                <property name="label" translatable="yes" comments="Subject of the certificate.">New subject:</property>
+               </object>
+               <packing>
+                 <property name="left_attach">0</property>
+@@ -901,7 +901,7 @@ Do you trust the new certificate?</property>
+                 <property name="vexpand">True</property>
+                 <property name="xalign">0</property>
+                 <property name="xpad">12</property>
+-                <property name="label" translatable="yes" comments="Issuer of the certificate.">Issuer:</property>
++                <property name="label" translatable="yes" comments="Issuer of the certificate.">New issuer:</property>
+               </object>
+               <packing>
+                 <property name="left_attach">0</property>
+@@ -927,7 +927,55 @@ Do you trust the new certificate?</property>
+               </packing>
+             </child>
+             <child>
+-              <object class="GtkLabel" id="certificate_changed_subject">
++              <object class="GtkLabel">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="vexpand">True</property>
++                <property name="xalign">0</property>
++                <property name="xpad">12</property>
++                <property name="label" translatable="yes" comments="Subject of the old certificate.">Old subject:</property>
++              </object>
++              <packing>
++                <property name="left_attach">0</property>
++                <property name="top_attach">3</property>
++                <property name="width">1</property>
++                <property name="height">1</property>
++              </packing>
++            </child>
++            <child>
++              <object class="GtkLabel">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="vexpand">True</property>
++                <property name="xalign">0</property>
++                <property name="xpad">12</property>
++                <property name="label" translatable="yes" comments="Issuer of the old certificate.">Old issuer:</property>
++              </object>
++              <packing>
++                <property name="left_attach">0</property>
++                <property name="top_attach">4</property>
++                <property name="width">1</property>
++                <property name="height">1</property>
++              </packing>
++            </child>
++            <child>
++              <object class="GtkLabel">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="vexpand">True</property>
++                <property name="xalign">0</property>
++                <property name="xpad">12</property>
++                <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property>
++              </object>
++              <packing>
++                <property name="left_attach">0</property>
++                <property name="top_attach">5</property>
++                <property name="width">1</property>
++                <property name="height">1</property>
++              </packing>
++            </child>
++            <child>
++              <object class="GtkLabel" id="certificate_changed_new_subject">
+                 <property name="visible">True</property>
+                 <property name="can_focus">False</property>
+                 <property name="hexpand">True</property>
+@@ -942,7 +990,7 @@ Do you trust the new certificate?</property>
+               </packing>
+             </child>
+             <child>
+-              <object class="GtkLabel" id="certificate_changed_issuer">
++              <object class="GtkLabel" id="certificate_changed_new_issuer">
+                 <property name="visible">True</property>
+                 <property name="can_focus">False</property>
+                 <property name="hexpand">True</property>
+@@ -972,21 +1020,33 @@ Do you trust the new certificate?</property>
+               </packing>
+             </child>
+             <child>
+-              <object class="GtkLabel" id="certificate_changed_old_fingerprint_label">
++              <object class="GtkLabel" id="certificate_changed_old_subject">
+                 <property name="visible">True</property>
+                 <property name="can_focus">False</property>
+-                <property name="vexpand">True</property>
++                <property name="hexpand">True</property>
+                 <property name="xalign">0</property>
+-                <property name="xpad">12</property>
+-                <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property>
+               </object>
+               <packing>
+-                <property name="left_attach">0</property>
++                <property name="left_attach">1</property>
+                 <property name="top_attach">3</property>
+                 <property name="width">1</property>
+                 <property name="height">1</property>
+               </packing>
+             </child>
++            <child>
++              <object class="GtkLabel" id="certificate_changed_old_issuer">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="hexpand">True</property>
++                <property name="xalign">0</property>
++              </object>
++              <packing>
++                <property name="left_attach">1</property>
++                <property name="top_attach">4</property>
++                <property name="width">1</property>
++                <property name="height">1</property>
++              </packing>
++            </child>
+             <child>
+               <object class="GtkLabel" id="certificate_changed_old_fingerprint">
+                 <property name="visible">True</property>
+@@ -997,7 +1057,7 @@ Do you trust the new certificate?</property>
+               </object>
+               <packing>
+                 <property name="left_attach">1</property>
+-                <property name="top_attach">3</property>
++                <property name="top_attach">5</property>
+                 <property name="width">1</property>
+                 <property name="height">1</property>
+               </packing>
+diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
+index 28e3eb6..30a8698 100644
+--- a/plugins/rdp/vinagre-rdp-tab.c
++++ b/plugins/rdp/vinagre-rdp-tab.c
+@@ -917,6 +917,7 @@ frdp_certificate_verify (freerdp *instance,
+   widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_fingerprint"));
+   gtk_label_set_text (GTK_LABEL (widget), fingerprint);
+ 
++  /* FIXME: Warn user in case of host_mismatch. */
+ 
+   response = gtk_dialog_run (GTK_DIALOG (dialog));
+   gtk_widget_hide (dialog);
+@@ -939,7 +940,6 @@ frdp_changed_certificate_verify (freerdp *instance,
+   GtkBuilder *builder;
+   GtkWidget  *dialog;
+   GtkWidget  *widget;
+-  GtkWidget  *label;
+   gint        response;
+ 
+   builder = vinagre_utils_get_builder ();
+@@ -950,29 +950,23 @@ frdp_changed_certificate_verify (freerdp *instance,
+                           _("Connect"), GTK_RESPONSE_YES, NULL);
+   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+ 
+-  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_subject"));
++  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_subject"));
+   gtk_label_set_text (GTK_LABEL (widget), subject);
+ 
+-  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_issuer"));
++  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_issuer"));
+   gtk_label_set_text (GTK_LABEL (widget), issuer);
+ 
+   widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_fingerprint"));
+   gtk_label_set_text (GTK_LABEL (widget), new_fingerprint);
+ 
+-  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint"));
+-  label = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint_label"));
+-  if (old_fingerprint != NULL && old_fingerprint[0] != '\0')
+-    {
+-      gtk_label_set_text (GTK_LABEL (widget), old_fingerprint);
+-      gtk_widget_show (widget);
+-      gtk_widget_show (label);
+-    }
+-  else
+-    {
+-      gtk_widget_hide (widget);
+-      gtk_widget_hide (label);
+-    }
++  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_subject"));
++  gtk_label_set_text (GTK_LABEL (widget), old_subject);
+ 
++  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_issuer"));
++  gtk_label_set_text (GTK_LABEL (widget), old_issuer);
++
++  widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint"));
++  gtk_label_set_text (GTK_LABEL (widget), old_fingerprint);
+ 
+   response = gtk_dialog_run (GTK_DIALOG (dialog));
+   gtk_widget_hide (dialog);
+-- 
+2.18.1
+
diff --git a/gnu/packages/patches/vinagre-revert-1.patch b/gnu/packages/patches/vinagre-revert-1.patch
deleted file mode 100644
index 5a983770b7..0000000000
--- a/gnu/packages/patches/vinagre-revert-1.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Patch taken from Debian: revert changes that prevent building against freerdp
-version 1.1 branch.
-
-From 8ebc0685b85e0d1f70eb00171f2e7712de3d44bd Mon Sep 17 00:00:00 2001
-From: Michael Biebl <biebl@debian.org>
-Date: Thu, 22 Sep 2016 01:15:55 +0200
-Subject: [PATCH 1/2] Revert "Improve FreeRDP authentication failure handling"
-
-This reverts commit d7b4f88943e8615d252d27e1efc58cb64a9e1821.
----
- plugins/rdp/vinagre-rdp-tab.c | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
-index b731f9b..8572bc3 100644
---- a/plugins/rdp/vinagre-rdp-tab.c
-+++ b/plugins/rdp/vinagre-rdp-tab.c
-@@ -1195,8 +1195,8 @@ open_freerdp (VinagreRdpTab *rdp_tab)
-   VinagreTab           *tab = VINAGRE_TAB (rdp_tab);
-   GtkWindow            *window = GTK_WINDOW (vinagre_tab_get_window (tab));
-   gboolean              success = TRUE;
-+  gboolean              authentication_error = FALSE;
-   gboolean              cancelled = FALSE;
--  guint                 authentication_errors = 0;
- 
-   priv->events = g_queue_new ();
- 
-@@ -1205,12 +1205,14 @@ open_freerdp (VinagreRdpTab *rdp_tab)
- 
-   do
-     {
-+      authentication_error = FALSE;
-+
-       /* Run FreeRDP session */
-       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_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
-+                                 freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
- 
-           cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
- 
-@@ -1218,7 +1220,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
-           init_freerdp (rdp_tab);
-         }
-     }
--  while (!success && authentication_errors < 3);
-+  while (!success && authentication_error);
- 
-   if (!success)
-     {
--- 
-2.9.3
-
diff --git a/gnu/packages/patches/vinagre-revert-2.patch b/gnu/packages/patches/vinagre-revert-2.patch
deleted file mode 100644
index 686ee203e4..0000000000
--- a/gnu/packages/patches/vinagre-revert-2.patch
+++ /dev/null
@@ -1,448 +0,0 @@
-Patch taken from Debian: revert changes that prevent building against freerdp
-version 1.1 branch.
-
-From bb1828b6b7eb29bb037bcc687cf10f916ddc7561 Mon Sep 17 00:00:00 2001
-From: Michael Biebl <biebl@debian.org>
-Date: Thu, 22 Sep 2016 01:18:16 +0200
-Subject: [PATCH 2/2] Revert "Store credentials for RDP"
-
-This reverts commit 60dea279a24c7f0e398b89a0a60d45e80087ed1d.
----
- plugins/rdp/vinagre-rdp-connection.c |  22 +---
- plugins/rdp/vinagre-rdp-plugin.c     |  29 +----
- plugins/rdp/vinagre-rdp-tab.c        | 231 +++++++++++++++++------------------
- 3 files changed, 123 insertions(+), 159 deletions(-)
-
-diff --git a/plugins/rdp/vinagre-rdp-connection.c b/plugins/rdp/vinagre-rdp-connection.c
-index f0ff02b..c5f6ed1 100644
---- a/plugins/rdp/vinagre-rdp-connection.c
-+++ b/plugins/rdp/vinagre-rdp-connection.c
-@@ -127,25 +127,9 @@ rdp_parse_item (VinagreConnection *conn, xmlNode *root)
- static void
- rdp_parse_options_widget (VinagreConnection *conn, GtkWidget *widget)
- {
--  const gchar *text;
--  GtkWidget   *u_entry, *d_entry, *spin_button, *scaling_button;
--  gboolean     scaling;
--  guint        width, height;
--
--  d_entry = g_object_get_data (G_OBJECT (widget), "domain_entry");
--  if (!d_entry)
--    {
--      g_warning ("Wrong widget passed to rdp_parse_options_widget()");
--      return;
--    }
--
--  text = gtk_entry_get_text (GTK_ENTRY (d_entry));
--  vinagre_cache_prefs_set_string  ("rdp-connection", "domain", text);
--
--  g_object_set (conn,
--		"domain", text != NULL && *text != '\0' ? text : NULL,
--		NULL);
--
-+  GtkWidget *u_entry, *spin_button, *scaling_button;
-+  gboolean   scaling;
-+  guint      width, height;
- 
-   u_entry = g_object_get_data (G_OBJECT (widget), "username_entry");
-   if (!u_entry)
-diff --git a/plugins/rdp/vinagre-rdp-plugin.c b/plugins/rdp/vinagre-rdp-plugin.c
-index 4751102..f41da37 100644
---- a/plugins/rdp/vinagre-rdp-plugin.c
-+++ b/plugins/rdp/vinagre-rdp-plugin.c
-@@ -100,7 +100,7 @@ vinagre_rdp_plugin_init (VinagreRdpPlugin *plugin)
- static GtkWidget *
- impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
- {
--  GtkWidget *grid, *label, *u_entry, *d_entry, *spin_button, *check;
-+  GtkWidget *grid, *label, *u_entry, *spin_button, *check;
-   gchar     *str;
-   gint       width, height;
- 
-@@ -146,29 +146,10 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
-   g_free (str);
- 
- 
--  label = gtk_label_new_with_mnemonic (_("_Domain:"));
--  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
--  gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1);
--  gtk_widget_set_margin_left (label, 12);
--
--  d_entry = gtk_entry_new ();
--  /* Translators: This is the tooltip for the domain field in a RDP connection */
--  gtk_widget_set_tooltip_text (d_entry, _("Optional."));
--  g_object_set_data (G_OBJECT (grid), "domain_entry", d_entry);
--  gtk_grid_attach (GTK_GRID (grid), d_entry, 1, 3, 1, 1);
--  gtk_label_set_mnemonic_widget (GTK_LABEL (label), d_entry);
--  str = g_strdup (VINAGRE_IS_CONNECTION (conn) ?
--		  vinagre_connection_get_domain (conn) :
--		  vinagre_cache_prefs_get_string  ("rdp-connection", "domain", ""));
--  gtk_entry_set_text (GTK_ENTRY (d_entry), str);
--  gtk_entry_set_activates_default (GTK_ENTRY (d_entry), TRUE);
--  g_free (str);
--
--
-   /* Host width */
-   label = gtk_label_new_with_mnemonic (_("_Width:"));
-   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
--  gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1);
-+  gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1);
-   gtk_widget_set_margin_left (label, 12);
- 
-   spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1);
-@@ -176,7 +157,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
-   gtk_widget_set_tooltip_text (spin_button, _("Set width of the remote desktop"));
-   gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_WIDTH);
-   g_object_set_data (G_OBJECT (grid), "width_spin_button", spin_button);
--  gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1);
-+  gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 3, 1, 1);
-   gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button);
-   width = VINAGRE_IS_CONNECTION (conn) ?
-           vinagre_connection_get_width (conn) :
-@@ -188,7 +169,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
-   /* Host height */
-   label = gtk_label_new_with_mnemonic (_("_Height:"));
-   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
--  gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 1);
-+  gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1);
-   gtk_widget_set_margin_left (label, 12);
- 
-   spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1);
-@@ -196,7 +177,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
-   gtk_widget_set_tooltip_text (spin_button, _("Set height of the remote desktop"));
-   gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_HEIGHT);
-   g_object_set_data (G_OBJECT (grid), "height_spin_button", spin_button);
--  gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 5, 1, 1);
-+  gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1);
-   gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button);
-   height = VINAGRE_IS_CONNECTION (conn) ?
-            vinagre_connection_get_height (conn) :
-diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
-index 8572bc3..f3d9c08 100644
---- a/plugins/rdp/vinagre-rdp-tab.c
-+++ b/plugins/rdp/vinagre-rdp-tab.c
-@@ -70,8 +70,6 @@ struct _VinagreRdpTabPrivate
-   gboolean         scaling;
-   double           scale;
-   double           offset_x, offset_y;
--
--  guint            authentication_attempts;
- };
- 
- G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB)
-@@ -611,7 +609,6 @@ frdp_post_connect (freerdp *instance)
-                               0, 0,
-                               gdi->width, gdi->height);
- 
--  vinagre_tab_save_credentials_in_keyring (VINAGRE_TAB (rdp_tab));
-   vinagre_tab_add_recent_used (VINAGRE_TAB (rdp_tab));
-   vinagre_tab_set_state (VINAGRE_TAB (rdp_tab), VINAGRE_TAB_STATE_CONNECTED);
- 
-@@ -862,76 +859,114 @@ frdp_mouse_moved (GtkWidget      *widget,
-   return TRUE;
- }
- 
-+static void
-+entry_text_changed_cb (GtkEntry   *entry,
-+                       GtkBuilder *builder)
-+{
-+  const gchar *text;
-+  GtkWidget   *widget;
-+  gsize        username_length;
-+  gsize        password_length;
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry"));
-+  text = gtk_entry_get_text (GTK_ENTRY (widget));
-+  username_length = strlen (text);
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry"));
-+  text = gtk_entry_get_text (GTK_ENTRY (widget));
-+  password_length = strlen (text);
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "ok_button"));
-+  gtk_widget_set_sensitive (widget, password_length > 0 && username_length > 0);
-+}
-+
- static gboolean
- frdp_authenticate (freerdp  *instance,
-                    char    **username,
-                    char    **password,
-                    char    **domain)
- {
--  VinagreTab           *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
--  VinagreRdpTab        *rdp_tab = VINAGRE_RDP_TAB (tab);
--  VinagreRdpTabPrivate *priv = rdp_tab->priv;
--  VinagreConnection    *conn = vinagre_tab_get_conn (tab);
--  GtkWindow            *window = GTK_WINDOW (vinagre_tab_get_window (tab));
--  gboolean              save_in_keyring = FALSE;
--  gchar                *keyring_domain = NULL;
--  gchar                *keyring_username = NULL;
--  gchar                *keyring_password = NULL;
-+  VinagreTab        *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
-+  VinagreConnection *conn = vinagre_tab_get_conn (tab);
-+  const gchar       *user_name;
-+  const gchar       *domain_name;
-+  GtkBuilder        *builder;
-+  GtkWidget         *dialog;
-+  GtkWidget         *widget;
-+  GtkWidget         *username_entry;
-+  GtkWidget         *password_entry;
-+  GtkWidget         *domain_entry;
-+  gboolean           save_credential_check_visible;
-+  gboolean           domain_label_visible;
-+  gboolean           domain_entry_visible;
-+  gint               response;
- 
--  priv->authentication_attempts++;
-+  builder = vinagre_utils_get_builder ();
- 
--  if (priv->authentication_attempts == 1)
--    {
--      vinagre_tab_find_credentials_in_keyring (tab, &keyring_domain, &keyring_username, &keyring_password);
--      if (keyring_password != NULL && keyring_username != NULL)
--        {
--          *domain = keyring_domain;
--          *username = keyring_username;
--          *password = keyring_password;
-+  dialog = GTK_WIDGET (gtk_builder_get_object (builder, "auth_required_dialog"));
-+  gtk_window_set_modal ((GtkWindow *) dialog, TRUE);
-+  gtk_window_set_transient_for ((GtkWindow *) dialog, GTK_WINDOW (vinagre_tab_get_window (tab)));
- 
--          return TRUE;
--        }
--      else
--        {
--          g_free (keyring_domain);
--          g_free (keyring_username);
--          g_free (keyring_password);
--        }
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "host_label"));
-+  gtk_label_set_text (GTK_LABEL (widget), vinagre_connection_get_host (conn));
-+
-+  username_entry = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry"));
-+  password_entry = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry"));
-+  domain_entry = GTK_WIDGET (gtk_builder_get_object (builder, "domain_entry"));
-+
-+  if (*username != NULL && *username[0] != '\0')
-+    {
-+      gtk_entry_set_text (GTK_ENTRY (username_entry), *username);
-+      gtk_widget_grab_focus (password_entry);
-     }
- 
--  if (vinagre_utils_request_credential (window,
--                                        "RDP",
--                                        vinagre_connection_get_host (conn),
--                                        vinagre_connection_get_domain (conn),
--                                        vinagre_connection_get_username (conn),
--                                        TRUE,
--                                        TRUE,
--                                        TRUE,
--                                        20,
--                                        domain,
--                                        username,
--                                        password,
--                                        &save_in_keyring))
-+  g_signal_connect (username_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder);
-+  g_signal_connect (password_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder);
-+
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check"));
-+  save_credential_check_visible = gtk_widget_get_visible (widget);
-+  gtk_widget_set_visible (widget, FALSE);
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label"));
-+  domain_label_visible = gtk_widget_get_visible (widget);
-+  gtk_widget_set_visible (widget, TRUE);
-+
-+  domain_entry_visible = gtk_widget_get_visible (domain_entry);
-+  gtk_widget_set_visible (domain_entry, TRUE);
-+
-+
-+  response = gtk_dialog_run (GTK_DIALOG (dialog));
-+  gtk_widget_hide (dialog);
-+
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check"));
-+  gtk_widget_set_visible (widget, save_credential_check_visible);
-+
-+  widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label"));
-+  gtk_widget_set_visible (widget, domain_label_visible);
-+
-+  gtk_widget_set_visible (domain_entry, domain_entry_visible);
-+
-+
-+  if (response == GTK_RESPONSE_OK)
-     {
--      if (*domain && **domain != '\0')
--        vinagre_connection_set_domain (conn, *domain);
-+      domain_name = gtk_entry_get_text (GTK_ENTRY (domain_entry));
-+      if (g_strcmp0 (*domain, domain_name) != 0)
-+        *domain = g_strdup (domain_name);
- 
--      if (*username && **username != '\0')
--        vinagre_connection_set_username (conn, *username);
-+      user_name = gtk_entry_get_text (GTK_ENTRY (username_entry));
-+      if (g_strcmp0 (*username, user_name) != 0)
-+        *username = g_strdup (user_name);
- 
--      if (*password && **password != '\0')
--        vinagre_connection_set_password (conn, *password);
-+      *password = g_strdup (gtk_entry_get_text (GTK_ENTRY (password_entry)));
- 
--      vinagre_tab_set_save_credentials (tab, save_in_keyring);
-+      return TRUE;
-     }
-   else
-     {
--      vinagre_tab_remove_from_notebook (tab);
--
-       return FALSE;
-     }
--
--  return TRUE;
- }
- 
- static BOOL
-@@ -1028,25 +1063,30 @@ frdp_changed_certificate_verify (freerdp *instance,
- #endif
- 
- static void
--init_freerdp (VinagreRdpTab *rdp_tab)
-+open_freerdp (VinagreRdpTab *rdp_tab)
- {
-   VinagreRdpTabPrivate *priv = rdp_tab->priv;
--  rdpSettings          *settings;
-   VinagreTab           *tab = VINAGRE_TAB (rdp_tab);
-   VinagreConnection    *conn = vinagre_tab_get_conn (tab);
--  gboolean              scaling;
--  gchar                *hostname;
--  gint                  width, height;
--  gint                  port;
-+  rdpSettings          *settings;
-+  GtkWindow            *window = GTK_WINDOW (vinagre_tab_get_window (tab));
-+  gboolean              success = TRUE;
-+  gboolean              fullscreen, scaling;
-+  gchar                *hostname, *username;
-+  gint                  port, width, height;
- 
-   g_object_get (conn,
-                 "port", &port,
-                 "host", &hostname,
-                 "width", &width,
-                 "height", &height,
-+                "fullscreen", &fullscreen,
-                 "scaling", &scaling,
-+                "username", &username,
-                 NULL);
- 
-+  priv->events = g_queue_new ();
-+
-   /* Setup FreeRDP session */
-   priv->freerdp_session = freerdp_new ();
-   priv->freerdp_session->PreConnect = frdp_pre_connect;
-@@ -1111,6 +1151,17 @@ init_freerdp (VinagreRdpTab *rdp_tab)
-   settings->port = port;
- #endif
- 
-+  /* Set username */
-+  username = g_strstrip (username);
-+  if (username != NULL && username[0] != '\0')
-+    {
-+#if HAVE_FREERDP_1_1
-+      settings->Username = g_strdup (username);
-+#else
-+      settings->username = g_strdup (username);
-+#endif
-+    }
-+
-   /* Set keyboard layout */
- #if HAVE_FREERDP_1_1
-   freerdp_keyboard_init (KBD_US);
-@@ -1120,24 +1171,6 @@ init_freerdp (VinagreRdpTab *rdp_tab)
- 
-   /* Allow font smoothing by default */
-   settings->AllowFontSmoothing = TRUE;
--}
--
--static void
--init_display (VinagreRdpTab *rdp_tab)
--{
--  VinagreRdpTabPrivate *priv = rdp_tab->priv;
--  VinagreTab           *tab = VINAGRE_TAB (rdp_tab);
--  VinagreConnection    *conn = vinagre_tab_get_conn (tab);
--  GtkWindow            *window = GTK_WINDOW (vinagre_tab_get_window (tab));
--  gboolean              fullscreen, scaling;
--  gint                  width, height;
--
--  g_object_get (conn,
--                "width", &width,
--                "height", &height,
--                "fullscreen", &fullscreen,
--                "scaling", &scaling,
--                NULL);
- 
-   /* Setup display for FreeRDP session */
-   priv->display = gtk_drawing_area_new ();
-@@ -1186,54 +1219,20 @@ init_display (VinagreRdpTab *rdp_tab)
-   priv->key_release_handler_id = g_signal_connect (GTK_WIDGET (tab), "key-release-event",
-                                                    G_CALLBACK (frdp_key_pressed),
-                                                    rdp_tab);
--}
--
--static void
--open_freerdp (VinagreRdpTab *rdp_tab)
--{
--  VinagreRdpTabPrivate *priv = rdp_tab->priv;
--  VinagreTab           *tab = VINAGRE_TAB (rdp_tab);
--  GtkWindow            *window = GTK_WINDOW (vinagre_tab_get_window (tab));
--  gboolean              success = TRUE;
--  gboolean              authentication_error = FALSE;
--  gboolean              cancelled = FALSE;
--
--  priv->events = g_queue_new ();
--
--  init_freerdp (rdp_tab);
--  init_display (rdp_tab);
--
--  do
--    {
--      authentication_error = FALSE;
- 
--      /* Run FreeRDP session */
--      success = freerdp_connect (priv->freerdp_session);
--      if (!success)
--        {
--          authentication_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
--                                 freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
--
--          cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
--
--          freerdp_free (priv->freerdp_session);
--          init_freerdp (rdp_tab);
--        }
--    }
--  while (!success && authentication_error);
-+  /* Run FreeRDP session */
-+  success = freerdp_connect (priv->freerdp_session);
- 
-   if (!success)
-     {
-       gtk_window_unfullscreen (window);
--      if (!cancelled)
--        vinagre_utils_show_error_dialog (_("Error connecting to host."),
--                                         NULL,
--                                         window);
-+      vinagre_utils_show_error_dialog (_("Error connecting to host."),
-+                                       NULL,
-+                                       window);
-       g_idle_add ((GSourceFunc) idle_close, rdp_tab);
-     }
-   else
-     {
--      priv->authentication_attempts = 0;
-       priv->update_id = g_idle_add ((GSourceFunc) update, rdp_tab);
-     }
- }
--- 
-2.9.3
-