From 07e62e2f7512e6ca7871f122800ef18447d50442 Mon Sep 17 00:00:00 2001 From: rewine Date: Fri, 28 Nov 2025 11:22:37 +0800 Subject: [PATCH] types: remove support for wlr_server_decoration Has been replaced by wlr_xdg_decoration_v1. Sway: https://github.com/swaywm/sway/pull/8956 Signed-off-by: rewine --- include/wlr/types/wlr_server_decoration.h | 88 ---------- protocol/meson.build | 1 - protocol/server-decoration.xml | 94 ---------- types/meson.build | 1 - types/wlr_server_decoration.c | 204 ---------------------- 5 files changed, 388 deletions(-) delete mode 100644 include/wlr/types/wlr_server_decoration.h delete mode 100644 protocol/server-decoration.xml delete mode 100644 types/wlr_server_decoration.c diff --git a/include/wlr/types/wlr_server_decoration.h b/include/wlr/types/wlr_server_decoration.h deleted file mode 100644 index 2b0e859eb..000000000 --- a/include/wlr/types/wlr_server_decoration.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This protocol is obsolete and will be removed in a future version. The - * recommended replacement is xdg-decoration. - */ - -/* - * This an unstable interface of wlroots. No guarantees are made regarding the - * future consistency of this API. - */ -#ifndef WLR_USE_UNSTABLE -#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features" -#endif - -#ifndef WLR_TYPES_WLR_SERVER_DECORATION_H -#define WLR_TYPES_WLR_SERVER_DECORATION_H - -#include - -/** - * Possible values to use in request_mode and the event mode. Same as - * org_kde_kwin_server_decoration_manager_mode. - */ -enum wlr_server_decoration_manager_mode { - /** - * Undecorated: The surface is not decorated at all, neither server nor - * client-side. An example is a popup surface which should not be - * decorated. - */ - WLR_SERVER_DECORATION_MANAGER_MODE_NONE = 0, - /** - * Client-side decoration: The decoration is part of the surface and the - * client. - */ - WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT = 1, - /** - * Server-side decoration: The server embeds the surface into a decoration - * frame. - */ - WLR_SERVER_DECORATION_MANAGER_MODE_SERVER = 2, -}; - -/** - * A decoration negotiation interface which implements the KDE protocol. - */ -struct wlr_server_decoration_manager { - struct wl_global *global; - struct wl_list resources; // wl_resource_get_link() - struct wl_list decorations; // wlr_server_decoration.link - - uint32_t default_mode; // enum wlr_server_decoration_manager_mode - - struct { - struct wl_signal new_decoration; - struct wl_signal destroy; - } events; - - void *data; - - struct { - struct wl_listener display_destroy; - } WLR_PRIVATE; -}; - -struct wlr_server_decoration { - struct wl_resource *resource; - struct wlr_surface *surface; - struct wl_list link; - - uint32_t mode; // enum wlr_server_decoration_manager_mode - - struct { - struct wl_signal destroy; - struct wl_signal mode; - } events; - - void *data; - - struct { - struct wl_listener surface_destroy_listener; - } WLR_PRIVATE; -}; - -struct wlr_server_decoration_manager *wlr_server_decoration_manager_create( - struct wl_display *display); -void wlr_server_decoration_manager_set_default_mode( - struct wlr_server_decoration_manager *manager, uint32_t default_mode); - -#endif diff --git a/protocol/meson.build b/protocol/meson.build index 613d18018..39c072a1a 100644 --- a/protocol/meson.build +++ b/protocol/meson.build @@ -65,7 +65,6 @@ protocols = { # Other protocols 'drm': 'drm.xml', 'input-method-unstable-v2': 'input-method-unstable-v2.xml', - 'kde-server-decoration': 'server-decoration.xml', 'virtual-keyboard-unstable-v1': 'virtual-keyboard-unstable-v1.xml', 'wlr-data-control-unstable-v1': 'wlr-data-control-unstable-v1.xml', 'wlr-export-dmabuf-unstable-v1': 'wlr-export-dmabuf-unstable-v1.xml', diff --git a/protocol/server-decoration.xml b/protocol/server-decoration.xml deleted file mode 100644 index 45f112841..000000000 --- a/protocol/server-decoration.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - . - ]]> - - - This interface allows to coordinate whether the server should create - a server-side window decoration around a wl_surface representing a - shell surface (wl_shell_surface or similar). By announcing support - for this interface the server indicates that it supports server - side decorations. - - - - When a client creates a server-side decoration object it indicates - that it supports the protocol. The client is supposed to tell the - server whether it wants server-side decorations or will provide - client-side decorations. - - If the client does not create a server-side decoration object for - a surface the server interprets this as lack of support for this - protocol and considers it as client-side decorated. Nevertheless a - client-side decorated surface should use this protocol to indicate - to the server that it does not want a server-side deco. - - - - - - - - - - - - - This event is emitted directly after binding the interface. It contains - the default mode for the decoration. When a new server decoration object - is created this new object will be in the default mode until the first - request_mode is requested. - - The server may change the default mode at any time. - - - - - - - - - - - - - - - - - - - - - This event is emitted directly after the decoration is created and - represents the base decoration policy by the server. E.g. a server - which wants all surfaces to be client-side decorated will send Client, - a server which wants server-side decoration will send Server. - - The client can request a different mode through the decoration request. - The server will acknowledge this by another event with the same mode. So - even if a server prefers server-side decoration it's possible to force a - client-side decoration. - - The server may emit this event at any time. In this case the client can - again request a different mode. It's the responsibility of the server to - prevent a feedback loop. - - - - - diff --git a/types/meson.build b/types/meson.build index 402fd3e11..a429b68b5 100644 --- a/types/meson.build +++ b/types/meson.build @@ -80,7 +80,6 @@ wlr_files += files( 'wlr_relative_pointer_v1.c', 'wlr_screencopy_v1.c', 'wlr_security_context_v1.c', - 'wlr_server_decoration.c', 'wlr_session_lock_v1.c', 'wlr_shm.c', 'wlr_single_pixel_buffer_v1.c', diff --git a/types/wlr_server_decoration.c b/types/wlr_server_decoration.c deleted file mode 100644 index a6f33b469..000000000 --- a/types/wlr_server_decoration.c +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include -#include -#include -#include -#include "server-decoration-protocol.h" - -static const struct org_kde_kwin_server_decoration_interface - server_decoration_impl; - -static struct wlr_server_decoration *decoration_from_resource( - struct wl_resource *resource) { - assert(wl_resource_instance_of(resource, - &org_kde_kwin_server_decoration_interface, &server_decoration_impl)); - return wl_resource_get_user_data(resource); -} - -static void server_decoration_handle_release(struct wl_client *client, - struct wl_resource *resource) { - wl_resource_destroy(resource); -} - -static void server_decoration_handle_request_mode(struct wl_client *client, - struct wl_resource *resource, uint32_t mode) { - struct wlr_server_decoration *decoration = - decoration_from_resource(resource); - if (decoration == NULL || decoration->mode == mode) { - return; - } - decoration->mode = mode; - wl_signal_emit_mutable(&decoration->events.mode, decoration); - org_kde_kwin_server_decoration_send_mode(decoration->resource, - decoration->mode); -} - -static void server_decoration_destroy( - struct wlr_server_decoration *decoration) { - wl_signal_emit_mutable(&decoration->events.destroy, decoration); - - assert(wl_list_empty(&decoration->events.destroy.listener_list)); - assert(wl_list_empty(&decoration->events.mode.listener_list)); - - wl_list_remove(&decoration->surface_destroy_listener.link); - wl_resource_set_user_data(decoration->resource, NULL); - wl_list_remove(&decoration->link); - free(decoration); -} - -static void server_decoration_destroy_resource(struct wl_resource *resource) { - struct wlr_server_decoration *decoration = - decoration_from_resource(resource); - if (decoration != NULL) { - server_decoration_destroy(decoration); - } -} - -static void server_decoration_handle_surface_destroy( - struct wl_listener *listener, void *data) { - struct wlr_server_decoration *decoration = - wl_container_of(listener, decoration, surface_destroy_listener); - server_decoration_destroy(decoration); -} - -static const struct org_kde_kwin_server_decoration_interface - server_decoration_impl = { - .release = server_decoration_handle_release, - .request_mode = server_decoration_handle_request_mode, -}; - -static const struct org_kde_kwin_server_decoration_manager_interface - server_decoration_manager_impl; - -static struct wlr_server_decoration_manager *manager_from_resource( - struct wl_resource *resource) { - assert(wl_resource_instance_of(resource, - &org_kde_kwin_server_decoration_manager_interface, - &server_decoration_manager_impl)); - return wl_resource_get_user_data(resource); -} - -static void server_decoration_manager_handle_create(struct wl_client *client, - struct wl_resource *manager_resource, uint32_t id, - struct wl_resource *surface_resource) { - struct wlr_server_decoration_manager *manager = - manager_from_resource(manager_resource); - struct wlr_surface *surface = wlr_surface_from_resource(surface_resource); - - struct wlr_server_decoration *decoration = calloc(1, sizeof(*decoration)); - if (decoration == NULL) { - wl_client_post_no_memory(client); - return; - } - decoration->surface = surface; - decoration->mode = manager->default_mode; - - int version = wl_resource_get_version(manager_resource); - decoration->resource = wl_resource_create(client, - &org_kde_kwin_server_decoration_interface, version, id); - if (decoration->resource == NULL) { - free(decoration); - wl_client_post_no_memory(client); - return; - } - wl_resource_set_implementation(decoration->resource, - &server_decoration_impl, decoration, - server_decoration_destroy_resource); - - wlr_log(WLR_DEBUG, "new server_decoration %p (res %p)", decoration, - decoration->resource); - - wl_signal_init(&decoration->events.destroy); - wl_signal_init(&decoration->events.mode); - - wl_signal_add(&surface->events.destroy, - &decoration->surface_destroy_listener); - decoration->surface_destroy_listener.notify = - server_decoration_handle_surface_destroy; - - wl_list_insert(&manager->decorations, &decoration->link); - - org_kde_kwin_server_decoration_send_mode(decoration->resource, - decoration->mode); - - wl_signal_emit_mutable(&manager->events.new_decoration, decoration); -} - -static const struct org_kde_kwin_server_decoration_manager_interface - server_decoration_manager_impl = { - .create = server_decoration_manager_handle_create, -}; - -void wlr_server_decoration_manager_set_default_mode( - struct wlr_server_decoration_manager *manager, uint32_t default_mode) { - manager->default_mode = default_mode; - - struct wl_resource *resource; - wl_resource_for_each(resource, &manager->resources) { - org_kde_kwin_server_decoration_manager_send_default_mode(resource, - manager->default_mode); - } -} - -static void server_decoration_manager_destroy_resource( - struct wl_resource *resource) { - wl_list_remove(wl_resource_get_link(resource)); -} - -static void server_decoration_manager_bind(struct wl_client *client, void *data, - uint32_t version, uint32_t id) { - struct wlr_server_decoration_manager *manager = data; - - struct wl_resource *resource = wl_resource_create(client, - &org_kde_kwin_server_decoration_manager_interface, version, id); - if (resource == NULL) { - wl_client_post_no_memory(client); - return; - } - wl_resource_set_implementation(resource, &server_decoration_manager_impl, - manager, server_decoration_manager_destroy_resource); - - wl_list_insert(&manager->resources, wl_resource_get_link(resource)); - - org_kde_kwin_server_decoration_manager_send_default_mode(resource, - manager->default_mode); -} - -static void handle_display_destroy(struct wl_listener *listener, void *data) { - struct wlr_server_decoration_manager *manager = - wl_container_of(listener, manager, display_destroy); - wl_signal_emit_mutable(&manager->events.destroy, manager); - - assert(wl_list_empty(&manager->events.new_decoration.listener_list)); - assert(wl_list_empty(&manager->events.destroy.listener_list)); - - wl_list_remove(&manager->display_destroy.link); - wl_global_destroy(manager->global); - free(manager); -} - -struct wlr_server_decoration_manager *wlr_server_decoration_manager_create( - struct wl_display *display) { - struct wlr_server_decoration_manager *manager = calloc(1, sizeof(*manager)); - if (manager == NULL) { - return NULL; - } - manager->global = wl_global_create(display, - &org_kde_kwin_server_decoration_manager_interface, 1, manager, - server_decoration_manager_bind); - if (manager->global == NULL) { - free(manager); - return NULL; - } - manager->default_mode = ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_NONE; - wl_list_init(&manager->resources); - wl_list_init(&manager->decorations); - - wl_signal_init(&manager->events.new_decoration); - wl_signal_init(&manager->events.destroy); - - manager->display_destroy.notify = handle_display_destroy; - wl_display_add_destroy_listener(display, &manager->display_destroy); - - return manager; -}