summaryrefslogtreecommitdiff
path: root/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c
diff options
context:
space:
mode:
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.c29
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)
{