aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/drm/drm.c4
-rw-r--r--backend/headless/input_device.c4
-rw-r--r--backend/headless/output.c4
-rw-r--r--backend/libinput/events.c4
-rw-r--r--backend/wayland/output.c4
-rw-r--r--backend/wayland/wl_seat.c4
-rw-r--r--backend/x11/backend.c13
-rw-r--r--include/backend/drm/drm.h1
-rw-r--r--include/backend/headless.h1
-rw-r--r--include/backend/wayland.h2
-rw-r--r--include/backend/x11.h2
-rw-r--r--include/wlr/backend/drm.h2
-rw-r--r--include/wlr/backend/headless.h3
-rw-r--r--include/wlr/backend/libinput.h1
-rw-r--r--include/wlr/backend/wayland.h14
-rw-r--r--include/wlr/backend/x11.h4
16 files changed, 59 insertions, 8 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 1fceff95..06f012a3 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -658,6 +658,10 @@ static struct wlr_output_impl output_impl = {
.get_gamma_size = wlr_drm_connector_get_gamma_size,
};
+bool wlr_output_is_drm(struct wlr_output *output) {
+ return output->impl == &output_impl;
+}
+
static int retry_pageflip(void *data) {
struct wlr_drm_connector *conn = data;
wlr_log(L_INFO, "%s: Retrying pageflip", conn->output.name);
diff --git a/backend/headless/input_device.c b/backend/headless/input_device.c
index 05def775..5c62e87f 100644
--- a/backend/headless/input_device.c
+++ b/backend/headless/input_device.c
@@ -19,6 +19,10 @@ static struct wlr_input_device_impl input_device_impl = {
.destroy = input_device_destroy,
};
+bool wlr_input_device_is_headless(struct wlr_input_device *wlr_dev) {
+ return wlr_dev->impl == &input_device_impl;
+}
+
struct wlr_input_device *wlr_headless_add_input_device(
struct wlr_backend *wlr_backend, enum wlr_input_device_type type) {
struct wlr_headless_backend *backend =
diff --git a/backend/headless/output.c b/backend/headless/output.c
index 9c4ba35e..511c2c53 100644
--- a/backend/headless/output.c
+++ b/backend/headless/output.c
@@ -82,6 +82,10 @@ static const struct wlr_output_impl output_impl = {
.swap_buffers = output_swap_buffers,
};
+bool wlr_output_is_headless(struct wlr_output *wlr_output) {
+ return wlr_output->impl == &output_impl;
+}
+
static int signal_frame(void *data) {
struct wlr_headless_output *output = data;
wl_signal_emit(&output->wlr_output.events.frame, &output->wlr_output);
diff --git a/backend/libinput/events.c b/backend/libinput/events.c
index c14aef01..758a9f25 100644
--- a/backend/libinput/events.c
+++ b/backend/libinput/events.c
@@ -53,6 +53,10 @@ static struct wlr_input_device *allocate_device(
return wlr_dev;
}
+bool wlr_input_device_is_libinput(struct wlr_input_device *wlr_dev) {
+ return wlr_dev->impl == &input_device_impl;
+}
+
static void handle_device_added(struct wlr_libinput_backend *backend,
struct libinput_device *libinput_dev) {
assert(backend && libinput_dev);
diff --git a/backend/wayland/output.c b/backend/wayland/output.c
index d841ec49..d76f6366 100644
--- a/backend/wayland/output.c
+++ b/backend/wayland/output.c
@@ -205,6 +205,10 @@ static struct wlr_output_impl output_impl = {
.move_cursor = wlr_wl_output_move_cursor,
};
+bool wlr_output_is_wl(struct wlr_output *wlr_output) {
+ return wlr_output->impl == &output_impl;
+}
+
static void xdg_surface_handle_configure(void *data, struct zxdg_surface_v6 *xdg_surface,
uint32_t serial) {
struct wlr_wl_backend_output *output = data;
diff --git a/backend/wayland/wl_seat.c b/backend/wayland/wl_seat.c
index 0d4ebc8d..ddee268d 100644
--- a/backend/wayland/wl_seat.c
+++ b/backend/wayland/wl_seat.c
@@ -203,6 +203,10 @@ static struct wlr_input_device_impl input_device_impl = {
.destroy = input_device_destroy
};
+bool wlr_input_device_is_wl(struct wlr_input_device *dev) {
+ return dev->impl == &input_device_impl;
+}
+
static struct wlr_input_device *allocate_device(struct wlr_wl_backend *backend,
enum wlr_input_device_type type) {
struct wlr_wl_input_device *wlr_wl_dev;
diff --git a/backend/x11/backend.c b/backend/x11/backend.c
index f6f9cfa8..d2690342 100644
--- a/backend/x11/backend.c
+++ b/backend/x11/backend.c
@@ -25,6 +25,7 @@
static struct wlr_backend_impl backend_impl;
static struct wlr_output_impl output_impl;
+static struct wlr_input_device_impl input_device_impl = { 0 };
static uint32_t xcb_button_to_wl(uint32_t button) {
switch (button) {
@@ -328,12 +329,12 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
}
wlr_input_device_init(&x11->keyboard_dev, WLR_INPUT_DEVICE_KEYBOARD,
- NULL, "X11 keyboard", 0, 0);
+ &input_device_impl, "X11 keyboard", 0, 0);
wlr_keyboard_init(&x11->keyboard, NULL);
x11->keyboard_dev.keyboard = &x11->keyboard;
wlr_input_device_init(&x11->pointer_dev, WLR_INPUT_DEVICE_POINTER,
- NULL, "X11 pointer", 0, 0);
+ &input_device_impl, "X11 pointer", 0, 0);
wlr_pointer_init(&x11->pointer, NULL);
x11->pointer_dev.pointer = &x11->pointer;
@@ -401,3 +402,11 @@ static struct wlr_output_impl output_impl = {
.make_current = output_make_current,
.swap_buffers = output_swap_buffers,
};
+
+bool wlr_output_is_x11(struct wlr_output *wlr_output) {
+ return wlr_output->impl == &output_impl;
+}
+
+bool wlr_input_device_is_x11(struct wlr_input_device *wlr_dev) {
+ return wlr_dev->impl == &input_device_impl;
+}
diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h
index 1f70a103..278c387c 100644
--- a/include/backend/drm/drm.h
+++ b/include/backend/drm/drm.h
@@ -12,7 +12,6 @@
#include <wlr/backend/session.h>
#include <wlr/backend/drm.h>
-#include <wlr/types/wlr_output.h>
#include <wlr/render/egl.h>
#include "iface.h"
diff --git a/include/backend/headless.h b/include/backend/headless.h
index 91ff37dd..f1948c07 100644
--- a/include/backend/headless.h
+++ b/include/backend/headless.h
@@ -3,7 +3,6 @@
#include <wlr/backend/interface.h>
#include <wlr/backend/headless.h>
-#include <wlr/types/wlr_output.h>
struct wlr_headless_backend {
struct wlr_backend backend;
diff --git a/include/backend/wayland.h b/include/backend/wayland.h
index 41cd21c8..e14e000c 100644
--- a/include/backend/wayland.h
+++ b/include/backend/wayland.h
@@ -8,8 +8,6 @@
#include <wlr/render/egl.h>
#include <wlr/backend/wayland.h>
#include <wlr/types/wlr_box.h>
-#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_input_device.h>
#include <wayland-util.h>
struct wlr_wl_backend {
diff --git a/include/backend/x11.h b/include/backend/x11.h
index 31a5138b..b342cd4d 100644
--- a/include/backend/x11.h
+++ b/include/backend/x11.h
@@ -6,8 +6,6 @@
#include <X11/Xlib-xcb.h>
#include <wayland-server.h>
#include <wlr/render/egl.h>
-#include <wlr/types/wlr_output.h>
-#include <wlr/types/wlr_input_device.h>
struct wlr_x11_backend;
diff --git a/include/wlr/backend/drm.h b/include/wlr/backend/drm.h
index b3475703..133e4f69 100644
--- a/include/wlr/backend/drm.h
+++ b/include/wlr/backend/drm.h
@@ -4,10 +4,12 @@
#include <wayland-server.h>
#include <wlr/backend/session.h>
#include <wlr/backend.h>
+#include <wlr/types/wlr_output.h>
struct wlr_backend *wlr_drm_backend_create(struct wl_display *display,
struct wlr_session *session, int gpu_fd, struct wlr_backend *parent);
bool wlr_backend_is_drm(struct wlr_backend *backend);
+bool wlr_output_is_drm(struct wlr_output *output);
#endif
diff --git a/include/wlr/backend/headless.h b/include/wlr/backend/headless.h
index 68ad84da..8995f7cb 100644
--- a/include/wlr/backend/headless.h
+++ b/include/wlr/backend/headless.h
@@ -3,6 +3,7 @@
#include <wlr/backend.h>
#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_output.h>
struct wlr_backend *wlr_headless_backend_create(struct wl_display *display);
struct wlr_output *wlr_headless_add_output(struct wlr_backend *backend,
@@ -10,5 +11,7 @@ struct wlr_output *wlr_headless_add_output(struct wlr_backend *backend,
struct wlr_input_device *wlr_headless_add_input_device(
struct wlr_backend *backend, enum wlr_input_device_type type);
bool wlr_backend_is_headless(struct wlr_backend *backend);
+bool wlr_input_device_is_headless(struct wlr_input_device *device);
+bool wlr_output_is_headless(struct wlr_output *output);
#endif
diff --git a/include/wlr/backend/libinput.h b/include/wlr/backend/libinput.h
index 95b8829d..af873628 100644
--- a/include/wlr/backend/libinput.h
+++ b/include/wlr/backend/libinput.h
@@ -12,5 +12,6 @@ struct wlr_backend *wlr_libinput_backend_create(struct wl_display *display,
struct libinput_device *wlr_libinput_get_device_handle(struct wlr_input_device *dev);
bool wlr_backend_is_libinput(struct wlr_backend *backend);
+bool wlr_input_device_is_libinput(struct wlr_input_device *device);
#endif
diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h
index 43a0b72e..b10ffee3 100644
--- a/include/wlr/backend/wayland.h
+++ b/include/wlr/backend/wayland.h
@@ -4,6 +4,8 @@
#include <wayland-client.h>
#include <wayland-server.h>
#include <wlr/backend.h>
+#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_output.h>
#include <stdbool.h>
/**
@@ -11,6 +13,7 @@
* you must use wlr_wl_output_create to add them.
*/
struct wlr_backend *wlr_wl_backend_create(struct wl_display *display);
+
/**
* 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
@@ -18,9 +21,20 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display);
* the output_add signal).
*/
struct wlr_output *wlr_wl_output_create(struct wlr_backend *backend);
+
/**
* True if the given backend is a wlr_wl_backend.
*/
bool wlr_backend_is_wl(struct wlr_backend *backend);
+/**
+ * True if the given input device is a wlr_wl_input_device.
+ */
+bool wlr_input_device_is_wl(struct wlr_input_device *device);
+
+/**
+ * True if the given output is a wlr_wl_backend_output.
+ */
+bool wlr_output_is_wl(struct wlr_output *output);
+
#endif
diff --git a/include/wlr/backend/x11.h b/include/wlr/backend/x11.h
index 3901649b..b22d7f68 100644
--- a/include/wlr/backend/x11.h
+++ b/include/wlr/backend/x11.h
@@ -4,10 +4,14 @@
#include <stdbool.h>
#include <wayland-server.h>
#include <wlr/backend.h>
+#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_output.h>
struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
const char *x11_display);
bool wlr_backend_is_x11(struct wlr_backend *backend);
+bool wlr_input_device_is_x11(struct wlr_input_device *device);
+bool wlr_output_is_x11(struct wlr_output *output);
#endif