[gnome-remote-desktop] context: Hook up the EGL thread



commit a01f0ef591252bfc973a616b69dba898930b7db6
Author: Jonas Ådahl <jadahl gmail com>
Date:   Fri Nov 5 15:52:13 2021 +0100

    context: Hook up the EGL thread

 src/grd-context.c    | 19 ++++++++++++++++++-
 src/grd-context.h    |  2 ++
 src/grd-egl-thread.h |  2 +-
 src/grd-types.h      |  1 +
 4 files changed, 22 insertions(+), 2 deletions(-)
---
diff --git a/src/grd-context.c b/src/grd-context.c
index 53bb52b..0d9bed1 100644
--- a/src/grd-context.c
+++ b/src/grd-context.c
@@ -24,6 +24,8 @@
 
 #include "grd-context.h"
 
+#include "grd-egl-thread.h"
+
 #include "grd-dbus-remote-desktop.h"
 #include "grd-dbus-screen-cast.h"
 
@@ -40,6 +42,8 @@ struct _GrdContext
   GrdDBusRemoteDesktop *remote_desktop_proxy;
   GrdDBusScreenCast *screen_cast_proxy;
 
+  GrdEglThread *egl_thread;
+
   GrdSettings *settings;
 
   GList *sessions;
@@ -47,7 +51,7 @@ struct _GrdContext
   GrdDebugFlags debug_flags;
 };
 
-G_DEFINE_TYPE (GrdContext, grd_context, G_TYPE_OBJECT);
+G_DEFINE_TYPE (GrdContext, grd_context, G_TYPE_OBJECT)
 
 GrdDBusRemoteDesktop *
 grd_context_get_remote_desktop_proxy (GrdContext *context)
@@ -111,6 +115,12 @@ grd_context_get_settings (GrdContext *context)
   return context->settings;
 }
 
+GrdEglThread *
+grd_context_get_egl_thread (GrdContext *context)
+{
+  return context->egl_thread;
+}
+
 GrdDebugFlags
 grd_context_get_debug_flags (GrdContext *context)
 {
@@ -139,6 +149,7 @@ grd_context_finalize (GObject *object)
 
   g_clear_object (&context->remote_desktop_proxy);
   g_clear_object (&context->screen_cast_proxy);
+  g_clear_pointer (&context->egl_thread, grd_egl_thread_free);
   g_clear_object (&context->settings);
 
   G_OBJECT_CLASS (grd_context_parent_class)->finalize (object);
@@ -147,11 +158,17 @@ grd_context_finalize (GObject *object)
 static void
 grd_context_init (GrdContext *context)
 {
+  g_autoptr (GError) error = NULL;
+
   context->main_context = g_main_context_default ();
 
   init_debug_flags (context);
 
   context->settings = g_object_new (GRD_TYPE_SETTINGS, NULL);
+
+  context->egl_thread = grd_egl_thread_new (&error);
+  if (!context->egl_thread)
+    g_debug ("Failed to create EGL thread: %s", error->message);
 }
 
 static void
diff --git a/src/grd-context.h b/src/grd-context.h
index d33a459..a7b9cb8 100644
--- a/src/grd-context.h
+++ b/src/grd-context.h
@@ -60,6 +60,8 @@ GList * grd_context_get_sessions (GrdContext *context);
 
 GrdSettings * grd_context_get_settings (GrdContext *context);
 
+GrdEglThread * grd_context_get_egl_thread (GrdContext *context);
+
 GrdDebugFlags grd_context_get_debug_flags (GrdContext *context);
 
 #endif /* GRD_CONTEXT_H */
diff --git a/src/grd-egl-thread.h b/src/grd-egl-thread.h
index a382caf..af704b3 100644
--- a/src/grd-egl-thread.h
+++ b/src/grd-egl-thread.h
@@ -24,7 +24,7 @@
 #include <glib.h>
 #include <stdint.h>
 
-typedef struct _GrdEglThread GrdEglThread;
+#include "grd-types.h"
 
 typedef void (* GrdEglThreadCallback) (gboolean success,
                                        gpointer user_data);
diff --git a/src/grd-types.h b/src/grd-types.h
index c3bb763..f88efd0 100644
--- a/src/grd-types.h
+++ b/src/grd-types.h
@@ -27,6 +27,7 @@ typedef struct _GrdContext GrdContext;
 typedef struct _GrdClipboard GrdClipboard;
 typedef struct _GrdClipboardRdp GrdClipboardRdp;
 typedef struct _GrdClipboardVnc GrdClipboardVnc;
+typedef struct _GrdEglThread GrdEglThread;
 typedef struct _GrdRdpEventQueue GrdRdpEventQueue;
 typedef struct _GrdRdpGfxFrameLog GrdRdpGfxFrameLog;
 typedef struct _GrdRdpGfxSurface GrdRdpGfxSurface;


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