diff options
| author | Tony Crisci <tony@dubstepdish.com> | 2017-12-13 17:54:19 -0500 | 
|---|---|---|
| committer | Tony Crisci <tony@dubstepdish.com> | 2017-12-13 17:54:19 -0500 | 
| commit | ea4b871e16ae63db67f2bf89c00e814b3dde6c78 (patch) | |
| tree | acbfa32bbd367b66344a42ea7f265a14af818b52 /include | |
| parent | 96f09c749228f631e3a160de370e2894a4428e20 (diff) | |
| download | wlroots-ea4b871e16ae63db67f2bf89c00e814b3dde6c78.tar.xz | |
xwm: user custom event handler
Diffstat (limited to 'include')
| -rw-r--r-- | include/wlr/xwayland.h | 7 | ||||
| -rw-r--r-- | include/wlr/xwm.h | 75 | 
2 files changed, 82 insertions, 0 deletions
| diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h index 792d2b88..9a89661b 100644 --- a/include/wlr/xwayland.h +++ b/include/wlr/xwayland.h @@ -32,6 +32,13 @@ struct wlr_xwayland {  		struct wl_signal new_surface;  	} 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); +  	void *data;  }; diff --git a/include/wlr/xwm.h b/include/wlr/xwm.h new file mode 100644 index 00000000..c350b6e2 --- /dev/null +++ b/include/wlr/xwm.h @@ -0,0 +1,75 @@ +#ifndef XWAYLAND_INTERNALS_H +#define XWAYLAND_INTERNALS_H + +#include <xcb/render.h> +#include <wayland-server-core.h> +#include <wlr/xwayland.h> + +enum atom_name { +	WL_SURFACE_ID, +	WM_DELETE_WINDOW, +	WM_PROTOCOLS, +	WM_HINTS, +	WM_NORMAL_HINTS, +	WM_SIZE_HINTS, +	MOTIF_WM_HINTS, +	UTF8_STRING, +	WM_S0, +	NET_SUPPORTED, +	NET_WM_S0, +	NET_WM_PID, +	NET_WM_NAME, +	NET_WM_STATE, +	NET_WM_WINDOW_TYPE, +	WM_TAKE_FOCUS, +	WINDOW, +	_NET_ACTIVE_WINDOW, +	_NET_WM_MOVERESIZE, +	_NET_WM_NAME, +	_NET_SUPPORTING_WM_CHECK, +	_NET_WM_STATE_FULLSCREEN, +	_NET_WM_STATE_MAXIMIZED_VERT, +	_NET_WM_STATE_MAXIMIZED_HORZ, +	WM_STATE, +	ATOM_LAST, +}; + +extern const char *atom_map[ATOM_LAST]; + +enum net_wm_state_action { +	NET_WM_STATE_REMOVE = 0, +	NET_WM_STATE_ADD = 1, +	NET_WM_STATE_TOGGLE = 2, +}; + +struct wlr_xwm { +	struct wlr_xwayland *xwayland; +	struct wl_event_source *event_source; + +	xcb_atom_t atoms[ATOM_LAST]; +	xcb_connection_t *xcb_conn; +	xcb_screen_t *screen; +	xcb_window_t window; +	xcb_visualid_t visual_id; +	xcb_colormap_t colormap; +	xcb_render_pictformat_t render_format_id; +	xcb_cursor_t cursor; + +	struct wlr_xwayland_surface *focus_surface; + +	struct wl_list surfaces; // wlr_xwayland_surface::link +	struct wl_list unpaired_surfaces; // wlr_xwayland_surface::unpaired_link + +	const xcb_query_extension_reply_t *xfixes; + +	struct wl_listener compositor_surface_create; +}; + +struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland); + +void xwm_destroy(struct wlr_xwm *xwm); + +void xwm_set_cursor(struct wlr_xwm *xwm, const uint8_t *pixels, uint32_t stride, +	uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y); + +#endif | 
