aboutsummaryrefslogtreecommitdiff
path: root/include/wlr
diff options
context:
space:
mode:
Diffstat (limited to 'include/wlr')
-rw-r--r--include/wlr/interfaces/wlr_output.h2
-rw-r--r--include/wlr/types/wlr_gamma_control_v1.h31
-rw-r--r--include/wlr/types/wlr_output.h14
-rw-r--r--include/wlr/types/wlr_xdg_decoration_v1.h68
-rw-r--r--include/wlr/types/wlr_xdg_shell.h18
-rw-r--r--include/wlr/xwayland.h8
6 files changed, 136 insertions, 5 deletions
diff --git a/include/wlr/interfaces/wlr_output.h b/include/wlr/interfaces/wlr_output.h
index 2224932f..4860a5b6 100644
--- a/include/wlr/interfaces/wlr_output.h
+++ b/include/wlr/interfaces/wlr_output.h
@@ -28,7 +28,7 @@ struct wlr_output_impl {
void (*destroy)(struct wlr_output *output);
bool (*make_current)(struct wlr_output *output, int *buffer_age);
bool (*swap_buffers)(struct wlr_output *output, pixman_region32_t *damage);
- void (*set_gamma)(struct wlr_output *output,
+ bool (*set_gamma)(struct wlr_output *output,
uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b);
uint32_t (*get_gamma_size)(struct wlr_output *output);
bool (*export_dmabuf)(struct wlr_output *output,
diff --git a/include/wlr/types/wlr_gamma_control_v1.h b/include/wlr/types/wlr_gamma_control_v1.h
new file mode 100644
index 00000000..5a173323
--- /dev/null
+++ b/include/wlr/types/wlr_gamma_control_v1.h
@@ -0,0 +1,31 @@
+#ifndef WLR_TYPES_WLR_GAMMA_CONTROL_V1_H
+#define WLR_TYPES_WLR_GAMMA_CONTROL_V1_H
+
+#include <wayland-server.h>
+
+struct wlr_gamma_control_manager_v1 {
+ struct wl_global *global;
+ struct wl_list resources;
+ struct wl_list controls; // wlr_gamma_control_v1::link
+
+ struct wl_listener display_destroy;
+
+ void *data;
+};
+
+struct wlr_gamma_control_v1 {
+ struct wl_resource *resource;
+ struct wlr_output *output;
+ struct wl_list link;
+
+ struct wl_listener output_destroy_listener;
+
+ void *data;
+};
+
+struct wlr_gamma_control_manager_v1 *wlr_gamma_control_manager_v1_create(
+ struct wl_display *display);
+void wlr_gamma_control_manager_v1_destroy(
+ struct wlr_gamma_control_manager_v1 *manager);
+
+#endif
diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h
index f8452d12..3a9f3c41 100644
--- a/include/wlr/types/wlr_output.h
+++ b/include/wlr/types/wlr_output.h
@@ -174,9 +174,19 @@ bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
* it is a no-op.
*/
void wlr_output_schedule_frame(struct wlr_output *output);
-void wlr_output_set_gamma(struct wlr_output *output,
- uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b);
+/**
+ * Returns the maximum length of each gamma ramp, or 0 if unsupported.
+ */
uint32_t wlr_output_get_gamma_size(struct wlr_output *output);
+/**
+ * Sets the gamma table for this output. `r`, `g` and `b` are gamma ramps for
+ * red, green and blue. `size` is the length of the ramps and must not exceed
+ * the value returned by `wlr_output_get_gamma_size`.
+ *
+ * Providing zero-sized ramps resets the gamma table.
+ */
+bool wlr_output_set_gamma(struct wlr_output *output,
+ uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b);
bool wlr_output_export_dmabuf(struct wlr_output *output,
struct wlr_dmabuf_attributes *attribs);
void wlr_output_set_fullscreen_surface(struct wlr_output *output,
diff --git a/include/wlr/types/wlr_xdg_decoration_v1.h b/include/wlr/types/wlr_xdg_decoration_v1.h
new file mode 100644
index 00000000..10d3a1aa
--- /dev/null
+++ b/include/wlr/types/wlr_xdg_decoration_v1.h
@@ -0,0 +1,68 @@
+#ifndef WLR_TYPES_WLR_XDG_DECORATION_V1
+#define WLR_TYPES_WLR_XDG_DECORATION_V1
+
+#include <wayland-server.h>
+#include <wlr/types/wlr_xdg_shell.h>
+
+enum wlr_xdg_toplevel_decoration_v1_mode {
+ WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_NONE = 0,
+ WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE = 1,
+ WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE = 2,
+};
+
+struct wlr_xdg_decoration_manager_v1 {
+ struct wl_global *global;
+ struct wl_list resources;
+ struct wl_list decorations; // wlr_xdg_toplevel_decoration::link
+
+ struct wl_listener display_destroy;
+
+ struct {
+ struct wl_signal new_toplevel_decoration; // struct wlr_xdg_toplevel_decoration *
+ } events;
+
+ void *data;
+};
+
+struct wlr_xdg_toplevel_decoration_v1_configure {
+ struct wl_list link; // wlr_xdg_toplevel_decoration::configure_list
+ struct wlr_xdg_surface_configure *surface_configure;
+ enum wlr_xdg_toplevel_decoration_v1_mode mode;
+};
+
+struct wlr_xdg_toplevel_decoration_v1 {
+ struct wl_resource *resource;
+ struct wlr_xdg_surface *surface;
+ struct wlr_xdg_decoration_manager_v1 *manager;
+ struct wl_list link; // wlr_xdg_decoration_manager_v1::link
+
+ bool added;
+ enum wlr_xdg_toplevel_decoration_v1_mode current_mode;
+ enum wlr_xdg_toplevel_decoration_v1_mode client_pending_mode;
+ enum wlr_xdg_toplevel_decoration_v1_mode server_pending_mode;
+
+ struct wl_list configure_list; // wlr_xdg_toplevel_decoration_v1_configure::link
+
+ struct {
+ struct wl_signal destroy;
+ struct wl_signal request_mode;
+ } events;
+
+ struct wl_listener surface_destroy;
+ struct wl_listener surface_configure;
+ struct wl_listener surface_ack_configure;
+ struct wl_listener surface_commit;
+
+ void *data;
+};
+
+struct wlr_xdg_decoration_manager_v1 *
+ wlr_xdg_decoration_manager_v1_create(struct wl_display *display);
+void wlr_xdg_decoration_manager_v1_destroy(
+ struct wlr_xdg_decoration_manager_v1 *manager);
+
+uint32_t wlr_xdg_toplevel_decoration_v1_set_mode(
+ struct wlr_xdg_toplevel_decoration_v1 *decoration,
+ enum wlr_xdg_toplevel_decoration_v1_mode mode);
+
+#endif
diff --git a/include/wlr/types/wlr_xdg_shell.h b/include/wlr/types/wlr_xdg_shell.h
index 98538e7f..a067c62e 100644
--- a/include/wlr/types/wlr_xdg_shell.h
+++ b/include/wlr/types/wlr_xdg_shell.h
@@ -133,6 +133,7 @@ struct wlr_xdg_toplevel {
};
struct wlr_xdg_surface_configure {
+ struct wlr_xdg_surface *surface;
struct wl_list link; // wlr_xdg_surface::configure_list
uint32_t serial;
@@ -196,6 +197,10 @@ struct wlr_xdg_surface {
* surface has been hidden or is about to be destroyed.
*/
struct wl_signal unmap;
+
+ // for protocol extensions
+ struct wl_signal configure; // wlr_xdg_surface_configure
+ struct wl_signal ack_configure; // wlr_xdg_surface_configure
} events;
void *data;
@@ -234,6 +239,8 @@ struct wlr_xdg_surface *wlr_xdg_surface_from_resource(
struct wl_resource *resource);
struct wlr_xdg_surface *wlr_xdg_surface_from_popup_resource(
struct wl_resource *resource);
+struct wlr_xdg_surface *wlr_xdg_surface_from_toplevel_resource(
+ struct wl_resource *resource);
struct wlr_box wlr_xdg_positioner_get_geometry(
struct wlr_xdg_positioner *positioner);
@@ -360,7 +367,8 @@ struct wlr_xdg_surface *wlr_xdg_surface_from_wlr_surface(
*
* The x and y value can be <0
*/
-void wlr_xdg_surface_get_geometry(struct wlr_xdg_surface *surface, struct wlr_box *box);
+void wlr_xdg_surface_get_geometry(struct wlr_xdg_surface *surface,
+ struct wlr_box *box);
/**
* Call `iterator` on each surface and popup in the xdg-surface tree, with the
@@ -368,7 +376,13 @@ void wlr_xdg_surface_get_geometry(struct wlr_xdg_surface *surface, struct wlr_bo
* from root to leaves (in rendering order).
*/
void wlr_xdg_surface_for_each_surface(struct wlr_xdg_surface *surface,
- wlr_surface_iterator_func_t iterator, void *user_data);
+ wlr_surface_iterator_func_t iterator, void *user_data);
+
+/**
+ * Schedule a surface configuration. This should only be called by protocols
+ * extending the shell.
+ */
+uint32_t wlr_xdg_surface_schedule_configure(struct wlr_xdg_surface *surface);
/**
* Call `iterator` on each popup in the xdg-surface tree, with the popup's
diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h
index 39644dc1..2eda768a 100644
--- a/include/wlr/xwayland.h
+++ b/include/wlr/xwayland.h
@@ -184,6 +184,14 @@ struct wlr_xwayland_resize_event {
uint32_t edges;
};
+/** Create an Xwayland server.
+ *
+ * The server supports a lazy mode in which Xwayland is only started when a
+ * client tries to connect.
+ *
+ * Note: wlr_xwayland will setup a global SIGUSR1 handler on the compositor
+ * process.
+ */
struct wlr_xwayland *wlr_xwayland_create(struct wl_display *wl_display,
struct wlr_compositor *compositor, bool lazy);