[gtk-frdp/gtk-frdp-0-1] frdp-display: Emit "rdp-error" on RDP session error



commit a44d84ec687f41ad37e43697b28a018f65780780
Author: Martin Blanchard <tchaik gmx com>
Date:   Thu Oct 28 21:59:32 2021 +0200

    frdp-display: Emit "rdp-error" on RDP session error
    
    Fixes: https://gitlab.gnome.org/GNOME/gtk-frdp/-/issues/32

 src/frdp-display.c | 20 ++++++++++++++++++++
 src/frdp-session.c | 17 +++++++++++++++--
 2 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/src/frdp-display.c b/src/frdp-display.c
index 4f2b07b..94d9006 100644
--- a/src/frdp-display.c
+++ b/src/frdp-display.c
@@ -37,6 +37,7 @@ enum
 
 enum
 {
+  RDP_ERROR,
   RDP_CONNECTED,
   RDP_DISCONNECTED,
   RDP_NEEDS_AUTHENTICATION,
@@ -220,6 +221,14 @@ frdp_leave_notify_event (GtkWidget        *widget,
   return TRUE;
 }
 
+static void
+frdp_display_error (GObject     *source_object,
+                    const gchar *message,
+                    gpointer     user_data)
+{
+  g_signal_emit (user_data, signals[RDP_ERROR], 0, message);
+}
+
 static void
 frdp_display_auth_failure (GObject     *source_object,
                            const gchar *message,
@@ -364,6 +373,13 @@ frdp_display_class_init (FrdpDisplayClass *klass)
                                                          TRUE,
                                                          G_PARAM_READWRITE));
 
+  signals[RDP_ERROR] = g_signal_new ("rdp-error",
+                                     G_TYPE_FROM_CLASS (klass),
+                                     G_SIGNAL_RUN_LAST,
+                                     0, NULL, NULL, NULL,
+                                     G_TYPE_NONE, 1,
+                                     G_TYPE_STRING);
+
   signals[RDP_CONNECTED] = g_signal_new ("rdp-connected",
                                          G_TYPE_FROM_CLASS (klass),
                                          G_SIGNAL_RUN_LAST,
@@ -381,6 +397,7 @@ frdp_display_class_init (FrdpDisplayClass *klass)
                                                     G_SIGNAL_RUN_LAST,
                                                     0, NULL, NULL, NULL,
                                                     G_TYPE_NONE, 0);
+
   signals[RDP_AUTH_FAILURE] = g_signal_new ("rdp-auth-failure",
                                             G_TYPE_FROM_CLASS (klass),
                                             G_SIGNAL_RUN_LAST,
@@ -427,6 +444,9 @@ frdp_display_open_host (FrdpDisplay  *display,
 
   g_return_if_fail (host != NULL);
 
+  g_signal_connect (priv->session, "rdp-error",
+                    G_CALLBACK (frdp_display_error),
+                    display);
   g_signal_connect (priv->session, "rdp-disconnected",
                     G_CALLBACK (frdp_display_disconnected),
                     display);
diff --git a/src/frdp-session.c b/src/frdp-session.c
index 0e92f71..9750f4c 100644
--- a/src/frdp-session.c
+++ b/src/frdp-session.c
@@ -76,6 +76,7 @@ enum
 
 enum
 {
+  RDP_ERROR,
   RDP_CONNECTED,
   RDP_DISCONNECTED,
   RDP_AUTH_FAILURE,
@@ -632,7 +633,11 @@ frdp_session_connect_thread (GTask        *task,
             break;
 
         default:
-            g_warning ("Unhandled FreeRDP error: '%s'",
+            g_signal_emit (self,
+                           signals[RDP_ERROR], 0,
+                           freerdp_get_last_error_string (error_code));
+
+            g_warning ("Unexpected RDP error: '%s'",
                        freerdp_get_last_error_string (error_code));
             break;
     }
@@ -793,23 +798,31 @@ frdp_session_class_init (FrdpSessionClass *klass)
                                                          TRUE,
                                                          G_PARAM_READWRITE));
 
+  signals[RDP_ERROR] = g_signal_new ("rdp-error",
+                                     FRDP_TYPE_SESSION,
+                                     G_SIGNAL_RUN_FIRST,
+                                     0, NULL, NULL, NULL,
+                                     G_TYPE_NONE, 1,
+                                     G_TYPE_STRING);
+
   signals[RDP_CONNECTED] = g_signal_new ("rdp-connected",
                                          FRDP_TYPE_SESSION,
                                          G_SIGNAL_RUN_FIRST,
                                          0, NULL, NULL, NULL,
                                          G_TYPE_NONE, 0);
+
   signals[RDP_DISCONNECTED] = g_signal_new ("rdp-disconnected",
                                             FRDP_TYPE_SESSION,
                                             G_SIGNAL_RUN_FIRST,
                                             0, NULL, NULL, NULL,
                                             G_TYPE_NONE, 0);
+
   signals[RDP_AUTH_FAILURE] = g_signal_new ("rdp-auth-failure",
                                             FRDP_TYPE_SESSION,
                                             G_SIGNAL_RUN_FIRST,
                                             0, NULL, NULL, NULL,
                                             G_TYPE_NONE, 1,
                                             G_TYPE_STRING);
-
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]