aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/backend/drm/renderer.h3
-rw-r--r--include/wlr/backend.h10
-rw-r--r--include/wlr/backend/drm.h3
-rw-r--r--include/wlr/backend/headless.h3
-rw-r--r--include/wlr/backend/wayland.h3
-rw-r--r--include/wlr/backend/x11.h2
-rw-r--r--include/wlr/render/interface.h2
-rw-r--r--include/wlr/render/wlr_renderer.h8
-rw-r--r--include/wlr/types/wlr_keyboard.h13
-rw-r--r--include/wlr/types/wlr_xdg_shell.h29
-rw-r--r--include/wlr/types/wlr_xdg_shell_v6.h20
11 files changed, 88 insertions, 8 deletions
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h
index 5e15f3d5..510abe43 100644
--- a/include/backend/drm/renderer.h
+++ b/include/backend/drm/renderer.h
@@ -5,6 +5,7 @@
#include <gbm.h>
#include <stdbool.h>
#include <stdint.h>
+#include <wlr/backend.h>
#include <wlr/render/wlr_renderer.h>
struct wlr_drm_backend;
@@ -32,7 +33,7 @@ struct wlr_drm_surface {
};
bool init_drm_renderer(struct wlr_drm_backend *drm,
- struct wlr_drm_renderer *renderer);
+ struct wlr_drm_renderer *renderer, wlr_renderer_create_func_t create_render);
void finish_drm_renderer(struct wlr_drm_renderer *renderer);
bool init_drm_surface(struct wlr_drm_surface *surf,
diff --git a/include/wlr/backend.h b/include/wlr/backend.h
index 2059e3b7..f40f5353 100644
--- a/include/wlr/backend.h
+++ b/include/wlr/backend.h
@@ -20,12 +20,20 @@ struct wlr_backend {
} events;
};
+typedef struct wlr_renderer *(*wlr_renderer_create_func_t)(struct wlr_egl *egl, EGLenum platform,
+ void *remote_display, EGLint *config_attribs, EGLint visual_id);
/**
* Automatically initializes the most suitable backend given the environment.
* Will always return a multibackend. The backend is created but not started.
* Returns NULL on failure.
+ *
+ * The compositor can request to initialize the backend's renderer by setting
+ * the create_render_func. The callback must initialize the given wlr_egl and
+ * return a valid wlr_renderer, or NULL if it has failed to initiaze it.
+ * Pass NULL as create_renderer_func to use the backend's default renderer.
*/
-struct wlr_backend *wlr_backend_autocreate(struct wl_display *display);
+struct wlr_backend *wlr_backend_autocreate(struct wl_display *display,
+ wlr_renderer_create_func_t create_renderer_func);
/**
* Start the backend. This may signal new_input or new_output immediately, but
* may also wait until the display's event loop begins. Returns false on
diff --git a/include/wlr/backend/drm.h b/include/wlr/backend/drm.h
index 14fafe10..7f41ca15 100644
--- a/include/wlr/backend/drm.h
+++ b/include/wlr/backend/drm.h
@@ -14,7 +14,8 @@
* a DRM backend, other kinds of backends raise SIGABRT).
*/
struct wlr_backend *wlr_drm_backend_create(struct wl_display *display,
- struct wlr_session *session, int gpu_fd, struct wlr_backend *parent);
+ struct wlr_session *session, int gpu_fd, struct wlr_backend *parent,
+ wlr_renderer_create_func_t create_renderer_func);
bool wlr_backend_is_drm(struct wlr_backend *backend);
bool wlr_output_is_drm(struct wlr_output *output);
diff --git a/include/wlr/backend/headless.h b/include/wlr/backend/headless.h
index ee784a0d..02c7cd11 100644
--- a/include/wlr/backend/headless.h
+++ b/include/wlr/backend/headless.h
@@ -9,7 +9,8 @@
* Creates a headless backend. A headless backend has no outputs or inputs by
* default.
*/
-struct wlr_backend *wlr_headless_backend_create(struct wl_display *display);
+struct wlr_backend *wlr_headless_backend_create(struct wl_display *display,
+ wlr_renderer_create_func_t create_renderer_func);
/**
* Create a new headless output backed by an in-memory EGL framebuffer. You can
* read pixels from this framebuffer via wlr_renderer_read_pixels but it is
diff --git a/include/wlr/backend/wayland.h b/include/wlr/backend/wayland.h
index 31a14c97..119ea247 100644
--- a/include/wlr/backend/wayland.h
+++ b/include/wlr/backend/wayland.h
@@ -16,7 +16,8 @@
* to NULL for the default behaviour (WAYLAND_DISPLAY env variable or wayland-0
* default)
*/
-struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote);
+struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, const char *remote,
+ wlr_renderer_create_func_t create_renderer_func);
/**
* Adds a new output to this backend. You may remove outputs by destroying them.
diff --git a/include/wlr/backend/x11.h b/include/wlr/backend/x11.h
index 7bc1f891..56360bf7 100644
--- a/include/wlr/backend/x11.h
+++ b/include/wlr/backend/x11.h
@@ -8,7 +8,7 @@
#include <wlr/types/wlr_output.h>
struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
- const char *x11_display);
+ const char *x11_display, wlr_renderer_create_func_t create_renderer_func);
struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend);
bool wlr_backend_is_x11(struct wlr_backend *backend);
diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h
index e7cdce0a..2267d376 100644
--- a/include/wlr/render/interface.h
+++ b/include/wlr/render/interface.h
@@ -49,6 +49,8 @@ struct wlr_renderer_impl {
struct wlr_texture *(*texture_from_dmabuf)(struct wlr_renderer *renderer,
struct wlr_dmabuf_buffer_attribs *attribs);
void (*destroy)(struct wlr_renderer *renderer);
+ void (*init_wl_display)(struct wlr_renderer *renderer,
+ struct wl_display *wl_display);
};
void wlr_renderer_init(struct wlr_renderer *renderer,
diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h
index 21f9c16c..039bb66e 100644
--- a/include/wlr/render/wlr_renderer.h
+++ b/include/wlr/render/wlr_renderer.h
@@ -3,6 +3,7 @@
#include <stdint.h>
#include <wayland-server-protocol.h>
+#include <wlr/render/egl.h>
#include <wlr/render/wlr_texture.h>
#include <wlr/types/wlr_box.h>
@@ -16,6 +17,9 @@ struct wlr_renderer {
} events;
};
+struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl, EGLenum platform,
+ void *remote_display, EGLint *config_attribs, EGLint visual_id);
+
void wlr_renderer_begin(struct wlr_renderer *r, int width, int height);
void wlr_renderer_end(struct wlr_renderer *r);
void wlr_renderer_clear(struct wlr_renderer *r, const float color[static 4]);
@@ -98,8 +102,8 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
*/
bool wlr_renderer_format_supported(struct wlr_renderer *r,
enum wl_shm_format fmt);
-void wlr_renderer_init_wl_shm(struct wlr_renderer *r,
- struct wl_display *display);
+void wlr_renderer_init_wl_display(struct wlr_renderer *r,
+ struct wl_display *wl_display);
/**
* Destroys this wlr_renderer. Textures must be destroyed separately.
*/
diff --git a/include/wlr/types/wlr_keyboard.h b/include/wlr/types/wlr_keyboard.h
index bfb4e611..97288508 100644
--- a/include/wlr/types/wlr_keyboard.h
+++ b/include/wlr/types/wlr_keyboard.h
@@ -59,7 +59,20 @@ struct wlr_keyboard {
} repeat_info;
struct {
+ /**
+ * The `key` event signals with a `wlr_event_keyboard_key` event that a
+ * key has been pressed or released on the keyboard. This event is
+ * emitted before the xkb state of the keyboard has been updated
+ * (including modifiers).
+ */
struct wl_signal key;
+
+ /**
+ * The `modifiers` event signals that the modifier state of the
+ * `wlr_keyboard` has been updated. At this time, you can read the
+ * modifier state of the `wlr_keyboard` and handle the updated state by
+ * sending it to clients.
+ */
struct wl_signal modifiers;
struct wl_signal keymap;
struct wl_signal repeat_info;
diff --git a/include/wlr/types/wlr_xdg_shell.h b/include/wlr/types/wlr_xdg_shell.h
index 22008563..5eb30a16 100644
--- a/include/wlr/types/wlr_xdg_shell.h
+++ b/include/wlr/types/wlr_xdg_shell.h
@@ -14,6 +14,12 @@ struct wlr_xdg_shell {
struct wl_listener display_destroy;
struct {
+ /**
+ * The `new_surface` event signals that a client has requested to
+ * create a new shell surface. At this point, the surface is ready to
+ * be configured but is not mapped or ready receive input events. The
+ * surface will be ready to be managed on the `map` event.
+ */
struct wl_signal new_surface;
} events;
@@ -86,6 +92,7 @@ enum wlr_xdg_surface_role {
struct wlr_xdg_toplevel_state {
bool maximized, fullscreen, resizing, activated;
+ uint32_t tiled; // enum wlr_edges
uint32_t width, height;
uint32_t max_width, max_height;
uint32_t min_width, min_height;
@@ -161,7 +168,21 @@ struct wlr_xdg_surface {
struct wl_signal destroy;
struct wl_signal ping_timeout;
struct wl_signal new_popup;
+ /**
+ * The `map` event signals that the shell surface is ready to be
+ * managed by the compositor and rendered on the screen. At this point,
+ * the surface has configured its properties, has had the opportunity
+ * to bind to the seat to receive input events, and has a buffer that
+ * is ready to be rendered. You can now safely add this surface to a
+ * list of views.
+ */
struct wl_signal map;
+ /**
+ * The `unmap` event signals that the surface is no longer in a state
+ * where it should be shown on the screen. This might happen if the
+ * surface no longer has a displayable buffer because either the
+ * surface has been hidden or is about to be destroyed.
+ */
struct wl_signal unmap;
} events;
@@ -247,6 +268,14 @@ uint32_t wlr_xdg_toplevel_set_resizing(struct wlr_xdg_surface *surface,
bool resizing);
/**
+ * Request that this toplevel surface consider itself in a tiled layout and some
+ * edges are adjacent to another part of the tiling grid. `tiled_edges` is a
+ * bitfield of `enum wlr_edges`. Returns the associated configure serial.
+ */
+uint32_t wlr_xdg_toplevel_set_tiled(struct wlr_xdg_surface *surface,
+ uint32_t tiled_edges);
+
+/**
* Request that this xdg surface closes.
*/
void wlr_xdg_surface_send_close(struct wlr_xdg_surface *surface);
diff --git a/include/wlr/types/wlr_xdg_shell_v6.h b/include/wlr/types/wlr_xdg_shell_v6.h
index bce645da..2fdf49e5 100644
--- a/include/wlr/types/wlr_xdg_shell_v6.h
+++ b/include/wlr/types/wlr_xdg_shell_v6.h
@@ -15,6 +15,12 @@ struct wlr_xdg_shell_v6 {
struct wl_listener display_destroy;
struct {
+ /**
+ * The `new_surface` event signals that a client has requested to
+ * create a new shell surface. At this point, the surface is ready to
+ * be configured but is not mapped or ready receive input events. The
+ * surface will be ready to be managed on the `map` event.
+ */
struct wl_signal new_surface;
} events;
@@ -160,7 +166,21 @@ struct wlr_xdg_surface_v6 {
struct wl_signal destroy;
struct wl_signal ping_timeout;
struct wl_signal new_popup;
+ /**
+ * The `map` event signals that the shell surface is ready to be
+ * managed by the compositor and rendered on the screen. At this point,
+ * the surface has configured its properties, has had the opportunity
+ * to bind to the seat to receive input events, and has a buffer that
+ * is ready to be rendered. You can now safely add this surface to a
+ * list of views.
+ */
struct wl_signal map;
+ /**
+ * The `unmap` event signals that the surface is no longer in a state
+ * where it should be shown on the screen. This might happen if the
+ * surface no longer has a displayable buffer because either the
+ * surface has been hidden or is about to be destroyed.
+ */
struct wl_signal unmap;
} events;