Blame SOURCES/vinagre-3.22.0-logoff.patch

d4ff1f
--- vinagre-3.22.0/plugins/rdp/vinagre-rdp-tab.c
d4ff1f
+++ vinagre-3.22.0/plugins/rdp/vinagre-rdp-tab.c
d4ff1f
@@ -663,7 +663,7 @@ update (gpointer user_data)
d4ff1f
                         wfds, &wcount))
d4ff1f
     {
d4ff1f
       g_warning ("Failed to get FreeRDP file descriptor\n");
d4ff1f
-      return FALSE;
d4ff1f
+      goto remove;
d4ff1f
     }
d4ff1f
 
d4ff1f
   max_fds = 0;
d4ff1f
@@ -681,7 +681,7 @@ update (gpointer user_data)
d4ff1f
     }
d4ff1f
 
d4ff1f
   if (max_fds == 0)
d4ff1f
-    return FALSE;
d4ff1f
+    goto remove;
d4ff1f
 
d4ff1f
   timeout.tv_sec = 0;
d4ff1f
   timeout.tv_usec = SELECT_TIMEOUT;
d4ff1f
@@ -696,14 +696,21 @@ update (gpointer user_data)
d4ff1f
             (errno == EINTR))) /* signal occurred */
d4ff1f
       {
d4ff1f
         g_warning ("update: select failed\n");
d4ff1f
-        return FALSE;
d4ff1f
+        goto remove;
d4ff1f
       }
d4ff1f
     }
d4ff1f
 
d4ff1f
   if (!freerdp_check_fds (priv->freerdp_session))
d4ff1f
     {
d4ff1f
-      g_warning ("Failed to check FreeRDP file descriptor\n");
d4ff1f
-      return FALSE;
d4ff1f
+      if (freerdp_shall_disconnect (priv->freerdp_session))
d4ff1f
+        g_idle_add ((GSourceFunc) idle_close, rdp_tab);
d4ff1f
+
d4ff1f
+#ifdef HAVE_FREERDP_1_2
d4ff1f
+      if (freerdp_get_last_error (priv->freerdp_session->context) != FREERDP_ERROR_LOGOFF_BY_USER)
d4ff1f
+#endif
d4ff1f
+        g_warning ("Failed to check FreeRDP file descriptor\n");
d4ff1f
+
d4ff1f
+      goto remove;
d4ff1f
     }
d4ff1f
 
d4ff1f
   frdp_process_events (priv->freerdp_session, priv->events);
d4ff1f
@@ -711,10 +718,14 @@ update (gpointer user_data)
d4ff1f
   if (freerdp_shall_disconnect (priv->freerdp_session))
d4ff1f
     {
d4ff1f
       g_idle_add ((GSourceFunc) idle_close, rdp_tab);
d4ff1f
-      return FALSE;
d4ff1f
+      goto remove;
d4ff1f
     }
d4ff1f
 
d4ff1f
-  return TRUE;
d4ff1f
+  return G_SOURCE_CONTINUE;
d4ff1f
+
d4ff1f
+remove:
d4ff1f
+  rdp_tab->priv->update_id = 0;
d4ff1f
+  return G_SOURCE_REMOVE;
d4ff1f
 }
d4ff1f
 
d4ff1f
 static gboolean