inspector: Add support for displaying GL errors
authorBenjamin Otte <otte@redhat.com>
Fri, 9 Jul 2021 01:28:34 +0000 (03:28 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 22 Jul 2021 14:27:32 +0000 (16:27 +0200)
Also, no need to show a GL version if GL isn't available.

gtk/inspector/general.c
gtk/inspector/general.ui

index a2066a2d96cbea87f413dca56ce1c4e2715db750..8d1fc9f44c7a52a908e100d7a4f3e9462339c398 100644 (file)
@@ -87,7 +87,10 @@ struct _GtkInspectorGeneral
   GtkWidget *pango_fontmap;
   GtkWidget *media_backend;
   GtkWidget *gl_version;
+  GtkWidget *gl_error;
+  GtkWidget *gl_error_row;
   GtkWidget *gl_vendor;
+  GtkWidget *gl_vendor_row;
   GtkWidget *vk_device;
   GtkWidget *vk_api_version;
   GtkWidget *vk_driver_version;
@@ -298,6 +301,17 @@ get_egl_display (GdkDisplay *display)
 static void
 init_gl (GtkInspectorGeneral *gen)
 {
+  GError *error = NULL;
+
+  if (!gdk_display_prepare_gl (gen->display, &error))
+    {
+      gtk_label_set_text (GTK_LABEL (gen->gl_version), C_("GL version", "None"));
+      gtk_widget_set_visible (gen->gl_vendor_row, FALSE);
+      gtk_widget_set_visible (gen->gl_error_row, TRUE);
+      gtk_label_set_text (GTK_LABEL (gen->gl_error), error->message);
+      g_error_free (error);
+    }
+
   if (gdk_display_get_debug_flags (gen->display) & GDK_DEBUG_GL_DISABLE)
     {
       gtk_label_set_text (GTK_LABEL (gen->gl_version), C_("GL version", "Disabled"));
@@ -1053,7 +1067,10 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, pango_fontmap);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, media_backend);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_version);
+  gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_error);
+  gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_error_row);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_vendor);
+  gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, gl_vendor_row);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_device);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_api_version);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorGeneral, vk_driver_version);
index 86cda44b824f12cfc613f3246d77e8a6c0e39912..e9aeb49a698d315d13555523ace626e8c1694e8c 100644 (file)
                       </object>
                     </child>
                     <child>
-                      <object class="GtkListBoxRow">
+                      <object class="GtkListBoxRow" id="gl_error_row">
+                        <property name="activatable">0</property>
+                        <property name="visible">0</property>
+                        <child>
+                          <object class="GtkBox">
+                            <property name="spacing">40</property>
+                            <child>
+                              <object class="GtkLabel" id="gl_error">
+                                <property name="selectable">1</property>
+                                <property name="halign">end</property>
+                                <property name="valign">baseline</property>
+                                <property name="ellipsize">end</property>
+                                <property name="hexpand">1</property>
+                                <style>
+                                  <class name="error"/>
+                                </style>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkListBoxRow" id="gl_vendor_row">
                         <property name="activatable">0</property>
                         <child>
                           <object class="GtkBox">