From cde544de81b3da6368c3f88fe6d08df0b4bc198e Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 12 Nov 2019 17:56:57 +0100 Subject: [PATCH] backend/wayland: expose remote objects Expose the remote wl_display, wl_surface and wl_seat used by the Wayland backend. This allows compositors to customize the Wayland backend and to have more freedom. For instance a compositor might want to handle clipboard and drag-and-drop from the remote Wayland compositor. Another compositor might want to setup pointer constraints. --- backend/wayland/backend.c | 5 +++++ backend/wayland/output.c | 5 +++++ backend/wayland/wl_seat.c | 6 ++++++ include/wlr/backend/wayland.h | 15 +++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index 9d3728de..14db4d72 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -332,3 +332,8 @@ error_wl: free(wl); return NULL; } + +struct wl_display *wlr_wl_backend_get_remote_display(struct wlr_backend *backend) { + struct wlr_wl_backend *wl = get_wl_backend_from_backend(backend); + return wl->remote_display; +} diff --git a/backend/wayland/output.c b/backend/wayland/output.c index 7a13e041..808d147a 100644 --- a/backend/wayland/output.c +++ b/backend/wayland/output.c @@ -478,3 +478,8 @@ void wlr_wl_output_set_title(struct wlr_output *output, const char *title) { xdg_toplevel_set_title(wl_output->xdg_toplevel, title); } + +struct wl_surface *wlr_wl_output_get_surface(struct wlr_output *output) { + struct wlr_wl_output *wl_output = get_wl_output_from_output(output); + return wl_output->surface; +} diff --git a/backend/wayland/wl_seat.c b/backend/wayland/wl_seat.c index 40cbf74a..cbe502e6 100644 --- a/backend/wayland/wl_seat.c +++ b/backend/wayland/wl_seat.c @@ -603,3 +603,9 @@ const struct wl_seat_listener seat_listener = { .capabilities = seat_handle_capabilities, .name = seat_handle_name, }; + +struct wl_seat *wlr_wl_input_device_get_seat(struct wlr_input_device *wlr_dev) { + struct wlr_wl_input_device *dev = + get_wl_input_device_from_input_device(wlr_dev); + return dev->backend->seat; +} diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h index cd8e73fb..e424e37a 100644 --- a/include/wlr/backend/wayland.h +++ b/include/wlr/backend/wayland.h @@ -18,6 +18,11 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote, wlr_renderer_create_func_t create_renderer_func); +/** + * Returns the remote wl_display used by the Wayland backend. + */ +struct wl_display *wlr_wl_backend_get_remote_display(struct wlr_backend *backend); + /** * Adds a new output to this backend. You may remove outputs by destroying them. * Note that if called before initializing the backend, this will return NULL @@ -46,4 +51,14 @@ bool wlr_output_is_wl(struct wlr_output *output); */ void wlr_wl_output_set_title(struct wlr_output *output, const char *title); +/** + * Returns the remote wl_surface used by the Wayland output. + */ +struct wl_surface *wlr_wl_output_get_surface(struct wlr_output *output); + +/** + * Returns the remote wl_seat for a Wayland input device. + */ +struct wl_seat *wlr_wl_input_device_get_seat(struct wlr_input_device *dev); + #endif