Documentation for <wlr/xwayland/xwayland.h>

Back to index

Table of contents

struct wlr_xwayland

struct wlr_xwayland {
	struct wlr_xwayland_server *server;
	struct wlr_xwm *xwm;
	struct wlr_xwayland_shell_v1 *shell_v1;
	struct wlr_xwayland_cursor *cursor;
	
	const char *display_name;
	
	struct wl_display *wl_display;
	struct wlr_compositor *compositor;
	struct wlr_seat *seat;
	
	struct {
		struct wl_signal ready;
		struct wl_signal new_surface;
		struct wl_signal remove_startup_info;
	} events;
	
	/**
	 * Add a custom event handler to xwayland. Return 1 if the event was
	 * handled or 0 to use the default wlr-xwayland handler. wlr-xwayland will
	 * free the event.
	 */
	int (*user_event_handler)(​struct wlr_xwm *xwm, xcb_generic_event_t *event);
	
	struct wl_listener server_start;
	struct wl_listener server_ready;
	struct wl_listener server_destroy;
	struct wl_listener seat_destroy;
	
	void *data;
};

wlr_xwayland_create()

struct wlr_xwayland *wlr_xwayland_create(​struct wl_display *wl_display, struct wlr_compositor *compositor, bool lazy);

Create an Xwayland server and XWM.

The server supports a lazy mode in which Xwayland is only started when a client tries to connect.

wlr_xwayland_destroy()

void wlr_xwayland_destroy(​struct wlr_xwayland *wlr_xwayland);

enum wlr_xwayland_icccm_input_model

enum wlr_xwayland_icccm_input_model {
	WLR_ICCCM_INPUT_MODEL_NONE,
	WLR_ICCCM_INPUT_MODEL_PASSIVE,
	WLR_ICCCM_INPUT_MODEL_LOCAL,
	WLR_ICCCM_INPUT_MODEL_GLOBAL,
};

This represents the input focus described as follows:

https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#input_focus

wlr_xwayland_icccm_input_model()

enum wlr_xwayland_icccm_input_model wlr_xwayland_icccm_input_model(​const struct wlr_xwayland_surface *xsurface);

struct wlr_xwayland_minimize_event

struct wlr_xwayland_minimize_event {
	struct wlr_xwayland_surface *surface;
	bool minimize;
};

struct wlr_xwayland_move_event

struct wlr_xwayland_move_event {
	struct wlr_xwayland_surface *surface;
};

wlr_xwayland_or_surface_wants_focus()

bool wlr_xwayland_or_surface_wants_focus(​const struct wlr_xwayland_surface *xsurface);

struct wlr_xwayland_remove_startup_info_event

struct wlr_xwayland_remove_startup_info_event {
	const char *id;
	xcb_window_t window;
};

struct wlr_xwayland_resize_event

struct wlr_xwayland_resize_event {
	struct wlr_xwayland_surface *surface;
	uint32_t edges;
};

wlr_xwayland_set_cursor()

void wlr_xwayland_set_cursor(​struct wlr_xwayland *wlr_xwayland, uint8_t *pixels, uint32_t stride, uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y);

wlr_xwayland_set_seat()

void wlr_xwayland_set_seat(​struct wlr_xwayland *xwayland, struct wlr_seat *seat);

struct wlr_xwayland_surface

struct wlr_xwayland_surface {
	xcb_window_t window_id;
	struct wlr_xwm *xwm;
	uint32_t surface_id;
	uint64_t serial;
	
	struct wl_list link;
	struct wl_list stack_link;
	struct wl_list unpaired_link;
	
	struct wlr_surface *surface;
	struct wlr_addon surface_addon;
	struct wl_listener surface_commit;
	struct wl_listener surface_precommit;
	
	int16_t x, y;
	uint16_t width, height;
	uint16_t saved_width, saved_height;
	bool override_redirect;
	bool mapped;
	
	char *title;
	char *class;
	char *instance;
	char *role;
	char *startup_id;
	pid_t pid;
	bool has_utf8_title;
	
	struct wl_list children; // wlr_xwayland_surface::parent_link
	struct wlr_xwayland_surface *parent;
	struct wl_list parent_link; // wlr_xwayland_surface::children
	
	xcb_atom_t *window_type;
	size_t window_type_len;
	
	xcb_atom_t *protocols;
	size_t protocols_len;
	
	uint32_t decorations;
	xcb_icccm_wm_hints_t *hints;
	xcb_size_hints_t *size_hints;
	/*
	 * _NET_WM_STRUT_PARTIAL (used by e.g. XWayland panels;
	 * right/bottom are translated into root x/y coordinates)
	 */
	xcb_ewmh_wm_strut_partial_t *strut_partial;
	
	bool pinging;
	struct wl_event_source *ping_timer;
	
	// _NET_WM_STATE
	 bool modal;
	bool fullscreen;
	bool maximized_vert, maximized_horz;
	bool minimized;
	bool withdrawn;
	
	bool has_alpha;
	
	struct {
		struct wl_signal destroy;
		struct wl_signal request_configure;
		struct wl_signal request_move;
		struct wl_signal request_resize;
		struct wl_signal request_minimize;
		struct wl_signal request_maximize;
		struct wl_signal request_fullscreen;
		struct wl_signal request_activate;
		
		struct wl_signal map;
		struct wl_signal unmap;
		struct wl_signal set_title;
		struct wl_signal set_class;
		struct wl_signal set_role;
		struct wl_signal set_parent;
		struct wl_signal set_pid;
		struct wl_signal set_startup_id;
		struct wl_signal set_window_type;
		struct wl_signal set_hints;
		struct wl_signal set_decorations;
		struct wl_signal set_strut_partial;
		struct wl_signal set_override_redirect;
		struct wl_signal set_geometry;
		struct wl_signal ping_timeout;
	} events;
	
	void *data;
};

An Xwayland user interface component. It has an absolute position in layout-local coordinates.

When a surface is ready to be displayed, the `map` event is emitted. When a surface should no longer be displayed, the `unmap` event is emitted. The `unmap` event is guaranteed to be emitted before the `destroy` event if the view is destroyed when mapped.

wlr_xwayland_surface_activate()

void wlr_xwayland_surface_activate(​struct wlr_xwayland_surface *surface, bool activated);

wlr_xwayland_surface_close()

void wlr_xwayland_surface_close(​struct wlr_xwayland_surface *surface);

wlr_xwayland_surface_configure()

void wlr_xwayland_surface_configure(​struct wlr_xwayland_surface *surface, int16_t x, int16_t y, uint16_t width, uint16_t height);

struct wlr_xwayland_surface_configure_event

struct wlr_xwayland_surface_configure_event {
	struct wlr_xwayland_surface *surface;
	int16_t x, y;
	uint16_t width, height;
	uint16_t mask; // xcb_config_window_t
};

enum wlr_xwayland_surface_decorations

enum wlr_xwayland_surface_decorations {
	WLR_XWAYLAND_SURFACE_DECORATIONS_ALL,
	WLR_XWAYLAND_SURFACE_DECORATIONS_NO_BORDER,
	WLR_XWAYLAND_SURFACE_DECORATIONS_NO_TITLE,
};

wlr_xwayland_surface_ping()

void wlr_xwayland_surface_ping(​struct wlr_xwayland_surface *surface);

wlr_xwayland_surface_restack()

void wlr_xwayland_surface_restack(​struct wlr_xwayland_surface *surface, struct wlr_xwayland_surface *sibling, enum xcb_stack_mode_t mode);

Restack surface relative to sibling. If sibling is NULL, then the surface is moved to the top or the bottom of the stack (depending on the mode).

wlr_xwayland_surface_set_fullscreen()

void wlr_xwayland_surface_set_fullscreen(​struct wlr_xwayland_surface *surface, bool fullscreen);

wlr_xwayland_surface_set_maximized()

void wlr_xwayland_surface_set_maximized(​struct wlr_xwayland_surface *surface, bool maximized);

wlr_xwayland_surface_set_minimized()

void wlr_xwayland_surface_set_minimized(​struct wlr_xwayland_surface *surface, bool minimized);

wlr_xwayland_surface_set_withdrawn()

void wlr_xwayland_surface_set_withdrawn(​struct wlr_xwayland_surface *surface, bool withdrawn);

wlr_xwayland_surface_try_from_wlr_surface()

struct wlr_xwayland_surface *wlr_xwayland_surface_try_from_wlr_surface(​struct wlr_surface *surface);

Get a struct wlr_xwayland_surface from a struct wlr_surface.

If the surface hasn't been created by Xwayland or has no X11 window associated, NULL is returned.

struct wlr_xwm

struct wlr_xwm;