labwc/include/xwayland.h
Manuel Barrio Linares 76f166ae42 chase wlroots: wlr_xwayland_set_cursor now takes a wlr_buffer (MR 5230)
Ref: 84d603acc06a45dd3c3a4b2cf1fd08b2933ca2b5
(xwayland: take wlr_buffer in wlr_xwayland_set_cursor())

Ref: 6ae54dca23064e897b393283887986e5719a747f
(xwayland: lock new buffer instead of the old one)

Co-Authored-By: Consolatis

This wlroots change fixes a potential UAF which we dealt with in labwc.
We can thus remove the workaround completely.
2026-03-29 15:58:13 +01:00

85 lines
2.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef LABWC_XWAYLAND_H
#define LABWC_XWAYLAND_H
#include "config.h"
#if HAVE_XWAYLAND
#include "view.h"
struct wlr_compositor;
struct wlr_output;
struct wlr_output_layout;
struct xwayland_unmanaged {
struct wlr_xwayland_surface *xwayland_surface;
struct wlr_scene_node *node;
struct wl_list link;
struct mappable mappable;
struct wl_listener associate;
struct wl_listener dissociate;
struct wl_listener grab_focus;
struct wl_listener request_activate;
struct wl_listener request_configure;
/* struct wl_listener request_fullscreen; */
struct wl_listener set_geometry;
struct wl_listener destroy;
struct wl_listener set_override_redirect;
/*
* True if the surface has performed a keyboard grab. labwc
* honors keyboard grabs and will give the surface focus when
* it's mapped (which may occur slightly later) and on top.
*/
bool ever_grabbed_focus;
};
struct xwayland_view {
struct view base;
struct wlr_xwayland_surface *xwayland_surface;
bool focused_before_map;
bool initial_geometry_set;
/* Events unique to XWayland views */
struct wl_listener associate;
struct wl_listener dissociate;
struct wl_listener request_above;
struct wl_listener request_activate;
struct wl_listener request_close;
struct wl_listener request_configure;
struct wl_listener set_class;
struct wl_listener set_decorations;
struct wl_listener set_override_redirect;
struct wl_listener set_strut_partial;
struct wl_listener set_window_type;
struct wl_listener focus_in;
/* Not (yet) implemented */
/* struct wl_listener set_role; */
/* struct wl_listener set_hints; */
/* Events coming in from the view itself */
struct {
struct wl_listener always_on_top;
} on_view;
};
void xwayland_unmanaged_create(struct wlr_xwayland_surface *xsurface, bool mapped);
void xwayland_view_create(struct wlr_xwayland_surface *xsurface, bool mapped);
void xwayland_server_init(struct wlr_compositor *compositor);
void xwayland_server_finish(void);
void xwayland_adjust_usable_area(struct view *view,
struct wlr_output_layout *layout, struct wlr_output *output,
struct wlr_box *usable);
void xwayland_update_workarea(void);
void xwayland_flush(void);
#endif /* HAVE_XWAYLAND */
#endif /* LABWC_XWAYLAND_H */