[neon/backports-noble/wayland-noble/Neon/release] src: Send wl_registry.global_remove to global's offer list
Pekka Paalanen
null at kde.org
Sat Aug 22 05:55:34 BST 2026
Git commit 44b26e34e510e4f31266a1e8a85986d437d0e781 by Pekka Paalanen, on behalf of Vlad Zahorodnii.
Committed on 24/03/2026 at 11:45.
Pushed by carlosdem into branch 'Neon/release'.
Send wl_registry.global_remove to global's offer list
Since the globals track the registries that received global
announcements, we can use that instead of going through all present
registries and duplicate some filtering logic.
Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
M +19 -21 src/wayland-server.c
https://invent.kde.org/neon/backports-noble/wayland-noble/-/commit/44b26e34e510e4f31266a1e8a85986d437d0e781
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 932ac66..31b597e 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -130,7 +130,7 @@ struct wl_global {
wl_global_bind_func_t bind;
wl_global_withdrawn_func_t withdrawn;
struct wl_list link;
- bool removed;
+ bool unpublished;
};
struct wl_global_offer {
@@ -1115,8 +1115,8 @@ display_sync(struct wl_client *client,
}
static void
-wl_global_announce(struct wl_global *global,
- struct wl_resource *registry_resource)
+wl_global_publish(struct wl_global *global,
+ struct wl_resource *registry_resource)
{
struct wl_global_offer *offer;
struct wl_registry *registry = registry_resource->data;
@@ -1154,7 +1154,7 @@ wl_global_offer_done(struct wl_global_offer *offer)
wl_global_offer_destroy(offer);
- if (global->removed && global->withdrawn && wl_list_empty(&global->offer_list))
+ if (global->unpublished && global->withdrawn && wl_list_empty(&global->offer_list))
global->withdrawn(global);
}
@@ -1220,8 +1220,8 @@ display_get_registry(struct wl_client *client,
®istry_resource->link);
wl_list_for_each(global, &display->global_list, link)
- if (wl_global_is_visible(client, global) && !global->removed)
- wl_global_announce(global, registry_resource);
+ if (wl_global_is_visible(client, global) && !global->unpublished)
+ wl_global_publish(global, registry_resource);
}
static const struct wl_display_interface display_interface = {
@@ -1488,29 +1488,27 @@ wl_global_create(struct wl_display *display,
global->data = data;
global->bind = bind;
global->withdrawn = NULL;
- global->removed = false;
+ global->unpublished = false;
wl_list_insert(display->global_list.prev, &global->link);
wl_list_init(&global->offer_list);
wl_list_for_each(resource, &display->registry_resource_list, link)
if (wl_global_is_visible(resource->client, global))
- wl_global_announce(global, resource);
+ wl_global_publish(global, resource);
return global;
}
static void
-wl_global_send_removed(struct wl_global *global)
+wl_global_unpublish(struct wl_global *global)
{
- struct wl_display *display = global->display;
- struct wl_resource *resource;
+ struct wl_global_offer *offer;
- wl_list_for_each(resource, &display->registry_resource_list, link)
- if (wl_global_is_visible(resource->client, global))
- wl_resource_post_event(resource, WL_REGISTRY_GLOBAL_REMOVE,
- global->name);
+ wl_list_for_each(offer, &global->offer_list, global_link)
+ wl_resource_post_event(offer->registry_resource,
+ WL_REGISTRY_GLOBAL_REMOVE, global->name);
- global->removed = true;
+ global->unpublished = true;
}
/** Remove the global
@@ -1554,12 +1552,12 @@ wl_global_send_removed(struct wl_global *global)
WL_EXPORT void
wl_global_remove(struct wl_global *global)
{
- if (global->removed)
+ if (global->unpublished)
wl_abort("wl_global_remove: called twice on the same "
"global '%s#%"PRIu32"'", global->interface->name,
global->name);
- wl_global_send_removed(global);
+ wl_global_unpublish(global);
if (global->withdrawn && wl_list_empty(&global->offer_list))
global->withdrawn(global);
@@ -1597,8 +1595,8 @@ wl_global_destroy(struct wl_global *global)
{
struct wl_global_offer *offer;
- if (!global->removed)
- wl_global_send_removed(global);
+ if (!global->unpublished)
+ wl_global_unpublish(global);
wl_list_remove(&global->link);
@@ -2889,7 +2887,7 @@ wl_fixes_handle_ack_global_remove(struct wl_resource *fixes_resource,
return;
}
- if (!offer->global->removed) {
+ if (!offer->global->unpublished) {
wl_resource_post_error(fixes_resource, WL_FIXES_ERROR_INVALID_ACK_REMOVE,
"global %u is not removed", global_name);
return;
More information about the Neon-commits
mailing list