From e7ab0562640956a3027a46e775272d0d2d5f5cc4 Mon Sep 17 00:00:00 2001 From: Riccardo Canalicchio Date: Mon, 18 Oct 2021 13:39:58 -0400 Subject: [PATCH] wayland backend:implement xdg ping/pong handler this prevents the client from being considered unresponsive --- Source/wayland/WaylandServer.m | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Source/wayland/WaylandServer.m b/Source/wayland/WaylandServer.m index 2ede840..cbb8f91 100644 --- a/Source/wayland/WaylandServer.m +++ b/Source/wayland/WaylandServer.m @@ -757,6 +757,16 @@ xdg_surface_on_configure(void *data, struct xdg_surface *xdg_surface, static const struct xdg_surface_listener xdg_surface_listener = { xdg_surface_on_configure, }; +static void wm_base_handle_ping(void *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 wm_base_listener = { + .ping = wm_base_handle_ping, +}; + #else static void @@ -796,6 +806,7 @@ handle_global(void *data, struct wl_registry *registry, if (strcmp(interface, xdg_wm_base_interface.name) == 0) { wlconfig->wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); + xdg_wm_base_add_listener(wlconfig->wm_base, &wm_base_listener, NULL); NSDebugLog(@"wayland: found wm_base interface"); } else if (strcmp(interface, wl_shell_interface.name) == 0) { wlconfig->shell = wl_registry_bind(registry, name, @@ -1152,6 +1163,9 @@ int NSToWayland(struct window *window, int ns_y) window->xdg_surface = xdg_wm_base_get_xdg_surface(wlconfig->wm_base, window->surface); window->toplevel = xdg_surface_get_toplevel(window->xdg_surface); + + xdg_surface_add_listener(window->xdg_surface, + &xdg_surface_listener, window); xdg_surface_add_listener(window->xdg_surface, &xdg_surface_listener, window);