aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-11-12 17:56:57 +0100
committerDrew DeVault <sir@cmpwn.com>2019-11-13 10:15:28 -0500
commitcde544de81b3da6368c3f88fe6d08df0b4bc198e (patch)
tree42e89e4f1e6f78ff454c98df368b61c76b5f0cf5
parent1e568d84dfd40e7a106a2afc74cdd7d39ba9a7dd (diff)
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.
-rw-r--r--backend/wayland/backend.c5
-rw-r--r--backend/wayland/output.c5
-rw-r--r--backend/wayland/wl_seat.c6
-rw-r--r--include/wlr/backend/wayland.h15
4 files changed, 31 insertions, 0 deletions
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
@@ -19,6 +19,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
* and your outputs will be created during initialization (and given to you via
@@ -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