1
1
mirror of https://github.com/swaywm/sway synced 2024-11-23 13:22:17 +01:00

Hide xwayland_shell_v1 from regular clients

Regular clients are not allowed to use this interface. wlroots
already sends a protocol error if a non-Xwayland client tries to
use this interface, but let's remove all temptation by hiding it
completely.
This commit is contained in:
Simon Ser 2023-06-22 16:26:00 +02:00
parent d84b3832f4
commit 4a2210577c

@ -49,6 +49,7 @@
#include "sway/tree/root.h" #include "sway/tree/root.h"
#if HAVE_XWAYLAND #if HAVE_XWAYLAND
#include <wlr/xwayland/shell.h>
#include "sway/xwayland.h" #include "sway/xwayland.h"
#endif #endif
@ -73,11 +74,25 @@ static void handle_drm_lease_request(struct wl_listener *listener, void *data) {
} }
#endif #endif
static bool filter_global(const struct wl_client *client,
const struct wl_global *global, void *data) {
#if HAVE_XWAYLAND
struct wlr_xwayland *xwayland = server.xwayland.wlr_xwayland;
if (global == xwayland->shell_v1->global) {
return xwayland->server != NULL && client == xwayland->server->client;
}
#endif
return true;
}
bool server_init(struct sway_server *server) { bool server_init(struct sway_server *server) {
sway_log(SWAY_DEBUG, "Initializing Wayland server"); sway_log(SWAY_DEBUG, "Initializing Wayland server");
server->wl_display = wl_display_create(); server->wl_display = wl_display_create();
server->wl_event_loop = wl_display_get_event_loop(server->wl_display); server->wl_event_loop = wl_display_get_event_loop(server->wl_display);
wl_display_set_global_filter(server->wl_display, filter_global, NULL);
server->backend = wlr_backend_autocreate(server->wl_display, &server->session); server->backend = wlr_backend_autocreate(server->wl_display, &server->session);
if (!server->backend) { if (!server->backend) {
sway_log(SWAY_ERROR, "Unable to create backend"); sway_log(SWAY_ERROR, "Unable to create backend");