diff options
Diffstat (limited to 'subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c')
-rw-r--r-- | subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c index 8f876e5fd7..071ad29c96 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c @@ -23,6 +23,7 @@ #endif #include <gst/vulkan/wayland/gstvkdisplay_wayland.h> +#include "gstvkdisplay_wayland_private.h" #include "wayland_event_source.h" @@ -30,7 +31,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_vulkan_display_wayland_debug); #define GST_CAT_DEFAULT gst_vulkan_display_wayland_debug G_DEFINE_TYPE_WITH_CODE (GstVulkanDisplayWayland, gst_vulkan_display_wayland, - GST_TYPE_VULKAN_DISPLAY, GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, + GST_TYPE_VULKAN_DISPLAY, G_ADD_PRIVATE (GstVulkanDisplayWayland); + GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "vulkandisplaywayland", 0, "Vulkan Wayland Display"); ); @@ -39,10 +41,23 @@ static gpointer gst_vulkan_display_wayland_get_handle (GstVulkanDisplay * display); static void +handle_xdg_wm_base_ping (void *user_data, struct xdg_wm_base *xdg_wm_base, + uint32_t serial) +{ + xdg_wm_base_pong (xdg_wm_base, serial); +} + +static const struct xdg_wm_base_listener xdg_wm_base_listener = { + handle_xdg_wm_base_ping +}; + +static void registry_handle_global (void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) { GstVulkanDisplayWayland *display = data; + GstVulkanDisplayWaylandPrivate *priv = + gst_vulkan_display_wayland_get_instance_private (display); GST_TRACE_OBJECT (display, "registry_handle_global with registry %p, " "interface %s, version %u", registry, interface, version); @@ -55,6 +70,11 @@ registry_handle_global (void *data, struct wl_registry *registry, wl_registry_bind (registry, name, &wl_subcompositor_interface, 1); } else if (g_strcmp0 (interface, "wl_shell") == 0) { display->shell = wl_registry_bind (registry, name, &wl_shell_interface, 1); + } else if (g_strcmp0 (interface, "xdg_wm_base") == 0) { + priv->xdg_wm_base = + wl_registry_bind (registry, name, &xdg_wm_base_interface, 1); + xdg_wm_base_add_listener (priv->xdg_wm_base, &xdg_wm_base_listener, + display); } } @@ -83,6 +103,13 @@ _connect_listeners (GstVulkanDisplayWayland * display) wl_display_roundtrip (display->display); } +GstVulkanDisplayWaylandPrivate * +gst_vulkan_display_wayland_get_private (GstVulkanDisplayWayland * + display_wayland) +{ + return gst_vulkan_display_wayland_get_instance_private (display_wayland); +} + static void gst_vulkan_display_wayland_class_init (GstVulkanDisplayWaylandClass * klass) { |