inspector: Show Wayland protocols
authorMatthias Clasen <mclasen@redhat.com>
Sat, 1 Apr 2023 12:45:05 +0000 (08:45 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 1 Apr 2023 13:31:12 +0000 (09:31 -0400)
This could be useful for somebody.

gtk/inspector/general.c

index 7593e278e60e4d6f671f7a53ba41e0cb3567550c..0eab876b1e819f85e09c2b1fe6ebd0f77c63d839 100644 (file)
@@ -60,6 +60,7 @@
 #include "wayland/gdkwayland.h"
 #include <epoxy/egl.h>
 #include <xkbcommon/xkbcommon.h>
+#include "wayland/gdkdisplay-wayland.h"
 #endif
 
 #ifdef GDK_WINDOWING_BROADWAY
@@ -586,6 +587,62 @@ translate_subpixel_layout (GdkSubpixelLayout subpixel)
     }
 }
 
+#ifdef GDK_WINDOWING_WAYLAND
+static void
+append_wayland_protocol_row (GtkInspectorGeneral *gen,
+                             struct wl_proxy     *proxy)
+{
+  const char *id;
+  unsigned int version;
+  char buf[64];
+  GtkListBox *list;
+
+  if (proxy == NULL)
+    return;
+
+  list = GTK_LIST_BOX (gen->display_box);
+
+  id = wl_proxy_get_class (proxy);
+  version = wl_proxy_get_version (proxy);
+
+  g_snprintf (buf, sizeof (buf), "%u", version);
+
+  add_label_row (gen, list, id, buf, 10);
+}
+
+static void
+add_wayland_protocols (GdkDisplay          *display,
+                       GtkInspectorGeneral *gen)
+{
+  if (GDK_IS_WAYLAND_DISPLAY (display))
+    {
+      GdkWaylandDisplay *d = (GdkWaylandDisplay *) display;
+
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->compositor);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->shm);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_wm_base);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->zxdg_shell_v6);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->gtk_shell);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->input_device);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->data_device_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->subcompositor);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->pointer_gestures);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->primary_selection_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->tablet_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_exporter);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_exporter_v2);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_importer);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_importer_v2);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->keyboard_shortcuts_inhibit);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->server_decoration_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_output_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->idle_inhibit_manager);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->xdg_activation);
+      append_wayland_protocol_row (gen, (struct wl_proxy *)d->fractional_scale);
+    }
+}
+#endif
+
 static void
 populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
 {
@@ -621,6 +678,10 @@ populate_display (GdkDisplay *display, GtkInspectorGeneral *gen)
                           gdk_display_is_rgba (display));
   gtk_widget_set_visible (gen->display_composited,
                           gdk_display_is_composited (display));
+
+#ifdef GDK_WINDOWING_WAYLAND
+  add_wayland_protocols (display, gen);
+#endif
 }
 
 static void