diff options
-rw-r--r-- | docs/reference/gdk/gdk3-sections.txt | 1 | ||||
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.c | 42 | ||||
-rw-r--r-- | gdk/wayland/gdkwaylanddisplay.h | 4 |
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__ */ |