summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gdk/gdk3-sections.txt1
-rw-r--r--gdk/wayland/gdkdisplay-wayland.c42
-rw-r--r--gdk/wayland/gdkwaylanddisplay.h4
3 files changed, 41 insertions, 6 deletions
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt
index f26c22d3c6..4e5c403670 100644
--- a/docs/reference/gdk/gdk3-sections.txt
+++ b/docs/reference/gdk/gdk3-sections.txt
@@ -1270,6 +1270,7 @@ gdk_wayland_device_get_wl_seat
gdk_wayland_display_get_wl_compositor
gdk_wayland_display_get_wl_display
gdk_wayland_display_get_xdg_shell
+gdk_wayland_display_query_registry
gdk_wayland_window_get_wl_surface
gdk_wayland_window_set_use_custom_surface
GdkWaylandWindowExported
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index 8bcd6755a6..3e9ca8465d 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -372,7 +372,6 @@ gdk_registry_handle_global (void *data,
{
GdkWaylandDisplay *display_wayland = data;
struct wl_output *output;
- gboolean handled = TRUE;
GDK_NOTE (MISC,
g_message ("add global %u, interface %s, version %u", id, interface, version));
@@ -495,12 +494,9 @@ gdk_registry_handle_global (void *data,
&server_decoration_listener,
display_wayland);
}
- else
- handled = FALSE;
- if (handled)
- g_hash_table_insert (display_wayland->known_globals,
- GUINT_TO_POINTER (id), g_strdup (interface));
+ g_hash_table_insert (display_wayland->known_globals,
+ GUINT_TO_POINTER (id), g_strdup (interface));
process_on_globals_closures (display_wayland);
}
@@ -1386,3 +1382,37 @@ gdk_wayland_display_get_selection (GdkDisplay *display)
return display_wayland->selection;
}
+
+/**
+ * gdk_wayland_display_query_registry:
+ * @display: a wayland #GdkDisplay
+ * @interface: global interface to query in the registry
+ *
+ * Returns %TRUE if the the interface was found in the display
+ * wl_registry.global handler.
+ *
+ * Returns: %TRUE if the global is offered by the compositor
+ *
+ * Since: 3.22.27
+ **/
+gboolean
+gdk_wayland_display_query_registry (GdkDisplay *display,
+ const gchar *global)
+{
+ GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
+ GHashTableIter iter;
+ gchar *value;
+
+ g_return_val_if_fail (GDK_IS_WAYLAND_DISPLAY (display), FALSE);
+ g_return_val_if_fail (global != NULL, FALSE);
+
+ g_hash_table_iter_init (&iter, display_wayland->known_globals);
+
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &value))
+ {
+ if (strcmp (value, global) == 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/gdk/wayland/gdkwaylanddisplay.h b/gdk/wayland/gdkwaylanddisplay.h
index d980d6cf87..af9cc896be 100644
--- a/gdk/wayland/gdkwaylanddisplay.h
+++ b/gdk/wayland/gdkwaylanddisplay.h
@@ -60,6 +60,10 @@ void gdk_wayland_display_set_startup_notification_id (GdkDisp
GDK_AVAILABLE_IN_3_22
gboolean gdk_wayland_display_prefers_ssd (GdkDisplay *display);
+GDK_AVAILABLE_IN_3_22
+gboolean gdk_wayland_display_query_registry (GdkDisplay *display,
+ const gchar *global);
+
G_END_DECLS
#endif /* __GDK_WAYLAND_DISPLAY_H__ */