summaryrefslogtreecommitdiffstats
path: root/meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch')
-rw-r--r--meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch b/meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch
new file mode 100644
index 000000000..229c8506a
--- /dev/null
+++ b/meta-agl-core/recipes-graphics/wayland/weston/0002-libweston-desktop-introduce-weston_desktop_client_de.patch
@@ -0,0 +1,88 @@
+From f53c05d3c2c19c139c52e9bd621c2654dd3dac69 Mon Sep 17 00:00:00 2001
+From: Pekka Paalanen <pekka.paalanen@collabora.com>
+Upstream-Status: Backport
+Date: Fri, 14 May 2021 16:04:45 +0300
+Subject: [PATCH] libweston-desktop: introduce weston_desktop_client_destroy()
+
+This new function is callable explicitly, unlike the old function that
+used to have the same name.
+
+This will be needed when tearing down what
+weston_desktop_xwayland_init() puts up.
+
+Since calling weston_desktop_client_destroy() for an external client
+(one that has a wl_resource for this) is a bug, add asserts to prevent
+it. This will only be needed for the internal client: XWM.
+
+Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
+---
+ libweston-desktop/client.c | 21 +++++++++++++++++----
+ libweston-desktop/internal.h | 2 ++
+ 2 files changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/libweston-desktop/client.c b/libweston-desktop/client.c
+index ba7bfbc46..44718e2db 100644
+--- a/libweston-desktop/client.c
++++ b/libweston-desktop/client.c
+@@ -24,6 +24,7 @@
+ #include "config.h"
+
+ #include <wayland-server.h>
++#include <assert.h>
+
+ #include <libweston/libweston.h>
+ #include <libweston/zalloc.h>
+@@ -48,14 +49,14 @@ weston_desktop_client_add_destroy_listener(struct weston_desktop_client *client,
+ wl_signal_add(&client->destroy_signal, listener);
+ }
+
+-static void
+-weston_desktop_client_handle_destroy(struct wl_resource *resource)
++void
++weston_desktop_client_destroy(struct weston_desktop_client *client)
+ {
+- struct weston_desktop_client *client =
+- wl_resource_get_user_data(resource);
+ struct wl_list *list = &client->surface_list;
+ struct wl_list *link, *tmp;
+
++ assert(client->resource == NULL);
++
+ wl_signal_emit(&client->destroy_signal, client);
+
+ for (link = list->next, tmp = link->next;
+@@ -71,6 +72,18 @@ weston_desktop_client_handle_destroy(struct wl_resource *resource)
+ free(client);
+ }
+
++static void
++weston_desktop_client_handle_destroy(struct wl_resource *resource)
++{
++ struct weston_desktop_client *client =
++ wl_resource_get_user_data(resource);
++
++ assert(client->resource == resource);
++ client->resource = NULL;
++
++ weston_desktop_client_destroy(client);
++}
++
+ static int
+ weston_desktop_client_ping_timeout(void *user_data)
+ {
+diff --git a/libweston-desktop/internal.h b/libweston-desktop/internal.h
+index e4ab2701b..7a815bd87 100644
+--- a/libweston-desktop/internal.h
++++ b/libweston-desktop/internal.h
+@@ -134,6 +134,8 @@ weston_desktop_client_create(struct weston_desktop *desktop,
+ const struct wl_interface *interface,
+ const void *implementation, uint32_t version,
+ uint32_t id);
++void
++weston_desktop_client_destroy(struct weston_desktop_client *client);
+
+ void
+ weston_desktop_client_add_destroy_listener(struct weston_desktop_client *client,
+--
+GitLab
+