wayland: Better error on eglGetDisplay() failure
authorBenjamin Otte <otte@redhat.com>
Tue, 24 Aug 2021 19:27:49 +0000 (21:27 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 24 Sep 2021 11:54:12 +0000 (13:54 +0200)
Goals:

1. Provide as much information as possible in the error message, so
   users can try to fix their system themselves.
2. Try to formulate the error message in a way that explains that this
   is not something GTK can fix, but a lower layer problem.

Related: #4193

gdk/wayland/gdkglcontext-wayland.c

index 7e6dd072250b8d6615ca1a6e4a650cf2271c6236..2cf7285fe5e9b6e4631799308863e11353a92ccd 100644 (file)
@@ -32,6 +32,7 @@
 #include "gdkprivate-wayland.h"
 
 #include "gdkinternals.h"
+#include "gdk-private.h"
 #include "gdksurfaceprivate.h"
 #include "gdkprofilerprivate.h"
 
@@ -474,14 +475,28 @@ gdk_wayland_display_init_gl (GdkDisplay  *display,
   G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
   G_GNUC_UNUSED gint64 start_time2;
 
+  if (!epoxy_has_egl ())
+    {
+      gboolean sandboxed = gdk_running_in_sandbox ();
+
+      g_set_error_literal (error, GDK_GL_ERROR,
+                           GDK_GL_ERROR_NOT_AVAILABLE,
+                           sandboxed ? _("libEGL not available in this sandbox")
+                                     : _("libEGL not available"));
+      return NULL;
+    }
+
   start_time2 = GDK_PROFILER_CURRENT_TIME;
   dpy = get_egl_display (display_wayland);
   gdk_profiler_end_mark (start_time, "get_egl_display", NULL);
   if (dpy == NULL)
     {
+      gboolean sandboxed = gdk_running_in_sandbox ();
+
       g_set_error_literal (error, GDK_GL_ERROR,
                            GDK_GL_ERROR_NOT_AVAILABLE,
-                           _("Failed to create EGL display"));
+                           sandboxed ? _("Sandbox does not provide an OpenGL implementation")
+                                     : _("No OpenGL implementation available"));
       return NULL;
     }