diff --git a/patches/dwl-bar-ipc-1.0.diff b/patches/dwl-bar-ipc-1.0.diff deleted file mode 100644 index fea4e73..0000000 --- a/patches/dwl-bar-ipc-1.0.diff +++ /dev/null @@ -1,6338 +0,0 @@ -From 6f9ebd49fe07fe32289a4cdee18e06248e64f9f0 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Mon, 20 Feb 2023 13:36:33 -0800 -Subject: [PATCH 01/11] Added IPC functionality with dwl-bar-ipc protocol. - ---- - src/bar.c | 28 ++++-- - src/bar.h | 1 + - src/common.h | 9 +- - src/config.h | 5 - - src/main.c | 271 +++++++++++++++++++++------------------------------ - 5 files changed, 137 insertions(+), 177 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 4a163e3..fe829f9 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -5,6 +5,7 @@ - #include - - #include -+#include - #include "cairo-deprecated.h" - #include "cairo.h" - #include "pango/pango-context.h" -@@ -77,15 +78,11 @@ struct Bar { - }; - - // So that the compositor can tell us when it's a good time to render again. --const wl_callback_listener frameListener = { --.done = frame --}; -+const wl_callback_listener frameListener = {.done = frame}; - - // So that wlroots can tell us we need to resize. - // We really only need to worry about this when the bar is visible (sometimes it isn't). --const zwlr_layer_surface_v1_listener layerSurfaceListener = { --.configure = layerSurface --}; -+const zwlr_layer_surface_v1_listener layerSurfaceListener = {.configure = layerSurface}; - - void layerSurface(void* data, zwlr_layer_surface_v1* _, uint32_t serial, uint32_t width, uint32_t height) { - Bar* bar = data; -@@ -183,7 +180,7 @@ void bar_component_render(Bar* bar, BarComponent* component, cairo_t* painter, u - } - - void bar_tags_render(Bar* bar, cairo_t* painter, int* x) { -- for ( int i = 0; i < LENGTH(tags); i++ ) { -+ for ( int i = 0; i < tags.size; i++ ) { - Tag tag = bar->tags[i]; - uint tagWidth = bar_component_width(&tag.component) + bar->font.height; - -@@ -329,12 +326,15 @@ Bar* bar_create(void) { - pango_layout_set_text(bar->layout.layout, "[]=", -1); - pango_layout_set_text(bar->status.layout, status, -1); - -- for ( int i = 0; i < LENGTH(tags); i++ ) { // Initalize the tags -+ char* str; -+ int i; -+ wl_array_for_each(str, &tags) { // Initalize the tags - PangoLayout* layout = pango_layout_new(bar->context); -- pango_layout_set_text(layout, tags[i], strlen(tags[i])); -+ pango_layout_set_text(layout, str, strlen(str)); - pango_layout_set_font_description(layout, bar->font.description); - Tag tag = { 0, 0, 0, layout }; - bar->tags[i] = tag; -+ i++; - } - - return bar; -@@ -366,7 +366,7 @@ void bar_destroy(Bar* bar) { - if ( bar->title.layout ) - g_object_unref(bar->title.layout); - -- for ( i = 0; i < LENGTH(tags); i++) { -+ for ( i = 0; i < tags.size; i++) { - Tag tag = bar->tags[i]; - if (tag.component.layout) - g_object_unref(tag.component.layout); -@@ -406,7 +406,15 @@ void bar_show(Bar* bar, wl_output* output) { - zwlr_layer_surface_v1_set_size(bar->layer_surface, 0, height); - zwlr_layer_surface_v1_set_exclusive_zone(bar->layer_surface, height); - wl_surface_commit(bar->surface); -+} -+ -+void bar_hide(Bar* bar) { -+ if (!bar_is_visible(bar)) -+ return; - -+ zwlr_layer_surface_v1_destroy(bar->layer_surface); -+ wl_surface_destroy(bar->surface); -+ shm_destroy(bar->shm); - } - - int bar_is_visible(Bar* bar) { -diff --git a/src/bar.h b/src/bar.h -index 1fbb2e0..6581aec 100644 ---- a/src/bar.h -+++ b/src/bar.h -@@ -22,6 +22,7 @@ Bar* bar_create(void); - void bar_destroy(Bar* bar); - void bar_invalidate(Bar* bar); - void bar_show(Bar* bar, wl_output* output); -+void bar_hide(Bar* bar); - int bar_is_visible(Bar* bar); - void bar_click(Bar* bar, struct Monitor* monitor, int x, int y, uint32_t button); - void bar_set_status(Bar* bar, const char* text); -diff --git a/src/common.h b/src/common.h -index 225840c..675b62a 100644 ---- a/src/common.h -+++ b/src/common.h -@@ -1,7 +1,10 @@ - #ifndef COMMON_H_ - #define COMMON_H_ -+#include "dwl-bar-ipc-unstable-v1-cliet-protocol.h" - #include "xdg-output-unstable-v1-client-protocol.h" - #include -+#include -+#include - #include - #include - #include -@@ -37,13 +40,17 @@ typedef struct wl_array wl_array; - typedef struct wl_cursor_theme wl_cursor_theme; - typedef struct wl_cursor_image wl_cursor_image; - typedef struct pollfd pollfd; -+typedef struct zdwl_output_v1 zdwl_output_v1; -+typedef struct zdwl_manager_v1 zdwl_manager_v1; - typedef enum wl_shm_format wl_shm_format; - - extern wl_display* display; - extern wl_compositor* compositor; - extern wl_shm* shm; - extern zwlr_layer_shell_v1* shell; -+extern zdwl_manager_v1* dwl; - extern FILE* file; -+extern wl_array tags, layouts; - - struct Monitor; - -@@ -66,8 +73,8 @@ typedef struct { - void die(const char* fmt, ...); - void* ecalloc(size_t amnt, size_t size); - -+/* Logging functions */ - extern void logln(const char* str); -- - extern void _logf(const char* fmt, ...); - - /* -diff --git a/src/config.h b/src/config.h -index f618aa7..dc3bfc4 100644 ---- a/src/config.h -+++ b/src/config.h -@@ -31,11 +31,6 @@ static const int* schemes[3][2] = { - [Urgent_Scheme] = {grey1, grey3}, - }; - --/* -- * Tags -- */ --static const char* tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; -- - /* - * Buttons - * Structure is: -diff --git a/src/main.c b/src/main.c -index 1ff83a7..77165be 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -25,6 +25,7 @@ - #include "common.h" - #include "config.h" - #include "shm.h" -+#include "dwl-bar-ipc-unstable-v1-cliet-protocol.h" - #include "wlr-layer-shell-unstable-v1-client-protocol.h" - #include "xdg-output-unstable-v1-client-protocol.h" - #include "xdg-shell-client-protocol.h" -@@ -34,19 +35,17 @@ - * 0 means they are the same, otherwise they are different. - */ - #define EQUAL 0 --#define POLLFDS 4 -+#define POLLFDS 3 - --// TODO Create Github for dwl-bar then patchset for dwl-bar ipc --// - // TODO Get the ipc wayland protocol working. - // + Include a `hide` / `toggle_visibility` event so that the bar can hide itself when the user asks. - // TODO Create dwl-ipc patchset then submit to dwl wiki. - - typedef struct Monitor { -- char *xdg_name; - uint32_t registry_name; -+ wl_output *wl_output; - -- wl_output *output; -+ zdwl_output_v1* dwl_output; - Bar *bar; - wl_list link; - } Monitor; -@@ -56,7 +55,6 @@ typedef struct { - Monitor* focused_monitor; - - int x, y; -- - uint32_t* buttons; - uint size; - } Pointer; -@@ -94,9 +92,6 @@ static void setupFifo(void); - static char* to_delimiter(char* string, ulong *start_end, char delimiter); - static char* get_line(int fd); - static void on_status(void); --static void on_stdin(void); --static void handle_stdin(char* line); --static Monitor* monitor_from_name(char* name); - static Monitor* monitor_from_surface(wl_surface* surface); - static void update_monitor(Monitor* monitor); - -@@ -107,9 +102,20 @@ static void onGlobalRemove(void *data, wl_registry *registry, uint32_t name); - static int regHandle(void **store, HandleGlobal helper, - const wl_interface *interface, int version); - --/* xdg listener members */ -+/* dwl_manager listener members */ -+static void add_layout(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name); -+static void add_tag(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name); -+ -+/* dwl_output listener memebers */ -+static void toggle_visibility(void* data, zdwl_output_v1* zdwl_output_v1); -+static void active(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t active); -+static void set_tag(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused); -+static void set_layout(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t layout); -+static void title(void* data, zdwl_output_v1* zdwl_output_v1, const char* title); -+static void dwl_frame(void* data, zdwl_output_v1* zdwl_output_v1); -+ -+/* xdg listener member */ - static void ping(void *data, xdg_wm_base *xdg_wm_base, uint32_t serial); --static void name(void *data, zxdg_output_v1 *output, const char *name); - - /* seat listener member */ - static void capabilites(void* data, wl_seat* wl_seat, uint32_t capabilities); -@@ -119,9 +125,9 @@ static void enter(void* data, wl_pointer* pointer, uint32_t serial, wl_surface* - static void leave(void* data, wl_pointer* pointer, uint32_t serial, wl_surface* surface); - static void motion(void* data, wl_pointer* pointer, uint32_t time, wl_fixed_t x, wl_fixed_t y); - static void button(void* data, wl_pointer* pointer, uint32_t serial, uint32_t time, uint32_t button, uint32_t state); --static void frame(void* data, wl_pointer* pointer); -+static void pointer_frame(void* data, wl_pointer* pointer); - --/* We don't do anything in these functions */ -+/* Also pointer listener members, but we don't do anything in these functions */ - static void axis(void *data, struct wl_pointer *wl_pointer, uint32_t time, uint32_t axis, wl_fixed_t value) {} - static void axis_source(void *data, struct wl_pointer *wl_pointer, uint32_t axis_source) {} - static void axis_stop(void *data, struct wl_pointer *wl_pointer, uint32_t time, uint32_t axis) {} -@@ -133,8 +139,11 @@ wl_display *display; - wl_compositor *compositor; - wl_shm *shm; - zwlr_layer_shell_v1 *shell; --static xdg_wm_base *base; --static zxdg_output_manager_v1 *output_manager; -+zdwl_manager_v1* dwl; -+static xdg_wm_base* base; -+ -+/* dwl stuff */ -+wl_array tags, layouts; - - /* Cursor */ - static wl_cursor_image* cursor_image; -@@ -176,17 +185,12 @@ static const struct xdg_wm_base_listener xdg_wm_base_listener = { - .ping = ping, - }; - --/* So that we can get the monitor names to match with dwl monitor names. */ --static const struct zxdg_output_v1_listener xdg_output_listener = { -- .name = name, --}; -- - static const struct wl_pointer_listener pointer_listener = { - .enter = enter, - .leave = leave, - .motion = motion, - .button = button, -- .frame = frame, -+ .frame = pointer_frame, - - .axis = axis, - .axis_discrete = axis_discrete, -@@ -194,11 +198,73 @@ static const struct wl_pointer_listener pointer_listener = { - .axis_stop = axis_stop, - }; - -+static const struct zdwl_manager_v1_listener dwl_listener = { -+ .layout = add_layout, -+ .tag = add_tag, -+}; -+ -+static const struct zdwl_output_v1_listener dwl_ouptut_listener = { -+ .toggle_visibility = toggle_visibility, -+ .active = active, -+ .frame = dwl_frame, -+ .layout = set_layout, -+ .tag = set_tag, -+ .title = title, -+}; -+ - static const struct wl_seat_listener seat_listener = { - .capabilities = capabilites, - .name = seat_name, - }; - -+void add_layout(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name) { -+ void* temp = wl_array_add(&layouts, sizeof(name)); -+ if (!temp) -+ return; -+ -+ temp += layouts.size; -+ temp = strdup(name); -+} -+ -+void add_tag(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name) { -+ void* temp = wl_array_add(&tags, sizeof(name)); -+ if (!temp) -+ return; -+ -+ temp += tags.size; -+ temp = strdup(name); -+} -+ -+void toggle_visibility(void* data, zdwl_output_v1* zdwl_output_v1) { -+ Monitor* monitor = data; -+ bar_hide(monitor->bar); -+} -+ -+void active(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t active) { -+ Monitor* monitor= data; -+ bar_set_active(monitor->bar, active); -+} -+ -+void set_tag(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused) { -+ Monitor* monitor = data; -+ bar_set_tag(monitor->bar,tag , state, clients ? 1 : 0, focused); -+} -+ -+void set_layout(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t layout) { -+ Monitor* monitor = data; -+ bar_set_layout(monitor->bar, (char*)(layouts.data+layout)); -+} -+ -+void title(void* data, zdwl_output_v1* zdwl_output_v1, const char* title) { -+ Monitor* monitor = data; -+ bar_set_title(monitor->bar, title); -+} -+ -+void dwl_frame(void* data, zdwl_output_v1* zdwl_output_v1) { -+ Monitor* monitor = data; -+ update_monitor(monitor); -+} -+ - void enter(void *data, wl_pointer *pointer, uint32_t serial, - wl_surface *surface, wl_fixed_t x, wl_fixed_t y) { - Seat seat = *(Seat*)data; -@@ -278,7 +344,7 @@ void button(void *data, wl_pointer *pointer, uint32_t serial, uint32_t time, - } - } - --static void frame(void* data, wl_pointer* pointer) { -+static void pointer_frame(void* data, wl_pointer* pointer) { - Seat seat = *(Seat*)data; - Monitor* monitor = seat.pointer->focused_monitor; - if (!monitor) { -@@ -316,12 +382,6 @@ void capabilites(void* data, wl_seat* wl_seat, uint32_t capabilities) { - } - } - --static void name(void *data, zxdg_output_v1 *xdg_output, const char *name) { -- Monitor *monitor = data; -- monitor->xdg_name = strdup(name); -- zxdg_output_v1_destroy(xdg_output); --} -- - void ping(void *data, struct xdg_wm_base *xdg_wm_base, uint32_t serial) { - xdg_wm_base_pong(base, serial); - } -@@ -343,14 +403,16 @@ void onGlobalAdd(void *_, wl_registry *registry, uint32_t name, - return; - if (regHandle((void **)&shm, helper, &wl_shm_interface, 1)) - return; -- if (regHandle((void **)&output_manager, helper, &zxdg_output_manager_v1_interface, 3)) -- return; - if (regHandle((void **)&shell, helper, &zwlr_layer_shell_v1_interface, 4)) - return; - if (regHandle((void **)&base, helper, &xdg_wm_base_interface, 2)) { - xdg_wm_base_add_listener(base, &xdg_wm_base_listener, NULL); - return; - } -+ if (regHandle((void **)&dwl, helper, &zdwl_manager_v1_interface, 1)) { -+ zdwl_manager_v1_add_listener(dwl, &dwl_listener, NULL); -+ return; -+ } - - { - wl_output *output; -@@ -433,7 +495,7 @@ void globalChecks() { - checkGlobal(shm, "wl_shm"); - checkGlobal(base, "xdg_wm_base"); - checkGlobal(shell, "wlr_layer_shell"); -- checkGlobal(output_manager, "zxdg_output_manager"); -+ checkGlobal(dwl, "zdwl_manager_v1"); - - ready = 1; - } -@@ -442,14 +504,12 @@ void monitorSetup(uint32_t name, wl_output *output) { - Monitor *monitor = ecalloc(1, sizeof(*monitor)); - - monitor->bar = bar_create(); -- monitor->output = output; -+ monitor->wl_output = output; - monitor->registry_name = name; -+ monitor->dwl_output = zdwl_manager_v1_get_output(dwl, output); -+ zdwl_output_v1_add_listener(monitor->dwl_output, &dwl_ouptut_listener, monitor); - - wl_list_insert(&monitors, &monitor->link); -- -- // So we can get the monitor name. -- zxdg_output_v1 *xdg_output = zxdg_output_manager_v1_get_xdg_output(output_manager, output); -- zxdg_output_v1_add_listener(xdg_output, &xdg_output_listener, monitor); - } - - void set_cloexec(int fd) { -@@ -512,7 +572,7 @@ void setupFifo(void) { - - void update_monitor(Monitor* monitor) { - if (!bar_is_visible(monitor->bar)) { -- bar_show(monitor->bar, monitor->output); -+ bar_show(monitor->bar, monitor->wl_output); - return; - } - -@@ -520,16 +580,6 @@ void update_monitor(Monitor* monitor) { - return; - } - --Monitor* monitor_from_name(char* name) { -- Monitor* monitor; -- wl_list_for_each(monitor, &monitors, link) { -- if (strcmp(name, monitor->xdg_name) == EQUAL) -- return monitor; -- } -- -- return NULL; --} -- - Monitor* monitor_from_surface(wl_surface* surface) { - Monitor* monitor; - wl_list_for_each(monitor, &monitors, link) { -@@ -542,8 +592,8 @@ Monitor* monitor_from_surface(wl_surface* surface) { - - /* - * Parse and extract a substring based on a delimiter -- * start_end is a pointer to a ulong that we will use to base our starting location. -- * Then fill in after as the ending point. To be used later on. -+ * start_end is a ulong that we will use to base our starting location. -+ * Then replace as the end point to be used later on. - */ - char* to_delimiter(char* string, ulong *start_end, char delimiter) { - char* output; -@@ -591,103 +641,6 @@ char* get_line(int fd) { - return output; - } - --void on_stdin(void) { -- while (1) { -- char *buffer = get_line(STDIN_FILENO); -- if (!buffer || !strlen(buffer)) { -- free(buffer); -- return; -- } -- -- handle_stdin(buffer); -- free(buffer); -- } --} -- --void handle_stdin(char* line) { -- char *name, *command; -- Monitor* monitor; -- ulong loc = 0; /* Keep track of where we are in the string `line` */ -- -- name = to_delimiter(line, &loc, ' '); -- command = to_delimiter(line, &loc, ' '); -- monitor = monitor_from_name(name); -- if (!monitor) -- return; -- free(name); -- -- // Hate the way these if statements look. Is being this explicit worth it? -- if (strcmp(command, "title") == EQUAL) { -- if (line[strlen(line)-2] == ' ') { -- bar_set_title(monitor->bar, ""); -- goto done; -- } -- -- char* title = to_delimiter(line, &loc, '\n'); -- bar_set_title(monitor->bar, title); -- free(title); -- -- } else if (strcmp(command, "floating") == EQUAL) { -- if (line[strlen(line)-2] == ' ') { -- bar_set_floating(monitor->bar, 0); -- goto done; -- } -- -- char* is_floating = to_delimiter(line, &loc, '\n'); -- strcmp(is_floating, "1") == EQUAL ? bar_set_floating(monitor->bar, 1) : bar_set_floating(monitor->bar, 0); -- free(is_floating); -- -- } else if (strcmp(command, "fullscreen") == EQUAL) { -- /* Do nothing */ -- } else if (strcmp(command, "selmon") == EQUAL) { -- char* selmon = to_delimiter(line, &loc, '\n'); -- strcmp(selmon, "1") == EQUAL ? bar_set_active(monitor->bar, 1) : bar_set_active(monitor->bar, 0); -- free(selmon); -- -- } else if (strcmp(command, "tags") == EQUAL) { -- char *occupied_, *tags__, *clients_, *urgent_; -- int occupied, tags_, clients, urgent, i, tag_mask; -- -- occupied_ = to_delimiter(line, &loc, ' '); -- tags__ = to_delimiter(line, &loc, ' '); -- clients_ = to_delimiter(line, &loc, ' '); -- urgent_ = to_delimiter(line, &loc, '\n'); -- -- occupied = atoi(occupied_); -- tags_ = atoi(tags__); -- clients = atoi(clients_); -- urgent = atoi(urgent_); -- -- for(i = 0; i < LENGTH(tags); i++) { -- int state = TAG_INACTIVE; -- tag_mask = 1 << i; -- -- if (tags_ & tag_mask) -- state |= TAG_ACTIVE; -- if (urgent & tag_mask) -- state |= TAG_URGENT; -- -- bar_set_tag(monitor->bar, i, state, occupied & tag_mask ? 1: 0, clients & tag_mask ? 1 : 0); -- } -- -- free(occupied_); -- free(tags__); -- free(clients_); -- free(urgent_); -- -- } else if (strcmp(command, "layout") == EQUAL) { -- char* layout = to_delimiter(line, &loc, '\n'); -- bar_set_layout(monitor->bar, layout); -- free(layout); -- } else { -- die("command unrecognized"); -- } -- -- done: -- free(command); -- update_monitor(monitor); --} -- - void on_status(void) { - while (1) { - char *line = get_line(fifo_fd), *command, *status; -@@ -749,6 +702,8 @@ void setup(void) { - wl_list_init(&seats); - wl_list_init(&monitors); - wl_list_init(&uninitializedOutputs); -+ wl_array_init(&tags); -+ wl_array_init(&layouts); - - wl_registry *registry = wl_display_get_registry(display); - wl_registry_add_listener(registry, ®istry_listener, NULL); -@@ -772,13 +727,9 @@ void setup(void) { - - pollfds = ecalloc(POLLFDS, sizeof(*pollfds)); - -- pollfds[0] = (pollfd) {STDIN_FILENO, POLLIN}; -- pollfds[1] = (pollfd) {wl_display_fd, POLLIN}; -- pollfds[2] = (pollfd) {self_pipe[0], POLLIN}; -- pollfds[3] = (pollfd) {fifo_fd, POLLIN}; -- -- if (fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK) < 0) -- die("O_NONBLOCK"); -+ pollfds[0] = (pollfd) {wl_display_fd, POLLIN}; -+ pollfds[1] = (pollfd) {self_pipe[0], POLLIN}; -+ pollfds[2] = (pollfd) {fifo_fd, POLLIN}; - } - - void run(void) { -@@ -803,8 +754,6 @@ void run(void) { - pollfd->events = POLLIN; - flush(); - } -- } else if (pollfd->fd == STDIN_FILENO && (pollfd->revents & POLLIN)) { -- on_stdin(); - } else if (pollfd->fd == fifo_fd && (pollfd->revents & POLLIN)) { - on_status(); - } else if (pollfd->fd == self_pipe[0] && (pollfd->revents & POLLIN)) { -@@ -823,16 +772,16 @@ void cleanup(void) { - xdg_wm_base_destroy(base); - if (shell) - zwlr_layer_shell_v1_destroy(shell); -- if (output_manager) -- zxdg_output_manager_v1_destroy(output_manager); -- if (fifo_path) { -- unlink(fifo_path); -- remove(fifo_path); -- } - if (file) - fclose(file); - if (display) - wl_display_disconnect(display); -+ if (fifo_path) { -+ unlink(fifo_path); -+ remove(fifo_path); -+ } -+ wl_array_release(&tags); -+ wl_array_release(&layouts); - } - - int main(int argc, char *argv[]) { --- -2.39.1 - - -From b10653fb36933a4a83062b62eb7e668772d686fa Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 03:32:37 -0800 -Subject: [PATCH 02/11] Got IPC working. - ---- - .gitignore | 1 + - src/bar.c | 137 ++++++++++++++++++++++++++------------------------- - src/common.h | 15 +++--- - src/config.h | 10 ++-- - src/main.c | 94 +++++++++++++++++++++++++++-------- - src/util.h | 25 ---------- - 6 files changed, 158 insertions(+), 124 deletions(-) - delete mode 100644 src/util.h - -diff --git a/.gitignore b/.gitignore -index 782e264..971f1a3 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -2,3 +2,4 @@ - bar - run - compile_flags.txt -+log.txt -diff --git a/src/bar.c b/src/bar.c -index fe829f9..881afe8 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -20,35 +20,16 @@ - #include "wlr-layer-shell-unstable-v1-client-protocol.h" - #include "xdg-shell-client-protocol.h" - --typedef struct Font Font; --typedef struct BarComponent BarComponent; -- --static void layerSurface(void* data, zwlr_layer_surface_v1*, uint32_t serial, uint32_t width, uint32_t height); --static void frame(void* data, wl_callback* callback, uint32_t callback_data); --static void bar_render(Bar* bar); --static void bar_tags_render(Bar* bar, cairo_t* painter, int* x); --static void bar_layout_render(Bar* bar, cairo_t* painter, int* x); --static void bar_title_render(Bar* bar, cairo_t* painter, int* x); --static void bar_status_render(Bar* bar, cairo_t* painter, int* x); --static void bar_set_colorscheme(Bar* bar, const int** scheme); --static void set_color(cairo_t* painter, const int rgba[4]); --static void bar_color_background(Bar* bar, cairo_t* painter); --static void bar_color_foreground(Bar* bar, cairo_t* painter); --static Font getFont(void); --static void bar_component_render(Bar* bar, BarComponent* component, cairo_t* painter, uint width, int* x); --static int bar_component_width(BarComponent* component); --static int bar_component_height(BarComponent* component); -- --struct Font { -+typedef struct Font { - PangoFontDescription* description; - - uint height; /* This is also the same as lrpad from dwm. */ --}; -+} Font; - --struct BarComponent { -+typedef struct BarComponent { - PangoLayout* layout; - int x; /* Right bound of box */ --}; -+} BarComponent; - - typedef struct { - uint occupied; -@@ -62,7 +43,6 @@ struct Bar { - Tag tags[9]; - - PangoContext* context; -- Font font; - - /* Colors */ - int background[4], foreground[4]; -@@ -77,6 +57,25 @@ struct Bar { - Shm* shm; - }; - -+static void layerSurface(void* data, zwlr_layer_surface_v1*, uint32_t serial, uint32_t width, uint32_t height); -+static void frame(void* data, wl_callback* callback, uint32_t callback_data); -+static void bar_render(Bar* bar); -+static void bar_tags_render(Bar* bar, cairo_t* painter, int* x); -+static void bar_layout_render(Bar* bar, cairo_t* painter, int* x); -+static void bar_title_render(Bar* bar, cairo_t* painter, int* x); -+static void bar_status_render(Bar* bar, cairo_t* painter, int* x); -+static void bar_set_colorscheme(Bar* bar, const int** scheme); -+static void set_color(cairo_t* painter, const int rgba[4]); -+static void bar_color_background(Bar* bar, cairo_t* painter); -+static void bar_color_foreground(Bar* bar, cairo_t* painter); -+static Font getFont(void); -+static BarComponent bar_component_create(PangoContext* context, PangoFontDescription* description); -+static void bar_component_render(Bar* bar, BarComponent* component, cairo_t* painter, uint width, int* x); -+static int bar_component_width(BarComponent* component); -+static int bar_component_height(BarComponent* component); -+ -+static Font bar_font = {NULL, 0}; -+ - // So that the compositor can tell us when it's a good time to render again. - const wl_callback_listener frameListener = {.done = frame}; - -@@ -135,6 +134,13 @@ Font getFont(void) { - return in; - } - -+BarComponent bar_component_create(PangoContext* context, PangoFontDescription* description) { -+ PangoLayout* layout = pango_layout_new(context); -+ pango_layout_set_font_description(layout, description); -+ -+ return (BarComponent){ layout, 0 }; -+} -+ - int bar_component_width(BarComponent* component) { - int w; - pango_layout_get_size(component->layout, &w, NULL); -@@ -175,34 +181,35 @@ void bar_component_render(Bar* bar, BarComponent* component, cairo_t* painter, u - cairo_fill(painter); - - bar_color_foreground(bar, painter); -- cairo_move_to(painter, *x+(bar->font.height/2.0), 1); -+ cairo_move_to(painter, *x+(bar_font.height/2.0), 1); - pango_cairo_show_layout(painter, component->layout); - } - - void bar_tags_render(Bar* bar, cairo_t* painter, int* x) { -- for ( int i = 0; i < tags.size; i++ ) { -- Tag tag = bar->tags[i]; -- uint tagWidth = bar_component_width(&tag.component) + bar->font.height; -+ int i; -+ for ( i = 0; i < LENGTH(bar->tags); i++ ){ -+ Tag* tag = &bar->tags[i]; -+ uint tagWidth = bar_component_width(&tag->component) + bar_font.height; - - /* Creating the tag */ -- if (tag.state & TAG_ACTIVE) { -+ if (tag->state & TAG_ACTIVE) { - bar_set_colorscheme(bar, schemes[Active_Scheme]); -- } else if (tag.state & TAG_URGENT) { -+ } else if (tag->state & TAG_URGENT) { - bar_set_colorscheme(bar, schemes[Urgent_Scheme]); - } else { - bar_set_colorscheme(bar, schemes[InActive_Scheme]); - } - -- bar_component_render(bar, &tag.component, painter, tagWidth, x); -+ bar_component_render(bar, &tag->component, painter, tagWidth, x); - -- if (!tag.occupied) -+ if (!tag->occupied) - goto done; - - /* Creating the occupied tag box */ -- int boxHeight = bar->font.height / 9; -- int boxWidth = bar->font.height / 6 + 1; -+ int boxHeight = bar_font.height / 9; -+ int boxWidth = bar_font.height / 6 + 1; - -- if (tag.focusedClient) { -+ if (tag->focusedClient) { - cairo_rectangle(painter, *x + boxHeight, boxHeight, boxWidth, boxWidth); - cairo_fill(painter); - } else { -@@ -220,7 +227,7 @@ void bar_layout_render(Bar* bar, cairo_t* painter, int* x) { - if (!bar) - return; - -- uint layoutWidth = bar_component_width(&bar->layout) + bar->font.height; -+ uint layoutWidth = bar_component_width(&bar->layout) + bar_font.height; - - bar_set_colorscheme(bar, schemes[InActive_Scheme]); - bar_component_render(bar, &bar->layout, painter, layoutWidth, x); -@@ -233,7 +240,7 @@ void bar_title_render(Bar* bar, cairo_t* painter, int* x) { - return; - - // HUH For some reason ww - x - (status width) works, but ww - x - status width doesn't? -- uint titleWidth = bar->shm->width - *x - (bar_component_width(&bar->status) + bar->font.height); -+ uint titleWidth = bar->shm->width - *x - (bar_component_width(&bar->status) + bar_font.height); - - bar->active ? bar_set_colorscheme(bar, schemes[Active_Scheme]) : bar_set_colorscheme(bar, schemes[InActive_Scheme]); - -@@ -242,8 +249,8 @@ void bar_title_render(Bar* bar, cairo_t* painter, int* x) { - if (!bar->floating) - goto done; - -- int boxHeight = bar->font.height / 9; -- int boxWidth = bar->font.height / 6 + 1; -+ int boxHeight = bar_font.height / 9; -+ int boxWidth = bar_font.height / 6 + 1; - - set_color(painter, grey3); - cairo_rectangle(painter, *x + boxHeight + 0.5, boxHeight + 0.5, boxWidth, boxWidth); -@@ -258,7 +265,7 @@ void bar_status_render(Bar* bar, cairo_t* painter, int* x) { - if (!bar) - return; - -- uint statusWidth = bar_component_width(&bar->status) + bar->font.height; -+ uint statusWidth = bar_component_width(&bar->status) + bar_font.height; - - bar_set_colorscheme(bar, schemes[InActive_Scheme]); - if (!bar->active && status_on_active) -@@ -268,8 +275,9 @@ void bar_status_render(Bar* bar, cairo_t* painter, int* x) { - } - - void bar_render(Bar* bar) { -- if (!bar || !bar->shm) -+ if (!bar || !bar->shm) { - return; -+ } - - int x = 0; /* Keep track of the cairo cursor */ - cairo_surface_t* image = cairo_image_surface_create_for_data(shm_data(bar->shm), -@@ -304,37 +312,30 @@ Bar* bar_create(void) { - bar->floating = 0; - - bar->context = pango_font_map_create_context(pango_cairo_font_map_get_default()); -- if (!bar->context) -+ if (!bar->context) { - die("pango context"); -+ } - -- bar->font = getFont(); -- bar->layout.layout = pango_layout_new(bar->context); -- bar->title.layout = pango_layout_new(bar->context); -- bar->status.layout = pango_layout_new(bar->context); -- -- bar->layout.x = 0; -- bar->title.x = 0; -- bar->status.x = 0; -+ if (!bar_font.description) -+ bar_font = getFont(); - -- pango_layout_set_font_description(bar->layout.layout, bar->font.description); -- pango_layout_set_font_description(bar->title.layout, bar->font.description); -- pango_layout_set_font_description(bar->status.layout, bar->font.description); -+ bar->layout = bar_component_create(bar->context, bar_font.description); -+ bar->title = bar_component_create(bar->context, bar_font.description); -+ bar->status = bar_component_create(bar->context, bar_font.description); - - char* status = ecalloc(8, sizeof(*status)); - snprintf(status, 8, "dwl %.1f", VERSION); -+ pango_layout_set_text(bar->status.layout, status, strlen(status)); - -- pango_layout_set_text(bar->layout.layout, "[]=", -1); -- pango_layout_set_text(bar->status.layout, status, -1); -- -- char* str; -- int i; -- wl_array_for_each(str, &tags) { // Initalize the tags -+ for ( int i = 0; i < WL_ARRAY_LENGTH(&tags, char**); i++ ) { // Initalize the tags - PangoLayout* layout = pango_layout_new(bar->context); -- pango_layout_set_text(layout, str, strlen(str)); -- pango_layout_set_font_description(layout, bar->font.description); -+ char* name = *WL_ARRAY_AT(&tags, char**, i); -+ -+ pango_layout_set_text(layout, name, strlen(name)); -+ pango_layout_set_font_description(layout, bar_font.description); -+ - Tag tag = { 0, 0, 0, layout }; - bar->tags[i] = tag; -- i++; - } - - return bar; -@@ -402,7 +403,7 @@ void bar_show(Bar* bar, wl_output* output) { - zwlr_layer_surface_v1_set_anchor(bar->layer_surface, - anchor | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT); - -- int height = bar->font.height + 2; -+ int height = bar_font.height + 2; - zwlr_layer_surface_v1_set_size(bar->layer_surface, 0, height); - zwlr_layer_surface_v1_set_exclusive_zone(bar->layer_surface, height); - wl_surface_commit(bar->surface); -@@ -426,6 +427,7 @@ int bar_is_visible(Bar* bar) { - } - - void bar_set_layout(Bar *bar, const char* text) { -+ _logf("'%s' '%d'\n", text, strlen(text)); - pango_layout_set_text(bar->layout.layout, text, strlen(text)); - } - -@@ -457,14 +459,15 @@ wl_surface* bar_get_surface(Bar *bar) { - } - - void bar_click(Bar* bar, struct Monitor* monitor, int x, int y, uint32_t button) { -- Arg* arg = NULL; -+ Arg *argp = NULL, arg; - Clicked location = Click_None; - - if (x < bar->tags[LENGTH(bar->tags)-1].component.x) { - location = Click_Tag; - for (int i = 0; i < LENGTH(bar->tags); i++) { - if (x < bar->tags[i].component.x) { -- arg->ui = 1< - #include - --#define LENGTH(X) (sizeof X / sizeof X[0] ) - #define VERSION 1.0 -+#define LENGTH(X) (sizeof X / sizeof X[0] ) -+#define WL_ARRAY_LENGTH(array, type) ((array)->size/sizeof(type)) -+#define WL_ARRAY_AT(array, type, index) ((type)((array)->data)+index) - - // Commonly used typedefs which makes using these structs easier. - typedef struct wl_registry wl_registry; -@@ -48,7 +50,6 @@ extern wl_display* display; - extern wl_compositor* compositor; - extern wl_shm* shm; - extern zwlr_layer_shell_v1* shell; --extern zdwl_manager_v1* dwl; - extern FILE* file; - extern wl_array tags, layouts; - -@@ -81,10 +82,10 @@ extern void _logf(const char* fmt, ...); - * User function definitions. - * Usually used for when clicking buttons with a pointer. - */ --void spawn(struct Monitor* monitor, const Arg* arg); --void layout(struct Monitor* monitor, const Arg* arg); --void view(struct Monitor* monitor, const Arg* arg); --void toggle_view(struct Monitor* monitor, const Arg* arg); --void tag(struct Monitor* monitor, const Arg* arg); -+extern void spawn(struct Monitor* monitor, const Arg* arg); -+extern void layout(struct Monitor* monitor, const Arg* arg); -+extern void view(struct Monitor* monitor, const Arg* arg); -+extern void toggle_view(struct Monitor* monitor, const Arg* arg); -+extern void tag(struct Monitor* monitor, const Arg* arg); - - #endif // COMMON_H_ -diff --git a/src/config.h b/src/config.h -index dc3bfc4..0e6112d 100644 ---- a/src/config.h -+++ b/src/config.h -@@ -37,11 +37,11 @@ static const int* schemes[3][2] = { - * { click location, button clicked (linux event codes), function to run, other argument input (usage varies) } - */ - static const Button buttons[] = { --//{ Click_Tag, BTN_LEFT, view, {0}}, --//{ Click_Tag, BTN_MIDDLE, tag, {0}}, --//{ Click_Tag, BTN_RIGHT, toggle_view, {0}}, --//{ Click_Layout, BTN_LEFT, layout, {.ui = 0}}, --//{ Click_Layout, BTN_RIGHT, layout, {.ui = 1}}, -+{ Click_Tag, BTN_LEFT, view, {0}}, -+{ Click_Tag, BTN_MIDDLE, tag, {0}}, -+{ Click_Tag, BTN_RIGHT, toggle_view, {0}}, -+{ Click_Layout, BTN_LEFT, layout, {.ui = 0}}, -+{ Click_Layout, BTN_RIGHT, layout, {.ui = 1}}, - { Click_Status, BTN_MIDDLE, spawn, {.v = terminal } }, - }; - -diff --git a/src/main.c b/src/main.c -index 77165be..17b9354 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -1,4 +1,5 @@ - #include -+#include - #include - #include - #include -@@ -45,6 +46,10 @@ typedef struct Monitor { - uint32_t registry_name; - wl_output *wl_output; - -+ uint layout; -+ uint tags; -+ uint visibilty; -+ - zdwl_output_v1* dwl_output; - Bar *bar; - wl_list link; -@@ -139,7 +144,7 @@ wl_display *display; - wl_compositor *compositor; - wl_shm *shm; - zwlr_layer_shell_v1 *shell; --zdwl_manager_v1* dwl; -+static zdwl_manager_v1* dwl; - static xdg_wm_base* base; - - /* dwl stuff */ -@@ -218,41 +223,45 @@ static const struct wl_seat_listener seat_listener = { - }; - - void add_layout(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name) { -- void* temp = wl_array_add(&layouts, sizeof(name)); -+ void* temp = wl_array_add(&layouts, sizeof(char**)); - if (!temp) - return; - -- temp += layouts.size; -- temp = strdup(name); -+ char* dup = strdup(name); -+ -+ memcpy(temp, &dup, sizeof(char**)); - } - - void add_tag(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name) { -- void* temp = wl_array_add(&tags, sizeof(name)); -+ void* temp = wl_array_add(&tags, sizeof(char**)); - if (!temp) - return; - -- temp += tags.size; -- temp = strdup(name); -+ char* dup = strdup(name); /* Gain ownership of name */ -+ -+ memcpy(temp, &dup, sizeof(char**)); /* Copy a pointer of it into the array */; - } - - void toggle_visibility(void* data, zdwl_output_v1* zdwl_output_v1) { - Monitor* monitor = data; -+ monitor->visibilty = ~monitor->visibilty; - bar_hide(monitor->bar); - } - - void active(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t active) { -- Monitor* monitor= data; -+ Monitor* monitor = data; - bar_set_active(monitor->bar, active); - } - - void set_tag(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused) { - Monitor* monitor = data; -- bar_set_tag(monitor->bar,tag , state, clients ? 1 : 0, focused); -+ bar_set_tag(monitor->bar, tag, state, clients ? 1 : 0, focused); -+ monitor->tags = (state & ZDWL_OUTPUT_V1_TAG_STATE_ACTIVE) ? monitor->tags | (1 << tag) : monitor->tags & ~(1 << tag); - } - - void set_layout(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t layout) { - Monitor* monitor = data; -- bar_set_layout(monitor->bar, (char*)(layouts.data+layout)); -+ bar_set_layout(monitor->bar, *WL_ARRAY_AT(&layouts, char**, layout)); - } - - void title(void* data, zdwl_output_v1* zdwl_output_v1, const char* title) { -@@ -296,17 +305,17 @@ void motion(void* data, wl_pointer* pointer, uint32_t time, wl_fixed_t x, wl_fix - void button(void *data, wl_pointer *pointer, uint32_t serial, uint32_t time, - uint32_t button, uint32_t state) { - Seat seat = *(Seat*)data; -+ uint32_t* new_buttons = NULL; - int i, prev = -1; /* The index of this button */ - - for (i = 0; i < seat.pointer->size; i++) { -- _logf("'%d' ", seat.pointer->buttons[i]); - if (seat.pointer->buttons[i] == button) - prev = i; - } - - /* If this button was newly pressed. */ - if (state == WL_POINTER_BUTTON_STATE_PRESSED && prev == -1) { -- uint32_t* new_buttons = ecalloc(seat.pointer->size+1, sizeof(uint32_t)); -+ new_buttons = ecalloc(seat.pointer->size+1, sizeof(uint32_t)); - for (i = 0; i < seat.pointer->size+1; i++) { - if (i == seat.pointer->size) { - new_buttons[i] = button; -@@ -316,15 +325,12 @@ void button(void *data, wl_pointer *pointer, uint32_t serial, uint32_t time, - new_buttons[i] = seat.pointer->buttons[i]; - } - -- free(seat.pointer->buttons); -- seat.pointer->buttons = new_buttons; - seat.pointer->size++; -- return; - } - - /* If this button was released and we have it. */ - if(state == WL_KEYBOARD_KEY_STATE_RELEASED && prev != -1) { -- uint32_t* new_buttons = ecalloc(seat.pointer->size-1, sizeof(uint32_t)); -+ new_buttons = ecalloc(seat.pointer->size-1, sizeof(uint32_t)); - for (i = 0; i < seat.pointer->size; i++) { - if (i == prev) - continue; -@@ -336,12 +342,12 @@ void button(void *data, wl_pointer *pointer, uint32_t serial, uint32_t time, - new_buttons[i-1] = seat.pointer->buttons[i]; - } - -- free(seat.pointer->buttons); -- seat.pointer->buttons = new_buttons; - seat.pointer->size--; -- -- return; - } -+ -+ free(seat.pointer->buttons); -+ seat.pointer->buttons = new_buttons; -+ return; - } - - static void pointer_frame(void* data, wl_pointer* pointer) { -@@ -478,6 +484,34 @@ void spawn(Monitor* monitor, const Arg *arg) { - exit(1); - } - -+void layout(Monitor* monitor, const Arg* arg) { -+ if (!arg->ui && monitor->layout > 0) { -+ logln("decrement"); -+ monitor->layout--; -+ } else if (arg->ui && monitor->layout < WL_ARRAY_LENGTH(&layouts, char**)) { -+ logln("increment"); -+ monitor->layout++; -+ } else { -+ return; -+ } -+ -+ zdwl_output_v1_set_layout(monitor->dwl_output, monitor->layout); -+ logln("layout"); -+} -+ -+void view(struct Monitor* monitor, const Arg* arg) { -+ zdwl_output_v1_set_tags(monitor->dwl_output, arg->ui, 1); -+ logln("viewed"); -+} -+ -+void toggle_view(struct Monitor* monitor, const Arg* arg) { -+ zdwl_output_v1_set_tags(monitor->dwl_output, monitor->tags ^ arg->ui, 0); -+} -+ -+void tag(struct Monitor* monitor, const Arg* arg) { -+ zdwl_output_v1_set_client_tags(monitor->dwl_output, 0, arg->ui); -+} -+ - void checkGlobal(void *global, const char *name) { - if (global) - return; -@@ -506,6 +540,8 @@ void monitorSetup(uint32_t name, wl_output *output) { - monitor->bar = bar_create(); - monitor->wl_output = output; - monitor->registry_name = name; -+ monitor->layout = 0; -+ monitor->visibilty = 1; - monitor->dwl_output = zdwl_manager_v1_get_output(dwl, output); - zdwl_output_v1_add_listener(monitor->dwl_output, &dwl_ouptut_listener, monitor); - -@@ -571,6 +607,10 @@ void setupFifo(void) { - } - - void update_monitor(Monitor* monitor) { -+ if (!monitor->visibilty) { -+ return; -+ } -+ - if (!bar_is_visible(monitor->bar)) { - bar_show(monitor->bar, monitor->wl_output); - return; -@@ -730,6 +770,9 @@ void setup(void) { - pollfds[0] = (pollfd) {wl_display_fd, POLLIN}; - pollfds[1] = (pollfd) {self_pipe[0], POLLIN}; - pollfds[2] = (pollfd) {fifo_fd, POLLIN}; -+ -+ if (fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK) < 0) -+ die("O_NONBLOCK"); - } - - void run(void) { -@@ -747,8 +790,9 @@ void run(void) { - die("POLLNVAL"); - - if (pollfd->fd == wl_display_fd) { -- if ((pollfd->revents & POLLIN) && (wl_display_dispatch(display) < 0)) -+ if ((pollfd->revents & POLLIN) && (wl_display_dispatch(display) < 0)) { - die("wl_display_dispatch"); -+ } - - if (pollfd->revents & POLLOUT) { - pollfd->events = POLLIN; -@@ -780,7 +824,15 @@ void cleanup(void) { - unlink(fifo_path); - remove(fifo_path); - } -+ char** ptr; -+ wl_array_for_each(ptr, &tags) { -+ free(*ptr); -+ } - wl_array_release(&tags); -+ ptr = NULL; -+ wl_array_for_each(ptr, &tags) { -+ free(*ptr); -+ } - wl_array_release(&layouts); - } - -diff --git a/src/util.h b/src/util.h -deleted file mode 100644 -index 8e61726..0000000 ---- a/src/util.h -+++ /dev/null -@@ -1,25 +0,0 @@ --#ifndef UTIL_H_ --#define UTIL_H_ --#include --#include -- --typedef struct { -- void* ptr; -- uint size; --} Stack; -- --#define stack_for_each(pos, stack) \ -- for (pos = (stack)->data); \ -- (const char*) pos < ((const char*) (stack)->data + (stack)->size); \ -- (pos)++) -- -- --inline void stack_init(Stack* stack) { -- stack->ptr = NULL; -- stack->size = 0; --} -- --void* stack_end(Stack* stack); --void* stack_push(Stack* stack); -- --#endif // UTIL_H_ --- -2.39.1 - - -From 69e0b606b80b1df64ca8999bf4d7a77319002380 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 14:46:12 -0800 -Subject: [PATCH 03/11] Small things. - ---- - src/bar.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 881afe8..257ab91 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -186,8 +186,7 @@ void bar_component_render(Bar* bar, BarComponent* component, cairo_t* painter, u - } - - void bar_tags_render(Bar* bar, cairo_t* painter, int* x) { -- int i; -- for ( i = 0; i < LENGTH(bar->tags); i++ ){ -+ for ( int i = 0; i < LENGTH(bar->tags); i++ ){ - Tag* tag = &bar->tags[i]; - uint tagWidth = bar_component_width(&tag->component) + bar_font.height; - -@@ -320,9 +319,10 @@ Bar* bar_create(void) { - bar_font = getFont(); - - bar->layout = bar_component_create(bar->context, bar_font.description); -- bar->title = bar_component_create(bar->context, bar_font.description); -+ bar->title = bar_component_create(bar->context, bar_font.description); - bar->status = bar_component_create(bar->context, bar_font.description); - -+ /* Default status */ - char* status = ecalloc(8, sizeof(*status)); - snprintf(status, 8, "dwl %.1f", VERSION); - pango_layout_set_text(bar->status.layout, status, strlen(status)); --- -2.39.1 - - -From f4f87b8d3c07750afca58b5a72c4ba7ef4d8f009 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 15:17:34 -0800 -Subject: [PATCH 04/11] removed log message - ---- - src/bar.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/bar.c b/src/bar.c -index 257ab91..403b4db 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -427,7 +427,6 @@ int bar_is_visible(Bar* bar) { - } - - void bar_set_layout(Bar *bar, const char* text) { -- _logf("'%s' '%d'\n", text, strlen(text)); - pango_layout_set_text(bar->layout.layout, text, strlen(text)); - } - --- -2.39.1 - - -From 0b910f943f7e3006068208acf18b08e2429ba1a6 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 15:33:47 -0800 -Subject: [PATCH 05/11] Used component system for tags. - ---- - src/bar.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 403b4db..61d68ff 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -328,13 +328,12 @@ Bar* bar_create(void) { - pango_layout_set_text(bar->status.layout, status, strlen(status)); - - for ( int i = 0; i < WL_ARRAY_LENGTH(&tags, char**); i++ ) { // Initalize the tags -- PangoLayout* layout = pango_layout_new(bar->context); -+ BarComponent component = bar_component_create(bar->context, bar_font.description); - char* name = *WL_ARRAY_AT(&tags, char**, i); - -- pango_layout_set_text(layout, name, strlen(name)); -- pango_layout_set_font_description(layout, bar_font.description); -+ pango_layout_set_text(component.layout, name, strlen(name)); - -- Tag tag = { 0, 0, 0, layout }; -+ Tag tag = { 0, 0, 0, component }; - bar->tags[i] = tag; - } - --- -2.39.1 - - -From 373db2787c096e813c0391e798997f960ebfe4cf Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 17:16:02 -0800 -Subject: [PATCH 06/11] removed logging stuff - ---- - src/bar.c | 2 -- - src/common.h | 5 ----- - src/main.c | 28 ---------------------------- - 3 files changed, 35 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 61d68ff..3d99f1d 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -482,9 +482,7 @@ void bar_click(Bar* bar, struct Monitor* monitor, int x, int y, uint32_t button) - - for (int i = 0; i < LENGTH(buttons); i++) { - if (buttons[i].location == location && buttons[i].button == button) { -- logln("found button"); - buttons[i].func(monitor, argp ? argp : &buttons[i].arg); -- logln("after button function"); - return; - } - } -diff --git a/src/common.h b/src/common.h -index f42eee2..ddcfcfa 100644 ---- a/src/common.h -+++ b/src/common.h -@@ -50,7 +50,6 @@ extern wl_display* display; - extern wl_compositor* compositor; - extern wl_shm* shm; - extern zwlr_layer_shell_v1* shell; --extern FILE* file; - extern wl_array tags, layouts; - - struct Monitor; -@@ -74,10 +73,6 @@ typedef struct { - void die(const char* fmt, ...); - void* ecalloc(size_t amnt, size_t size); - --/* Logging functions */ --extern void logln(const char* str); --extern void _logf(const char* fmt, ...); -- - /* - * User function definitions. - * Usually used for when clicking buttons with a pointer. -diff --git a/src/main.c b/src/main.c -index 17b9354..f7f04f6 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -170,8 +170,6 @@ static char* fifo_path; - static struct sigaction sighandle; - static struct sigaction child_handle; - --FILE* file; -- - /* - * So that the global handler knows that we can initialize an output. - * Rather than just store it for when we have all of our globals. -@@ -486,22 +484,18 @@ void spawn(Monitor* monitor, const Arg *arg) { - - void layout(Monitor* monitor, const Arg* arg) { - if (!arg->ui && monitor->layout > 0) { -- logln("decrement"); - monitor->layout--; - } else if (arg->ui && monitor->layout < WL_ARRAY_LENGTH(&layouts, char**)) { -- logln("increment"); - monitor->layout++; - } else { - return; - } - - zdwl_output_v1_set_layout(monitor->dwl_output, monitor->layout); -- logln("layout"); - } - - void view(struct Monitor* monitor, const Arg* arg) { - zdwl_output_v1_set_tags(monitor->dwl_output, arg->ui, 1); -- logln("viewed"); - } - - void toggle_view(struct Monitor* monitor, const Arg* arg) { -@@ -698,9 +692,6 @@ void on_status(void) { - goto done; - } - -- fprintf(file, "'%s'", status); -- fflush(file); -- - Monitor *current_monitor; - wl_list_for_each(current_monitor, &monitors, link) { - bar_set_status(current_monitor->bar, status); -@@ -716,10 +707,6 @@ void on_status(void) { - } - - void setup(void) { -- file = fopen("log.txt", "w"); -- if (!file) -- die("file"); -- - if (pipe(self_pipe) < 0) - die("pipe"); - -@@ -816,8 +803,6 @@ void cleanup(void) { - xdg_wm_base_destroy(base); - if (shell) - zwlr_layer_shell_v1_destroy(shell); -- if (file) -- fclose(file); - if (display) - wl_display_disconnect(display); - if (fifo_path) { -@@ -887,16 +872,3 @@ void* ecalloc(size_t amnt, size_t size) { - - return p; - } -- --void _logf(const char *fmt, ...) { -- va_list ap; -- va_start(ap, fmt); -- vfprintf(file, fmt, ap); -- fflush(file); -- va_end(ap); --} -- --void logln(const char* str) { -- fprintf(file, "%s\n", str); -- fflush(file); --} --- -2.39.1 - - -From e2acb66b1926234887d31c65e8d6c488a37fdb35 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 17:28:13 -0800 -Subject: [PATCH 07/11] shortened some if statements - ---- - src/bar.c | 9 +++------ - src/main.c | 3 +-- - 2 files changed, 4 insertions(+), 8 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 3d99f1d..30957d0 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -88,9 +88,8 @@ void layerSurface(void* data, zwlr_layer_surface_v1* _, uint32_t serial, uint32_ - zwlr_layer_surface_v1_ack_configure(bar->layer_surface, serial); - - if (bar->shm) { -- if (bar->shm->width == width && bar->shm->height) { -+ if (bar->shm->width == width && bar->shm->height) - return; -- } - shm_destroy(bar->shm); - } - -@@ -274,9 +273,8 @@ void bar_status_render(Bar* bar, cairo_t* painter, int* x) { - } - - void bar_render(Bar* bar) { -- if (!bar || !bar->shm) { -+ if (!bar || !bar->shm) - return; -- } - - int x = 0; /* Keep track of the cairo cursor */ - cairo_surface_t* image = cairo_image_surface_create_for_data(shm_data(bar->shm), -@@ -311,9 +309,8 @@ Bar* bar_create(void) { - bar->floating = 0; - - bar->context = pango_font_map_create_context(pango_cairo_font_map_get_default()); -- if (!bar->context) { -+ if (!bar->context) - die("pango context"); -- } - - if (!bar_font.description) - bar_font = getFont(); -diff --git a/src/main.c b/src/main.c -index f7f04f6..d710a2e 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -601,9 +601,8 @@ void setupFifo(void) { - } - - void update_monitor(Monitor* monitor) { -- if (!monitor->visibilty) { -+ if (!monitor->visibilty) - return; -- } - - if (!bar_is_visible(monitor->bar)) { - bar_show(monitor->bar, monitor->wl_output); --- -2.39.1 - - -From 5b20fcfbe5a1df71ecd92aaf081f669cf9367549 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Tue, 21 Feb 2023 17:48:24 -0800 -Subject: [PATCH 08/11] Shortened some statements - ---- - src/bar.c | 3 +-- - src/main.c | 16 ++++++---------- - 2 files changed, 7 insertions(+), 12 deletions(-) - -diff --git a/src/bar.c b/src/bar.c -index 30957d0..6a1f108 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -387,9 +387,8 @@ void bar_invalidate(Bar* bar) { - } - - void bar_show(Bar* bar, wl_output* output) { -- if (!bar || !output || bar_is_visible(bar)) { -+ if (!bar || !output || bar_is_visible(bar)) - return; -- } - - bar->surface = wl_compositor_create_surface(compositor); - bar->layer_surface = zwlr_layer_shell_v1_get_layer_surface(shell, bar->surface, output, ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM, "doom.dwl-bar"); -diff --git a/src/main.c b/src/main.c -index d710a2e..6581299 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -351,13 +351,11 @@ void button(void *data, wl_pointer *pointer, uint32_t serial, uint32_t time, - static void pointer_frame(void* data, wl_pointer* pointer) { - Seat seat = *(Seat*)data; - Monitor* monitor = seat.pointer->focused_monitor; -- if (!monitor) { -+ if (!monitor) - return; -- } - -- for (int i = 0; i < seat.pointer->size; i++) { -+ for (int i = 0; i < seat.pointer->size; i++) - bar_click(monitor->bar, monitor, seat.pointer->x, seat.pointer->y, seat.pointer->buttons[i]); -- } - - free(seat.pointer->buttons); - seat.pointer->buttons = NULL; -@@ -379,9 +377,9 @@ void capabilites(void* data, wl_seat* wl_seat, uint32_t capabilities) { - if (seat->pointer && !has_pointer) { - wl_pointer_release(seat->pointer->pointer); - seat->pointer->focused_monitor = NULL; -- if (seat->pointer->buttons) { -+ if (seat->pointer->buttons) - free(seat->pointer->buttons); -- } -+ - free(seat->pointer); - } - } -@@ -776,9 +774,8 @@ void run(void) { - die("POLLNVAL"); - - if (pollfd->fd == wl_display_fd) { -- if ((pollfd->revents & POLLIN) && (wl_display_dispatch(display) < 0)) { -+ if ((pollfd->revents & POLLIN) && (wl_display_dispatch(display) < 0)) - die("wl_display_dispatch"); -- } - - if (pollfd->revents & POLLOUT) { - pollfd->events = POLLIN; -@@ -865,9 +862,8 @@ void die(const char *fmt, ...) { - void* ecalloc(size_t amnt, size_t size) { - void *p; - -- if (!(p = calloc(amnt, size))) { -+ if (!(p = calloc(amnt, size))) - die("calloc did not allocate"); -- } - - return p; - } --- -2.39.1 - - -From a316631eab690144c318a0ed8bf55c04c9da0010 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Wed, 22 Feb 2023 08:30:06 -0800 -Subject: [PATCH 09/11] Fixed toggle_visibility. - ---- - README.md | 7 +++++++ - src/bar.c | 4 ++++ - src/common.h | 10 +++++----- - src/main.c | 8 +++++--- - 4 files changed, 21 insertions(+), 8 deletions(-) - -diff --git a/README.md b/README.md -index b5e2507..b4e16f4 100644 ---- a/README.md -+++ b/README.md -@@ -5,6 +5,13 @@ I believe dwl-bar provides a more dwm-like experience out of the box than other - - Still in development. But should compile. - -+## TODO -+ + [ ] Create a Makefile or some way (maybe just instructions like a command or build script) to build the program. -+ + [ ] Remove extraneous protcol files and move their generation to a Makefile with `wayland-scanner`. -+ + [ ] Move `config.h` to `config.def.h`, then require config.h to be made through the Makefile / build script. -+ + [ ] Create the ipc patch from the ipc branch and place it in the patches directory. -+ + [x] Test `toggle_visibilty` by adding some keybinds to dwl. -+ - ## Dependencies - I'm not sure what the package names will be for your distrobution, so just make sure these are generally what you have. - + pango -diff --git a/src/bar.c b/src/bar.c -index 6a1f108..b3569ff 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -411,6 +411,10 @@ void bar_hide(Bar* bar) { - zwlr_layer_surface_v1_destroy(bar->layer_surface); - wl_surface_destroy(bar->surface); - shm_destroy(bar->shm); -+ -+ bar->surface = NULL; -+ bar->layer_surface = NULL; -+ bar->shm = NULL; - } - - int bar_is_visible(Bar* bar) { -diff --git a/src/common.h b/src/common.h -index ddcfcfa..27f669e 100644 ---- a/src/common.h -+++ b/src/common.h -@@ -77,10 +77,10 @@ void* ecalloc(size_t amnt, size_t size); - * User function definitions. - * Usually used for when clicking buttons with a pointer. - */ --extern void spawn(struct Monitor* monitor, const Arg* arg); --extern void layout(struct Monitor* monitor, const Arg* arg); --extern void view(struct Monitor* monitor, const Arg* arg); --extern void toggle_view(struct Monitor* monitor, const Arg* arg); --extern void tag(struct Monitor* monitor, const Arg* arg); -+void spawn(struct Monitor* monitor, const Arg* arg); -+void layout(struct Monitor* monitor, const Arg* arg); -+void view(struct Monitor* monitor, const Arg* arg); -+void toggle_view(struct Monitor* monitor, const Arg* arg); -+void tag(struct Monitor* monitor, const Arg* arg); - - #endif // COMMON_H_ -diff --git a/src/main.c b/src/main.c -index 6581299..309368a 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -242,8 +242,8 @@ void add_tag(void* data, zdwl_manager_v1* zdwl_manager_v1, const char* name) { - - void toggle_visibility(void* data, zdwl_output_v1* zdwl_output_v1) { - Monitor* monitor = data; -- monitor->visibilty = ~monitor->visibilty; -- bar_hide(monitor->bar); -+ monitor->visibilty = 1-monitor->visibilty; -+ update_monitor(monitor); - } - - void active(void* data, zdwl_output_v1* zdwl_output_v1, uint32_t active) { -@@ -599,8 +599,10 @@ void setupFifo(void) { - } - - void update_monitor(Monitor* monitor) { -- if (!monitor->visibilty) -+ if (!monitor->visibilty && bar_is_visible(monitor->bar)) { -+ bar_hide(monitor->bar); - return; -+ } - - if (!bar_is_visible(monitor->bar)) { - bar_show(monitor->bar, monitor->wl_output); --- -2.39.1 - - -From 7d01a839de100e8283ff2d0fd122fd368aa372a2 Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Wed, 22 Feb 2023 22:14:02 -0800 -Subject: [PATCH 10/11] Added make file stuff - ---- - .gitignore | 5 + - Makefile | 86 + - README.md | 7 - - src/bar.c | 11 +- - src/bar.h | 2 +- - src/common.h | 4 +- - src/{config.h => config.def.h} | 2 +- - src/dwl-bar-ipc-unstable-v1-cliet-protocol.h | 417 --- - src/dwl-bar-ipc-unstable-v1-protocol.c | 66 - - src/main.c | 15 +- - ...-layer-shell-unstable-v1-client-protocol.h | 706 ----- - src/wlr-layer-shell-unstable-v1-protocol.c | 93 - - src/xdg-output-unstable-v1-client-protocol.h | 411 --- - src/xdg-output-unstable-v1-protocol.c | 78 - - src/xdg-shell-client-protocol.h | 2280 ----------------- - src/xdg-shell-protocol.c | 183 -- - 16 files changed, 103 insertions(+), 4263 deletions(-) - create mode 100644 Makefile - rename src/{config.h => config.def.h} (96%) - delete mode 100644 src/dwl-bar-ipc-unstable-v1-cliet-protocol.h - delete mode 100644 src/dwl-bar-ipc-unstable-v1-protocol.c - delete mode 100644 src/wlr-layer-shell-unstable-v1-client-protocol.h - delete mode 100644 src/wlr-layer-shell-unstable-v1-protocol.c - delete mode 100644 src/xdg-output-unstable-v1-client-protocol.h - delete mode 100644 src/xdg-output-unstable-v1-protocol.c - delete mode 100644 src/xdg-shell-client-protocol.h - delete mode 100644 src/xdg-shell-protocol.c - -diff --git a/.gitignore b/.gitignore -index 971f1a3..c679520 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -3,3 +3,8 @@ bar - run - compile_flags.txt - log.txt -+config.h -+src/xdg-shell-protocol.h -+src/xdg-output-unstable-v1-protocol.h -+src/wlr-layer-shell-unstable-v1-protocol.h -+src/dwl-bar-ipc-unstable-v1-protocol.h -diff --git a/Makefile b/Makefile -new file mode 100644 -index 0000000..af5a37a ---- /dev/null -+++ b/Makefile -@@ -0,0 +1,86 @@ -+## -+# dwl-bar -+# -+# @file -+# @version 1.0 -+.POSIX: -+.SUFFIXES: -+ -+VERSION = 1.0 -+PKG_CONFIG = pkg-config -+ -+#paths -+PREFIX = /usr/local -+MANDIR = $(PREFIX)/share/man -+ -+# Compile flags -+CC = gcc -+PKGS = wayland-client wayland-cursor pangocairo -+BARCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(CFLAGS) -+BARLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(LIBS) -+ -+# Wayland-scanner -+WAYLAND_SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner` -+WAYLAND_PROTOCOLS = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols` -+ -+srcdir := src -+ -+all: dwl-bar -+dwl-bar: $(srcdir)/xdg-shell-protocol.o $(srcdir)/xdg-output-unstable-v1-protocol.o $(srcdir)/wlr-layer-shell-unstable-v1-protocol.o $(srcdir)/dwl-bar-ipc-unstable-v1-protocol.o $(srcdir)/main.c $(srcdir)/bar.c $(srcdir)/shm.c $(srcdir)/config.h -+ $(CC) $^ $(BARLIBS) $(BARCFLAGS) -o $@ -+$(srcdir)/%.o: $(srcdir)/%.c $(srcdir)/%.h -+ $(CC) -c $< $(BARLIBS) $(BARCFLAGS) -o $@ -+ -+$(srcdir)/xdg-shell-protocol.h: -+ $(WAYLAND_SCANNER) client-header \ -+ $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@ -+$(srcdir)/xdg-shell-protocol.c: -+ $(WAYLAND_SCANNER) private-code \ -+ $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@ -+ -+$(srcdir)/xdg-output-unstable-v1-protocol.h: -+ $(WAYLAND_SCANNER) client-header \ -+ $(WAYLAND_PROTOCOLS)/unstable/xdg-output/xdg-output-unstable-v1.xml $@ -+$(srcdir)/xdg-output-unstable-v1-protocol.c: -+ $(WAYLAND_SCANNER) private-code \ -+ $(WAYLAND_PROTOCOLS)/unstable/xdg-output/xdg-output-unstable-v1.xml $@ -+ -+$(srcdir)/wlr-layer-shell-unstable-v1-protocol.h: -+ $(WAYLAND_SCANNER) client-header \ -+ protocols/wlr-layer-shell-unstable-v1.xml $@ -+$(srcdir)/wlr-layer-shell-unstable-v1-protocol.c: -+ $(WAYLAND_SCANNER) private-code \ -+ protocols/wlr-layer-shell-unstable-v1.xml $@ -+ -+$(srcdir)/dwl-bar-ipc-unstable-v1-protocol.h: -+ $(WAYLAND_SCANNER) client-header \ -+ protocols/dwl-bar-ipc-unstable-v1.xml $@ -+$(srcdir)/dwl-bar-ipc-unstable-v1-protocol.c: -+ $(WAYLAND_SCANNER) private-code \ -+ protocols/dwl-bar-ipc-unstable-v1.xml $@ -+ -+$(srcdir)/config.h: -+ cp src/config.def.h $@ -+ -+clean: -+ rm -f dwl-bar src/*.o src/*-protocol.* -+ -+dist: clean -+ mkdir -p dwl-bar-$(VERSION) -+ cp -R LICENSE Makefile README.md src patches protocols \ -+ dwl-bar-$(VERSION) -+ tar -caf dwl-bar-$(VERSION).tar.gz dwl-bar-$(VERSION) -+ rm -rf dwl-bar-$(VERSION) -+ -+install: dwl-bar -+ mkdir -p $(PREFIX)/bin -+ cp -f dwl-bar $(PREFIX)/bin -+ chmod 755 $(PREFIX)/bin/dwl-bar -+ mkdir -p $(PREFIX)/man1 -+ cp -f dwl-bar.1 $(MANDIR)/man1 -+ chmod 644 $(MANDIR)/man1/dwl-bar.1 -+ -+uninstall: -+ rm -f $(PREFIX)/bin/dwl-bar $(MANDIR)/man1/dwl-bar.1 -+ -+# end -diff --git a/README.md b/README.md -index b4e16f4..b5e2507 100644 ---- a/README.md -+++ b/README.md -@@ -5,13 +5,6 @@ I believe dwl-bar provides a more dwm-like experience out of the box than other - - Still in development. But should compile. - --## TODO -- + [ ] Create a Makefile or some way (maybe just instructions like a command or build script) to build the program. -- + [ ] Remove extraneous protcol files and move their generation to a Makefile with `wayland-scanner`. -- + [ ] Move `config.h` to `config.def.h`, then require config.h to be made through the Makefile / build script. -- + [ ] Create the ipc patch from the ipc branch and place it in the patches directory. -- + [x] Test `toggle_visibilty` by adding some keybinds to dwl. -- - ## Dependencies - I'm not sure what the package names will be for your distrobution, so just make sure these are generally what you have. - + pango -diff --git a/src/bar.c b/src/bar.c -index b3569ff..43ed226 100644 ---- a/src/bar.c -+++ b/src/bar.c -@@ -5,20 +5,13 @@ - #include - - #include --#include --#include "cairo-deprecated.h" --#include "cairo.h" --#include "pango/pango-context.h" --#include "pango/pango-font.h" --#include "pango/pango-layout.h" --#include "pango/pango-types.h" - - #include "config.h" - #include "bar.h" - #include "common.h" - #include "shm.h" --#include "wlr-layer-shell-unstable-v1-client-protocol.h" --#include "xdg-shell-client-protocol.h" -+#include "wlr-layer-shell-unstable-v1-protocol.h" -+#include "xdg-shell-protocol.h" - - typedef struct Font { - PangoFontDescription* description; -diff --git a/src/bar.h b/src/bar.h -index 6581aec..8d4e24f 100644 ---- a/src/bar.h -+++ b/src/bar.h -@@ -1,6 +1,6 @@ - #ifndef BAR_H_ - #define BAR_H_ --#include "wlr-layer-shell-unstable-v1-client-protocol.h" -+#include "wlr-layer-shell-unstable-v1-protocol.h" - #include - #include - #include -diff --git a/src/common.h b/src/common.h -index 27f669e..cdbed54 100644 ---- a/src/common.h -+++ b/src/common.h -@@ -1,7 +1,7 @@ - #ifndef COMMON_H_ - #define COMMON_H_ --#include "dwl-bar-ipc-unstable-v1-cliet-protocol.h" --#include "xdg-output-unstable-v1-client-protocol.h" -+#include "dwl-bar-ipc-unstable-v1-protocol.h" -+#include "xdg-output-unstable-v1-protocol.h" - #include - #include - #include -diff --git a/src/config.h b/src/config.def.h -similarity index 96% -rename from src/config.h -rename to src/config.def.h -index 0e6112d..81d17be 100644 ---- a/src/config.h -+++ b/src/config.def.h -@@ -4,7 +4,7 @@ - #include - - static const int bar_top = 1; /* Boolean value, non-zero is true. If not top then bottom */ --static const int status_on_active = 0; /* Display the status on active monitor only. If not then on all. */ -+static const int status_on_active = 1; /* Display the status on active monitor only. If not then on all. */ - static const char* font = "Monospace 10"; - static const char* terminal[] = { "alacritty", NULL }; - -diff --git a/src/dwl-bar-ipc-unstable-v1-cliet-protocol.h b/src/dwl-bar-ipc-unstable-v1-cliet-protocol.h -deleted file mode 100644 -index c39e619..0000000 ---- a/src/dwl-bar-ipc-unstable-v1-cliet-protocol.h -+++ /dev/null -@@ -1,417 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --#ifndef DWL_BAR_IPC_UNSTABLE_V1_CLIENT_PROTOCOL_H --#define DWL_BAR_IPC_UNSTABLE_V1_CLIENT_PROTOCOL_H -- --#include --#include --#include "wayland-client.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --/** -- * @page page_dwl_bar_ipc_unstable_v1 The dwl_bar_ipc_unstable_v1 protocol -- * inter-proccess-communication about dwl's state -- * -- * @section page_desc_dwl_bar_ipc_unstable_v1 Description -- * -- * This protocol allows clients to get updates from dwl and vice versa. -- * -- * Warning! This protocol is experimental and may make backward incompatible changes. -- * -- * @section page_ifaces_dwl_bar_ipc_unstable_v1 Interfaces -- * - @subpage page_iface_zdwl_manager_v1 - manage dwl state -- * - @subpage page_iface_zdwl_output_v1 - control dwl output -- */ --struct wl_output; --struct zdwl_manager_v1; --struct zdwl_output_v1; -- --#ifndef ZDWL_MANAGER_V1_INTERFACE --#define ZDWL_MANAGER_V1_INTERFACE --/** -- * @page page_iface_zdwl_manager_v1 zdwl_manager_v1 -- * @section page_iface_zdwl_manager_v1_desc Description -- * -- * This interface is exposed as a global in wl_registry. -- * -- * Clients can use this interface to get a dwl_output. -- * After binding the client will revieve dwl_manager.tag and dwl_manager.layout events. -- * The dwl_manager.tag and dwl_manager.layout events expose tags and layouts to the client. -- * @section page_iface_zdwl_manager_v1_api API -- * See @ref iface_zdwl_manager_v1. -- */ --/** -- * @defgroup iface_zdwl_manager_v1 The zdwl_manager_v1 interface -- * -- * This interface is exposed as a global in wl_registry. -- * -- * Clients can use this interface to get a dwl_output. -- * After binding the client will revieve dwl_manager.tag and dwl_manager.layout events. -- * The dwl_manager.tag and dwl_manager.layout events expose tags and layouts to the client. -- */ --extern const struct wl_interface zdwl_manager_v1_interface; --#endif --#ifndef ZDWL_OUTPUT_V1_INTERFACE --#define ZDWL_OUTPUT_V1_INTERFACE --/** -- * @page page_iface_zdwl_output_v1 zdwl_output_v1 -- * @section page_iface_zdwl_output_v1_desc Description -- * -- * Observe and control a dwl output. -- * -- * Events are double-buffered: -- * Clients should cache events and redraw when a dwl_output.done event is sent. -- * -- * Request are not double-buffered: -- * The compositor will update immediately upon request. -- * @section page_iface_zdwl_output_v1_api API -- * See @ref iface_zdwl_output_v1. -- */ --/** -- * @defgroup iface_zdwl_output_v1 The zdwl_output_v1 interface -- * -- * Observe and control a dwl output. -- * -- * Events are double-buffered: -- * Clients should cache events and redraw when a dwl_output.done event is sent. -- * -- * Request are not double-buffered: -- * The compositor will update immediately upon request. -- */ --extern const struct wl_interface zdwl_output_v1_interface; --#endif -- --/** -- * @ingroup iface_zdwl_manager_v1 -- * @struct zdwl_manager_v1_listener -- */ --struct zdwl_manager_v1_listener { -- /** -- * Announces a tag -- * -- * This event is sent after binding. A roundtrip after binding -- * guarantees the client recieved all tags. -- */ -- void (*tag)(void *data, -- struct zdwl_manager_v1 *zdwl_manager_v1, -- const char *name); -- /** -- * Announces a layout -- * -- * This event is sent after binding. A roundtrip after binding -- * guarantees the client recieved all layouts. -- */ -- void (*layout)(void *data, -- struct zdwl_manager_v1 *zdwl_manager_v1, -- const char *name); --}; -- --/** -- * @ingroup iface_zdwl_manager_v1 -- */ --static inline int --zdwl_manager_v1_add_listener(struct zdwl_manager_v1 *zdwl_manager_v1, -- const struct zdwl_manager_v1_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) zdwl_manager_v1, -- (void (**)(void)) listener, data); --} -- --#define ZDWL_MANAGER_V1_RELEASE 0 --#define ZDWL_MANAGER_V1_GET_OUTPUT 1 -- --/** -- * @ingroup iface_zdwl_manager_v1 -- */ --#define ZDWL_MANAGER_V1_TAG_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_manager_v1 -- */ --#define ZDWL_MANAGER_V1_LAYOUT_SINCE_VERSION 1 -- --/** -- * @ingroup iface_zdwl_manager_v1 -- */ --#define ZDWL_MANAGER_V1_RELEASE_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_manager_v1 -- */ --#define ZDWL_MANAGER_V1_GET_OUTPUT_SINCE_VERSION 1 -- --/** @ingroup iface_zdwl_manager_v1 */ --static inline void --zdwl_manager_v1_set_user_data(struct zdwl_manager_v1 *zdwl_manager_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zdwl_manager_v1, user_data); --} -- --/** @ingroup iface_zdwl_manager_v1 */ --static inline void * --zdwl_manager_v1_get_user_data(struct zdwl_manager_v1 *zdwl_manager_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zdwl_manager_v1); --} -- --static inline uint32_t --zdwl_manager_v1_get_version(struct zdwl_manager_v1 *zdwl_manager_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zdwl_manager_v1); --} -- --/** @ingroup iface_zdwl_manager_v1 */ --static inline void --zdwl_manager_v1_destroy(struct zdwl_manager_v1 *zdwl_manager_v1) --{ -- wl_proxy_destroy((struct wl_proxy *) zdwl_manager_v1); --} -- --/** -- * @ingroup iface_zdwl_manager_v1 -- * -- * Indicates that the client will not the dwl_manager object anymore. -- * Objects created through this instance are not affected. -- */ --static inline void --zdwl_manager_v1_release(struct zdwl_manager_v1 *zdwl_manager_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zdwl_manager_v1, -- ZDWL_MANAGER_V1_RELEASE, NULL, wl_proxy_get_version((struct wl_proxy *) zdwl_manager_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_zdwl_manager_v1 -- * -- * Get a dwl_output for the specified wl_output. -- */ --static inline struct zdwl_output_v1 * --zdwl_manager_v1_get_output(struct zdwl_manager_v1 *zdwl_manager_v1, struct wl_output *output) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) zdwl_manager_v1, -- ZDWL_MANAGER_V1_GET_OUTPUT, &zdwl_output_v1_interface, wl_proxy_get_version((struct wl_proxy *) zdwl_manager_v1), 0, NULL, output); -- -- return (struct zdwl_output_v1 *) id; --} -- --#ifndef ZDWL_OUTPUT_V1_TAG_STATE_ENUM --#define ZDWL_OUTPUT_V1_TAG_STATE_ENUM --enum zdwl_output_v1_tag_state { -- /** -- * no state -- */ -- ZDWL_OUTPUT_V1_TAG_STATE_NONE = 0, -- /** -- * tag is active -- */ -- ZDWL_OUTPUT_V1_TAG_STATE_ACTIVE = 1, -- /** -- * tag has at least one urgent client -- */ -- ZDWL_OUTPUT_V1_TAG_STATE_URGENT = 2, --}; --#endif /* ZDWL_OUTPUT_V1_TAG_STATE_ENUM */ -- --/** -- * @ingroup iface_zdwl_output_v1 -- * @struct zdwl_output_v1_listener -- */ --struct zdwl_output_v1_listener { -- /** -- * Toggle client visibilty -- * -- * Indicates the client should hide or show themselves. If the -- * client is visible then hide, if hidden then show. -- */ -- void (*toggle_visibility)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1); -- /** -- * Update the selected output. -- * -- * Indicates if the output is active. Zero is invalid, nonzero is -- * valid. -- */ -- void (*active)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1, -- uint32_t active); -- /** -- * Update the state of a tag. -- * -- * Indicates that a tag has been updated. -- * @param tag Index of the tag -- * @param state The state of the tag. -- * @param clients The number of clients in the tag. -- * @param focused If there is a focused client. Nonzero being valid, zero being invalid. -- */ -- void (*tag)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1, -- uint32_t tag, -- uint32_t state, -- uint32_t clients, -- uint32_t focused); -- /** -- * Update the layout. -- * -- * Indicates a new layout is selected. -- * @param layout Index of the layout. -- */ -- void (*layout)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1, -- uint32_t layout); -- /** -- * Update the title. -- * -- * Indicates the title has changed. -- * @param title The new title name. -- */ -- void (*title)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1, -- const char *title); -- /** -- * The update sequence is done. -- * -- * Indicates that a sequence of status updates have finished and -- * the client should redraw. -- */ -- void (*frame)(void *data, -- struct zdwl_output_v1 *zdwl_output_v1); --}; -- --/** -- * @ingroup iface_zdwl_output_v1 -- */ --static inline int --zdwl_output_v1_add_listener(struct zdwl_output_v1 *zdwl_output_v1, -- const struct zdwl_output_v1_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) zdwl_output_v1, -- (void (**)(void)) listener, data); --} -- --#define ZDWL_OUTPUT_V1_RELEASE 0 --#define ZDWL_OUTPUT_V1_SET_LAYOUT 1 --#define ZDWL_OUTPUT_V1_SET_TAGS 2 --#define ZDWL_OUTPUT_V1_SET_CLIENT_TAGS 3 -- --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_TOGGLE_VISIBILITY_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_ACTIVE_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_TAG_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_LAYOUT_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_TITLE_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_FRAME_SINCE_VERSION 1 -- --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_RELEASE_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_SET_LAYOUT_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_SET_TAGS_SINCE_VERSION 1 --/** -- * @ingroup iface_zdwl_output_v1 -- */ --#define ZDWL_OUTPUT_V1_SET_CLIENT_TAGS_SINCE_VERSION 1 -- --/** @ingroup iface_zdwl_output_v1 */ --static inline void --zdwl_output_v1_set_user_data(struct zdwl_output_v1 *zdwl_output_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zdwl_output_v1, user_data); --} -- --/** @ingroup iface_zdwl_output_v1 */ --static inline void * --zdwl_output_v1_get_user_data(struct zdwl_output_v1 *zdwl_output_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zdwl_output_v1); --} -- --static inline uint32_t --zdwl_output_v1_get_version(struct zdwl_output_v1 *zdwl_output_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zdwl_output_v1); --} -- --/** @ingroup iface_zdwl_output_v1 */ --static inline void --zdwl_output_v1_destroy(struct zdwl_output_v1 *zdwl_output_v1) --{ -- wl_proxy_destroy((struct wl_proxy *) zdwl_output_v1); --} -- --/** -- * @ingroup iface_zdwl_output_v1 -- * -- * Indicates to that the client no longer needs this dwl_output. -- */ --static inline void --zdwl_output_v1_release(struct zdwl_output_v1 *zdwl_output_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zdwl_output_v1, -- ZDWL_OUTPUT_V1_RELEASE, NULL, wl_proxy_get_version((struct wl_proxy *) zdwl_output_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_zdwl_output_v1 -- */ --static inline void --zdwl_output_v1_set_layout(struct zdwl_output_v1 *zdwl_output_v1, uint32_t index) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zdwl_output_v1, -- ZDWL_OUTPUT_V1_SET_LAYOUT, NULL, wl_proxy_get_version((struct wl_proxy *) zdwl_output_v1), 0, index); --} -- --/** -- * @ingroup iface_zdwl_output_v1 -- */ --static inline void --zdwl_output_v1_set_tags(struct zdwl_output_v1 *zdwl_output_v1, uint32_t tagmask, uint32_t toggle_tagset) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zdwl_output_v1, -- ZDWL_OUTPUT_V1_SET_TAGS, NULL, wl_proxy_get_version((struct wl_proxy *) zdwl_output_v1), 0, tagmask, toggle_tagset); --} -- --/** -- * @ingroup iface_zdwl_output_v1 -- * -- * The tags are updated as follows: -- * new_tags = (current_tags AND and_tags) XOR xor_tags -- */ --static inline void --zdwl_output_v1_set_client_tags(struct zdwl_output_v1 *zdwl_output_v1, uint32_t and_tags, uint32_t xor_tags) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zdwl_output_v1, -- ZDWL_OUTPUT_V1_SET_CLIENT_TAGS, NULL, wl_proxy_get_version((struct wl_proxy *) zdwl_output_v1), 0, and_tags, xor_tags); --} -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/dwl-bar-ipc-unstable-v1-protocol.c b/src/dwl-bar-ipc-unstable-v1-protocol.c -deleted file mode 100644 -index c563b6f..0000000 ---- a/src/dwl-bar-ipc-unstable-v1-protocol.c -+++ /dev/null -@@ -1,66 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --#include --#include --#include "wayland-util.h" -- --#ifndef __has_attribute --# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ --#endif -- --#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) --#define WL_PRIVATE __attribute__ ((visibility("hidden"))) --#else --#define WL_PRIVATE --#endif -- --extern const struct wl_interface wl_output_interface; --extern const struct wl_interface zdwl_output_v1_interface; -- --static const struct wl_interface *dwl_bar_ipc_unstable_v1_types[] = { -- NULL, -- NULL, -- NULL, -- NULL, -- &zdwl_output_v1_interface, -- &wl_output_interface, --}; -- --static const struct wl_message zdwl_manager_v1_requests[] = { -- { "release", "", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "get_output", "no", dwl_bar_ipc_unstable_v1_types + 4 }, --}; -- --static const struct wl_message zdwl_manager_v1_events[] = { -- { "tag", "s", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "layout", "s", dwl_bar_ipc_unstable_v1_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface zdwl_manager_v1_interface = { -- "zdwl_manager_v1", 1, -- 2, zdwl_manager_v1_requests, -- 2, zdwl_manager_v1_events, --}; -- --static const struct wl_message zdwl_output_v1_requests[] = { -- { "release", "", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "set_layout", "u", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "set_tags", "uu", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "set_client_tags", "uu", dwl_bar_ipc_unstable_v1_types + 0 }, --}; -- --static const struct wl_message zdwl_output_v1_events[] = { -- { "toggle_visibility", "", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "active", "u", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "tag", "uuuu", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "layout", "u", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "title", "s", dwl_bar_ipc_unstable_v1_types + 0 }, -- { "frame", "", dwl_bar_ipc_unstable_v1_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface zdwl_output_v1_interface = { -- "zdwl_output_v1", 1, -- 4, zdwl_output_v1_requests, -- 6, zdwl_output_v1_events, --}; -- -diff --git a/src/main.c b/src/main.c -index 309368a..f935f5f 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -1,13 +1,11 @@ --#include --#include --#include --#include - #include - #include - #include - #include - #include - -+#include -+#include - #include - #include - #include -@@ -22,14 +20,13 @@ - #include - - #include "bar.h" --#include "cairo.h" - #include "common.h" - #include "config.h" - #include "shm.h" --#include "dwl-bar-ipc-unstable-v1-cliet-protocol.h" --#include "wlr-layer-shell-unstable-v1-client-protocol.h" --#include "xdg-output-unstable-v1-client-protocol.h" --#include "xdg-shell-client-protocol.h" -+#include "dwl-bar-ipc-unstable-v1-protocol.h" -+#include "wlr-layer-shell-unstable-v1-protocol.h" -+#include "xdg-output-unstable-v1-protocol.h" -+#include "xdg-shell-protocol.h" - - /* - * When checking to see if two strings are the same with strcmp, -diff --git a/src/wlr-layer-shell-unstable-v1-client-protocol.h b/src/wlr-layer-shell-unstable-v1-client-protocol.h -deleted file mode 100644 -index 6cbe380..0000000 ---- a/src/wlr-layer-shell-unstable-v1-client-protocol.h -+++ /dev/null -@@ -1,706 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --#ifndef WLR_LAYER_SHELL_UNSTABLE_V1_CLIENT_PROTOCOL_H --#define WLR_LAYER_SHELL_UNSTABLE_V1_CLIENT_PROTOCOL_H -- --#include --#include --#include "wayland-client.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --/** -- * @page page_wlr_layer_shell_unstable_v1 The wlr_layer_shell_unstable_v1 protocol -- * @section page_ifaces_wlr_layer_shell_unstable_v1 Interfaces -- * - @subpage page_iface_zwlr_layer_shell_v1 - create surfaces that are layers of the desktop -- * - @subpage page_iface_zwlr_layer_surface_v1 - layer metadata interface -- * @section page_copyright_wlr_layer_shell_unstable_v1 Copyright -- *
-- *
-- * Copyright © 2017 Drew DeVault
-- *
-- * Permission to use, copy, modify, distribute, and sell this
-- * software and its documentation for any purpose is hereby granted
-- * without fee, provided that the above copyright notice appear in
-- * all copies and that both that copyright notice and this permission
-- * notice appear in supporting documentation, and that the name of
-- * the copyright holders not be used in advertising or publicity
-- * pertaining to distribution of the software without specific,
-- * written prior permission.  The copyright holders make no
-- * representations about the suitability of this software for any
-- * purpose.  It is provided "as is" without express or implied
-- * warranty.
-- *
-- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
-- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-- * THIS SOFTWARE.
-- * 
-- */ --struct wl_output; --struct wl_surface; --struct xdg_popup; --struct zwlr_layer_shell_v1; --struct zwlr_layer_surface_v1; -- --#ifndef ZWLR_LAYER_SHELL_V1_INTERFACE --#define ZWLR_LAYER_SHELL_V1_INTERFACE --/** -- * @page page_iface_zwlr_layer_shell_v1 zwlr_layer_shell_v1 -- * @section page_iface_zwlr_layer_shell_v1_desc Description -- * -- * Clients can use this interface to assign the surface_layer role to -- * wl_surfaces. Such surfaces are assigned to a "layer" of the output and -- * rendered with a defined z-depth respective to each other. They may also be -- * anchored to the edges and corners of a screen and specify input handling -- * semantics. This interface should be suitable for the implementation of -- * many desktop shell components, and a broad number of other applications -- * that interact with the desktop. -- * @section page_iface_zwlr_layer_shell_v1_api API -- * See @ref iface_zwlr_layer_shell_v1. -- */ --/** -- * @defgroup iface_zwlr_layer_shell_v1 The zwlr_layer_shell_v1 interface -- * -- * Clients can use this interface to assign the surface_layer role to -- * wl_surfaces. Such surfaces are assigned to a "layer" of the output and -- * rendered with a defined z-depth respective to each other. They may also be -- * anchored to the edges and corners of a screen and specify input handling -- * semantics. This interface should be suitable for the implementation of -- * many desktop shell components, and a broad number of other applications -- * that interact with the desktop. -- */ --extern const struct wl_interface zwlr_layer_shell_v1_interface; --#endif --#ifndef ZWLR_LAYER_SURFACE_V1_INTERFACE --#define ZWLR_LAYER_SURFACE_V1_INTERFACE --/** -- * @page page_iface_zwlr_layer_surface_v1 zwlr_layer_surface_v1 -- * @section page_iface_zwlr_layer_surface_v1_desc Description -- * -- * An interface that may be implemented by a wl_surface, for surfaces that -- * are designed to be rendered as a layer of a stacked desktop-like -- * environment. -- * -- * Layer surface state (layer, size, anchor, exclusive zone, -- * margin, interactivity) is double-buffered, and will be applied at the -- * time wl_surface.commit of the corresponding wl_surface is called. -- * -- * Attaching a null buffer to a layer surface unmaps it. -- * -- * Unmapping a layer_surface means that the surface cannot be shown by the -- * compositor until it is explicitly mapped again. The layer_surface -- * returns to the state it had right after layer_shell.get_layer_surface. -- * The client can re-map the surface by performing a commit without any -- * buffer attached, waiting for a configure event and handling it as usual. -- * @section page_iface_zwlr_layer_surface_v1_api API -- * See @ref iface_zwlr_layer_surface_v1. -- */ --/** -- * @defgroup iface_zwlr_layer_surface_v1 The zwlr_layer_surface_v1 interface -- * -- * An interface that may be implemented by a wl_surface, for surfaces that -- * are designed to be rendered as a layer of a stacked desktop-like -- * environment. -- * -- * Layer surface state (layer, size, anchor, exclusive zone, -- * margin, interactivity) is double-buffered, and will be applied at the -- * time wl_surface.commit of the corresponding wl_surface is called. -- * -- * Attaching a null buffer to a layer surface unmaps it. -- * -- * Unmapping a layer_surface means that the surface cannot be shown by the -- * compositor until it is explicitly mapped again. The layer_surface -- * returns to the state it had right after layer_shell.get_layer_surface. -- * The client can re-map the surface by performing a commit without any -- * buffer attached, waiting for a configure event and handling it as usual. -- */ --extern const struct wl_interface zwlr_layer_surface_v1_interface; --#endif -- --#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM --#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM --enum zwlr_layer_shell_v1_error { -- /** -- * wl_surface has another role -- */ -- ZWLR_LAYER_SHELL_V1_ERROR_ROLE = 0, -- /** -- * layer value is invalid -- */ -- ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER = 1, -- /** -- * wl_surface has a buffer attached or committed -- */ -- ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED = 2, --}; --#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM */ -- --#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM --#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM --/** -- * @ingroup iface_zwlr_layer_shell_v1 -- * available layers for surfaces -- * -- * These values indicate which layers a surface can be rendered in. They -- * are ordered by z depth, bottom-most first. Traditional shell surfaces -- * will typically be rendered between the bottom and top layers. -- * Fullscreen shell surfaces are typically rendered at the top layer. -- * Multiple surfaces can share a single layer, and ordering within a -- * single layer is undefined. -- */ --enum zwlr_layer_shell_v1_layer { -- ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND = 0, -- ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM = 1, -- ZWLR_LAYER_SHELL_V1_LAYER_TOP = 2, -- ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY = 3, --}; --#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM */ -- --#define ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE 0 --#define ZWLR_LAYER_SHELL_V1_DESTROY 1 -- -- --/** -- * @ingroup iface_zwlr_layer_shell_v1 -- */ --#define ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_shell_v1 -- */ --#define ZWLR_LAYER_SHELL_V1_DESTROY_SINCE_VERSION 3 -- --/** @ingroup iface_zwlr_layer_shell_v1 */ --static inline void --zwlr_layer_shell_v1_set_user_data(struct zwlr_layer_shell_v1 *zwlr_layer_shell_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zwlr_layer_shell_v1, user_data); --} -- --/** @ingroup iface_zwlr_layer_shell_v1 */ --static inline void * --zwlr_layer_shell_v1_get_user_data(struct zwlr_layer_shell_v1 *zwlr_layer_shell_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zwlr_layer_shell_v1); --} -- --static inline uint32_t --zwlr_layer_shell_v1_get_version(struct zwlr_layer_shell_v1 *zwlr_layer_shell_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zwlr_layer_shell_v1); --} -- --/** -- * @ingroup iface_zwlr_layer_shell_v1 -- * -- * Create a layer surface for an existing surface. This assigns the role of -- * layer_surface, or raises a protocol error if another role is already -- * assigned. -- * -- * Creating a layer surface from a wl_surface which has a buffer attached -- * or committed is a client error, and any attempts by a client to attach -- * or manipulate a buffer prior to the first layer_surface.configure call -- * must also be treated as errors. -- * -- * After creating a layer_surface object and setting it up, the client -- * must perform an initial commit without any buffer attached. -- * The compositor will reply with a layer_surface.configure event. -- * The client must acknowledge it and is then allowed to attach a buffer -- * to map the surface. -- * -- * You may pass NULL for output to allow the compositor to decide which -- * output to use. Generally this will be the one that the user most -- * recently interacted with. -- * -- * Clients can specify a namespace that defines the purpose of the layer -- * surface. -- */ --static inline struct zwlr_layer_surface_v1 * --zwlr_layer_shell_v1_get_layer_surface(struct zwlr_layer_shell_v1 *zwlr_layer_shell_v1, struct wl_surface *surface, struct wl_output *output, uint32_t layer, const char *name_space) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_shell_v1, -- ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE, &zwlr_layer_surface_v1_interface, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_shell_v1), 0, NULL, surface, output, layer, name_space); -- -- return (struct zwlr_layer_surface_v1 *) id; --} -- --/** -- * @ingroup iface_zwlr_layer_shell_v1 -- * -- * This request indicates that the client will not use the layer_shell -- * object any more. Objects that have been created through this instance -- * are not affected. -- */ --static inline void --zwlr_layer_shell_v1_destroy(struct zwlr_layer_shell_v1 *zwlr_layer_shell_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_shell_v1, -- ZWLR_LAYER_SHELL_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_shell_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM --#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * types of keyboard interaction possible for a layer shell surface -- * -- * Types of keyboard interaction possible for layer shell surfaces. The -- * rationale for this is twofold: (1) some applications are not interested -- * in keyboard events and not allowing them to be focused can improve the -- * desktop experience; (2) some applications will want to take exclusive -- * keyboard focus. -- */ --enum zwlr_layer_surface_v1_keyboard_interactivity { -- /** -- * no keyboard focus is possible -- * -- * This value indicates that this surface is not interested in -- * keyboard events and the compositor should never assign it the -- * keyboard focus. -- * -- * This is the default value, set for newly created layer shell -- * surfaces. -- * -- * This is useful for e.g. desktop widgets that display information -- * or only have interaction with non-keyboard input devices. -- */ -- ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE = 0, -- /** -- * request exclusive keyboard focus -- * -- * Request exclusive keyboard focus if this surface is above the -- * shell surface layer. -- * -- * For the top and overlay layers, the seat will always give -- * exclusive keyboard focus to the top-most layer which has -- * keyboard interactivity set to exclusive. If this layer contains -- * multiple surfaces with keyboard interactivity set to exclusive, -- * the compositor determines the one receiving keyboard events in -- * an implementation- defined manner. In this case, no guarantee is -- * made when this surface will receive keyboard focus (if ever). -- * -- * For the bottom and background layers, the compositor is allowed -- * to use normal focus semantics. -- * -- * This setting is mainly intended for applications that need to -- * ensure they receive all keyboard events, such as a lock screen -- * or a password prompt. -- */ -- ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE = 1, -- /** -- * request regular keyboard focus semantics -- * -- * This requests the compositor to allow this surface to be -- * focused and unfocused by the user in an implementation-defined -- * manner. The user should be able to unfocus this surface even -- * regardless of the layer it is on. -- * -- * Typically, the compositor will want to use its normal mechanism -- * to manage keyboard focus between layer shell surfaces with this -- * setting and regular toplevels on the desktop layer (e.g. click -- * to focus). Nevertheless, it is possible for a compositor to -- * require a special interaction to focus or unfocus layer shell -- * surfaces (e.g. requiring a click even if focus follows the mouse -- * normally, or providing a keybinding to switch focus between -- * layers). -- * -- * This setting is mainly intended for desktop shell components -- * (e.g. panels) that allow keyboard interaction. Using this option -- * can allow implementing a desktop shell that can be fully usable -- * without the mouse. -- * @since 4 -- */ -- ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND = 2, --}; --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND_SINCE_VERSION 4 --#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM */ -- --#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM --#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM --enum zwlr_layer_surface_v1_error { -- /** -- * provided surface state is invalid -- */ -- ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE = 0, -- /** -- * size is invalid -- */ -- ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE = 1, -- /** -- * anchor bitfield is invalid -- */ -- ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR = 2, -- /** -- * keyboard interactivity is invalid -- */ -- ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY = 3, --}; --#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM */ -- --#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM --#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM --enum zwlr_layer_surface_v1_anchor { -- /** -- * the top edge of the anchor rectangle -- */ -- ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP = 1, -- /** -- * the bottom edge of the anchor rectangle -- */ -- ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM = 2, -- /** -- * the left edge of the anchor rectangle -- */ -- ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT = 4, -- /** -- * the right edge of the anchor rectangle -- */ -- ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT = 8, --}; --#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM */ -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * @struct zwlr_layer_surface_v1_listener -- */ --struct zwlr_layer_surface_v1_listener { -- /** -- * suggest a surface change -- * -- * The configure event asks the client to resize its surface. -- * -- * Clients should arrange their surface for the new states, and -- * then send an ack_configure request with the serial sent in this -- * configure event at some point before committing the new surface. -- * -- * The client is free to dismiss all but the last configure event -- * it received. -- * -- * The width and height arguments specify the size of the window in -- * surface-local coordinates. -- * -- * The size is a hint, in the sense that the client is free to -- * ignore it if it doesn't resize, pick a smaller size (to satisfy -- * aspect ratio or resize in steps of NxM pixels). If the client -- * picks a smaller size and is anchored to two opposite anchors -- * (e.g. 'top' and 'bottom'), the surface will be centered on this -- * axis. -- * -- * If the width or height arguments are zero, it means the client -- * should decide its own window dimension. -- */ -- void (*configure)(void *data, -- struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, -- uint32_t serial, -- uint32_t width, -- uint32_t height); -- /** -- * surface should be closed -- * -- * The closed event is sent by the compositor when the surface -- * will no longer be shown. The output may have been destroyed or -- * the user may have asked for it to be removed. Further changes to -- * the surface will be ignored. The client should destroy the -- * resource after receiving this event, and create a new surface if -- * they so choose. -- */ -- void (*closed)(void *data, -- struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1); --}; -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --static inline int --zwlr_layer_surface_v1_add_listener(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, -- const struct zwlr_layer_surface_v1_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) zwlr_layer_surface_v1, -- (void (**)(void)) listener, data); --} -- --#define ZWLR_LAYER_SURFACE_V1_SET_SIZE 0 --#define ZWLR_LAYER_SURFACE_V1_SET_ANCHOR 1 --#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE 2 --#define ZWLR_LAYER_SURFACE_V1_SET_MARGIN 3 --#define ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY 4 --#define ZWLR_LAYER_SURFACE_V1_GET_POPUP 5 --#define ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE 6 --#define ZWLR_LAYER_SURFACE_V1_DESTROY 7 --#define ZWLR_LAYER_SURFACE_V1_SET_LAYER 8 -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_CONFIGURE_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_CLOSED_SINCE_VERSION 1 -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_SIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_ANCHOR_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_MARGIN_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_GET_POPUP_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- */ --#define ZWLR_LAYER_SURFACE_V1_SET_LAYER_SINCE_VERSION 2 -- --/** @ingroup iface_zwlr_layer_surface_v1 */ --static inline void --zwlr_layer_surface_v1_set_user_data(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zwlr_layer_surface_v1, user_data); --} -- --/** @ingroup iface_zwlr_layer_surface_v1 */ --static inline void * --zwlr_layer_surface_v1_get_user_data(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zwlr_layer_surface_v1); --} -- --static inline uint32_t --zwlr_layer_surface_v1_get_version(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Sets the size of the surface in surface-local coordinates. The -- * compositor will display the surface centered with respect to its -- * anchors. -- * -- * If you pass 0 for either value, the compositor will assign it and -- * inform you of the assignment in the configure event. You must set your -- * anchor to opposite edges in the dimensions you omit; not doing so is a -- * protocol error. Both values are 0 by default. -- * -- * Size is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_size(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, uint32_t width, uint32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, width, height); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Requests that the compositor anchor the surface to the specified edges -- * and corners. If two orthogonal edges are specified (e.g. 'top' and -- * 'left'), then the anchor point will be the intersection of the edges -- * (e.g. the top left corner of the output); otherwise the anchor point -- * will be centered on that edge, or in the center if none is specified. -- * -- * Anchor is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_anchor(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, uint32_t anchor) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_ANCHOR, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, anchor); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Requests that the compositor avoids occluding an area with other -- * surfaces. The compositor's use of this information is -- * implementation-dependent - do not assume that this region will not -- * actually be occluded. -- * -- * A positive value is only meaningful if the surface is anchored to one -- * edge or an edge and both perpendicular edges. If the surface is not -- * anchored, anchored to only two perpendicular edges (a corner), anchored -- * to only two parallel edges or anchored to all edges, a positive value -- * will be treated the same as zero. -- * -- * A positive zone is the distance from the edge in surface-local -- * coordinates to consider exclusive. -- * -- * Surfaces that do not wish to have an exclusive zone may instead specify -- * how they should interact with surfaces that do. If set to zero, the -- * surface indicates that it would like to be moved to avoid occluding -- * surfaces with a positive exclusive zone. If set to -1, the surface -- * indicates that it would not like to be moved to accommodate for other -- * surfaces, and the compositor should extend it all the way to the edges -- * it is anchored to. -- * -- * For example, a panel might set its exclusive zone to 10, so that -- * maximized shell surfaces are not shown on top of it. A notification -- * might set its exclusive zone to 0, so that it is moved to avoid -- * occluding the panel, but shell surfaces are shown underneath it. A -- * wallpaper or lock screen might set their exclusive zone to -1, so that -- * they stretch below or over the panel. -- * -- * The default value is 0. -- * -- * Exclusive zone is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_exclusive_zone(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, int32_t zone) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, zone); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Requests that the surface be placed some distance away from the anchor -- * point on the output, in surface-local coordinates. Setting this value -- * for edges you are not anchored to has no effect. -- * -- * The exclusive zone includes the margin. -- * -- * Margin is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_margin(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, int32_t top, int32_t right, int32_t bottom, int32_t left) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_MARGIN, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, top, right, bottom, left); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Set how keyboard events are delivered to this surface. By default, -- * layer shell surfaces do not receive keyboard events; this request can -- * be used to change this. -- * -- * This setting is inherited by child surfaces set by the get_popup -- * request. -- * -- * Layer surfaces receive pointer, touch, and tablet events normally. If -- * you do not want to receive them, set the input region on your surface -- * to an empty region. -- * -- * Keyboard interactivity is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_keyboard_interactivity(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, uint32_t keyboard_interactivity) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, keyboard_interactivity); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * This assigns an xdg_popup's parent to this layer_surface. This popup -- * should have been created via xdg_surface::get_popup with the parent set -- * to NULL, and this request must be invoked before committing the popup's -- * initial state. -- * -- * See the documentation of xdg_popup for more details about what an -- * xdg_popup is and how it is used. -- */ --static inline void --zwlr_layer_surface_v1_get_popup(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, struct xdg_popup *popup) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_GET_POPUP, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, popup); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * When a configure event is received, if a client commits the -- * surface in response to the configure event, then the client -- * must make an ack_configure request sometime before the commit -- * request, passing along the serial of the configure event. -- * -- * If the client receives multiple configure events before it -- * can respond to one, it only has to ack the last configure event. -- * -- * A client is not required to commit immediately after sending -- * an ack_configure request - it may even ack_configure several times -- * before its next surface commit. -- * -- * A client may send multiple ack_configure requests before committing, but -- * only the last request sent before a commit indicates which configure -- * event the client really is responding to. -- */ --static inline void --zwlr_layer_surface_v1_ack_configure(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, serial); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * This request destroys the layer surface. -- */ --static inline void --zwlr_layer_surface_v1_destroy(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_zwlr_layer_surface_v1 -- * -- * Change the layer that the surface is rendered on. -- * -- * Layer is double-buffered, see wl_surface.commit. -- */ --static inline void --zwlr_layer_surface_v1_set_layer(struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1, uint32_t layer) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zwlr_layer_surface_v1, -- ZWLR_LAYER_SURFACE_V1_SET_LAYER, NULL, wl_proxy_get_version((struct wl_proxy *) zwlr_layer_surface_v1), 0, layer); --} -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/wlr-layer-shell-unstable-v1-protocol.c b/src/wlr-layer-shell-unstable-v1-protocol.c -deleted file mode 100644 -index 31832f4..0000000 ---- a/src/wlr-layer-shell-unstable-v1-protocol.c -+++ /dev/null -@@ -1,93 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --/* -- * Copyright © 2017 Drew DeVault -- * -- * Permission to use, copy, modify, distribute, and sell this -- * software and its documentation for any purpose is hereby granted -- * without fee, provided that the above copyright notice appear in -- * all copies and that both that copyright notice and this permission -- * notice appear in supporting documentation, and that the name of -- * the copyright holders not be used in advertising or publicity -- * pertaining to distribution of the software without specific, -- * written prior permission. The copyright holders make no -- * representations about the suitability of this software for any -- * purpose. It is provided "as is" without express or implied -- * warranty. -- * -- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY -- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN -- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -- * THIS SOFTWARE. -- */ -- --#include --#include --#include "wayland-util.h" -- --#ifndef __has_attribute --# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ --#endif -- --#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) --#define WL_PRIVATE __attribute__ ((visibility("hidden"))) --#else --#define WL_PRIVATE --#endif -- --extern const struct wl_interface wl_output_interface; --extern const struct wl_interface wl_surface_interface; --extern const struct wl_interface xdg_popup_interface; --extern const struct wl_interface zwlr_layer_surface_v1_interface; -- --static const struct wl_interface *wlr_layer_shell_unstable_v1_types[] = { -- NULL, -- NULL, -- NULL, -- NULL, -- &zwlr_layer_surface_v1_interface, -- &wl_surface_interface, -- &wl_output_interface, -- NULL, -- NULL, -- &xdg_popup_interface, --}; -- --static const struct wl_message zwlr_layer_shell_v1_requests[] = { -- { "get_layer_surface", "no?ous", wlr_layer_shell_unstable_v1_types + 4 }, -- { "destroy", "3", wlr_layer_shell_unstable_v1_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface zwlr_layer_shell_v1_interface = { -- "zwlr_layer_shell_v1", 4, -- 2, zwlr_layer_shell_v1_requests, -- 0, NULL, --}; -- --static const struct wl_message zwlr_layer_surface_v1_requests[] = { -- { "set_size", "uu", wlr_layer_shell_unstable_v1_types + 0 }, -- { "set_anchor", "u", wlr_layer_shell_unstable_v1_types + 0 }, -- { "set_exclusive_zone", "i", wlr_layer_shell_unstable_v1_types + 0 }, -- { "set_margin", "iiii", wlr_layer_shell_unstable_v1_types + 0 }, -- { "set_keyboard_interactivity", "u", wlr_layer_shell_unstable_v1_types + 0 }, -- { "get_popup", "o", wlr_layer_shell_unstable_v1_types + 9 }, -- { "ack_configure", "u", wlr_layer_shell_unstable_v1_types + 0 }, -- { "destroy", "", wlr_layer_shell_unstable_v1_types + 0 }, -- { "set_layer", "2u", wlr_layer_shell_unstable_v1_types + 0 }, --}; -- --static const struct wl_message zwlr_layer_surface_v1_events[] = { -- { "configure", "uuu", wlr_layer_shell_unstable_v1_types + 0 }, -- { "closed", "", wlr_layer_shell_unstable_v1_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface zwlr_layer_surface_v1_interface = { -- "zwlr_layer_surface_v1", 4, -- 9, zwlr_layer_surface_v1_requests, -- 2, zwlr_layer_surface_v1_events, --}; -- -diff --git a/src/xdg-output-unstable-v1-client-protocol.h b/src/xdg-output-unstable-v1-client-protocol.h -deleted file mode 100644 -index 0a8466a..0000000 ---- a/src/xdg-output-unstable-v1-client-protocol.h -+++ /dev/null -@@ -1,411 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --#ifndef XDG_OUTPUT_UNSTABLE_V1_CLIENT_PROTOCOL_H --#define XDG_OUTPUT_UNSTABLE_V1_CLIENT_PROTOCOL_H -- --#include --#include --#include "wayland-client.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --/** -- * @page page_xdg_output_unstable_v1 The xdg_output_unstable_v1 protocol -- * Protocol to describe output regions -- * -- * @section page_desc_xdg_output_unstable_v1 Description -- * -- * This protocol aims at describing outputs in a way which is more in line -- * with the concept of an output on desktop oriented systems. -- * -- * Some information are more specific to the concept of an output for -- * a desktop oriented system and may not make sense in other applications, -- * such as IVI systems for example. -- * -- * Typically, the global compositor space on a desktop system is made of -- * a contiguous or overlapping set of rectangular regions. -- * -- * Some of the information provided in this protocol might be identical -- * to their counterparts already available from wl_output, in which case -- * the information provided by this protocol should be preferred to their -- * equivalent in wl_output. The goal is to move the desktop specific -- * concepts (such as output location within the global compositor space, -- * the connector name and types, etc.) out of the core wl_output protocol. -- * -- * Warning! The protocol described in this file is experimental and -- * backward incompatible changes may be made. Backward compatible -- * changes may be added together with the corresponding interface -- * version bump. -- * Backward incompatible changes are done by bumping the version -- * number in the protocol and interface names and resetting the -- * interface version. Once the protocol is to be declared stable, -- * the 'z' prefix and the version number in the protocol and -- * interface names are removed and the interface version number is -- * reset. -- * -- * @section page_ifaces_xdg_output_unstable_v1 Interfaces -- * - @subpage page_iface_zxdg_output_manager_v1 - manage xdg_output objects -- * - @subpage page_iface_zxdg_output_v1 - compositor logical output region -- * @section page_copyright_xdg_output_unstable_v1 Copyright -- *
-- *
-- * Copyright © 2017 Red Hat Inc.
-- *
-- * Permission is hereby granted, free of charge, to any person obtaining a
-- * copy of this software and associated documentation files (the "Software"),
-- * to deal in the Software without restriction, including without limitation
-- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-- * and/or sell copies of the Software, and to permit persons to whom the
-- * Software is furnished to do so, subject to the following conditions:
-- *
-- * The above copyright notice and this permission notice (including the next
-- * paragraph) shall be included in all copies or substantial portions of the
-- * Software.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-- * DEALINGS IN THE SOFTWARE.
-- * 
-- */ --struct wl_output; --struct zxdg_output_manager_v1; --struct zxdg_output_v1; -- --#ifndef ZXDG_OUTPUT_MANAGER_V1_INTERFACE --#define ZXDG_OUTPUT_MANAGER_V1_INTERFACE --/** -- * @page page_iface_zxdg_output_manager_v1 zxdg_output_manager_v1 -- * @section page_iface_zxdg_output_manager_v1_desc Description -- * -- * A global factory interface for xdg_output objects. -- * @section page_iface_zxdg_output_manager_v1_api API -- * See @ref iface_zxdg_output_manager_v1. -- */ --/** -- * @defgroup iface_zxdg_output_manager_v1 The zxdg_output_manager_v1 interface -- * -- * A global factory interface for xdg_output objects. -- */ --extern const struct wl_interface zxdg_output_manager_v1_interface; --#endif --#ifndef ZXDG_OUTPUT_V1_INTERFACE --#define ZXDG_OUTPUT_V1_INTERFACE --/** -- * @page page_iface_zxdg_output_v1 zxdg_output_v1 -- * @section page_iface_zxdg_output_v1_desc Description -- * -- * An xdg_output describes part of the compositor geometry. -- * -- * This typically corresponds to a monitor that displays part of the -- * compositor space. -- * -- * For objects version 3 onwards, after all xdg_output properties have been -- * sent (when the object is created and when properties are updated), a -- * wl_output.done event is sent. This allows changes to the output -- * properties to be seen as atomic, even if they happen via multiple events. -- * @section page_iface_zxdg_output_v1_api API -- * See @ref iface_zxdg_output_v1. -- */ --/** -- * @defgroup iface_zxdg_output_v1 The zxdg_output_v1 interface -- * -- * An xdg_output describes part of the compositor geometry. -- * -- * This typically corresponds to a monitor that displays part of the -- * compositor space. -- * -- * For objects version 3 onwards, after all xdg_output properties have been -- * sent (when the object is created and when properties are updated), a -- * wl_output.done event is sent. This allows changes to the output -- * properties to be seen as atomic, even if they happen via multiple events. -- */ --extern const struct wl_interface zxdg_output_v1_interface; --#endif -- --#define ZXDG_OUTPUT_MANAGER_V1_DESTROY 0 --#define ZXDG_OUTPUT_MANAGER_V1_GET_XDG_OUTPUT 1 -- -- --/** -- * @ingroup iface_zxdg_output_manager_v1 -- */ --#define ZXDG_OUTPUT_MANAGER_V1_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_zxdg_output_manager_v1 -- */ --#define ZXDG_OUTPUT_MANAGER_V1_GET_XDG_OUTPUT_SINCE_VERSION 1 -- --/** @ingroup iface_zxdg_output_manager_v1 */ --static inline void --zxdg_output_manager_v1_set_user_data(struct zxdg_output_manager_v1 *zxdg_output_manager_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zxdg_output_manager_v1, user_data); --} -- --/** @ingroup iface_zxdg_output_manager_v1 */ --static inline void * --zxdg_output_manager_v1_get_user_data(struct zxdg_output_manager_v1 *zxdg_output_manager_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zxdg_output_manager_v1); --} -- --static inline uint32_t --zxdg_output_manager_v1_get_version(struct zxdg_output_manager_v1 *zxdg_output_manager_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zxdg_output_manager_v1); --} -- --/** -- * @ingroup iface_zxdg_output_manager_v1 -- * -- * Using this request a client can tell the server that it is not -- * going to use the xdg_output_manager object anymore. -- * -- * Any objects already created through this instance are not affected. -- */ --static inline void --zxdg_output_manager_v1_destroy(struct zxdg_output_manager_v1 *zxdg_output_manager_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zxdg_output_manager_v1, -- ZXDG_OUTPUT_MANAGER_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_output_manager_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_zxdg_output_manager_v1 -- * -- * This creates a new xdg_output object for the given wl_output. -- */ --static inline struct zxdg_output_v1 * --zxdg_output_manager_v1_get_xdg_output(struct zxdg_output_manager_v1 *zxdg_output_manager_v1, struct wl_output *output) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) zxdg_output_manager_v1, -- ZXDG_OUTPUT_MANAGER_V1_GET_XDG_OUTPUT, &zxdg_output_v1_interface, wl_proxy_get_version((struct wl_proxy *) zxdg_output_manager_v1), 0, NULL, output); -- -- return (struct zxdg_output_v1 *) id; --} -- --/** -- * @ingroup iface_zxdg_output_v1 -- * @struct zxdg_output_v1_listener -- */ --struct zxdg_output_v1_listener { -- /** -- * position of the output within the global compositor space -- * -- * The position event describes the location of the wl_output -- * within the global compositor space. -- * -- * The logical_position event is sent after creating an xdg_output -- * (see xdg_output_manager.get_xdg_output) and whenever the -- * location of the output changes within the global compositor -- * space. -- * @param x x position within the global compositor space -- * @param y y position within the global compositor space -- */ -- void (*logical_position)(void *data, -- struct zxdg_output_v1 *zxdg_output_v1, -- int32_t x, -- int32_t y); -- /** -- * size of the output in the global compositor space -- * -- * The logical_size event describes the size of the output in the -- * global compositor space. -- * -- * For example, a surface without any buffer scale, transformation -- * nor rotation set, with the size matching the logical_size will -- * have the same size as the corresponding output when displayed. -- * -- * Most regular Wayland clients should not pay attention to the -- * logical size and would rather rely on xdg_shell interfaces. -- * -- * Some clients such as Xwayland, however, need this to configure -- * their surfaces in the global compositor space as the compositor -- * may apply a different scale from what is advertised by the -- * output scaling property (to achieve fractional scaling, for -- * example). -- * -- * For example, for a wl_output mode 3840×2160 and a scale factor -- * 2: -- * -- * - A compositor not scaling the surface buffers will advertise a -- * logical size of 3840×2160, -- * -- * - A compositor automatically scaling the surface buffers will -- * advertise a logical size of 1920×1080, -- * -- * - A compositor using a fractional scale of 1.5 will advertise a -- * logical size of 2560×1440. -- * -- * For example, for a wl_output mode 1920×1080 and a 90 degree -- * rotation, the compositor will advertise a logical size of -- * 1080x1920. -- * -- * The logical_size event is sent after creating an xdg_output (see -- * xdg_output_manager.get_xdg_output) and whenever the logical size -- * of the output changes, either as a result of a change in the -- * applied scale or because of a change in the corresponding output -- * mode(see wl_output.mode) or transform (see wl_output.transform). -- * @param width width in global compositor space -- * @param height height in global compositor space -- */ -- void (*logical_size)(void *data, -- struct zxdg_output_v1 *zxdg_output_v1, -- int32_t width, -- int32_t height); -- /** -- * all information about the output have been sent -- * -- * This event is sent after all other properties of an xdg_output -- * have been sent. -- * -- * This allows changes to the xdg_output properties to be seen as -- * atomic, even if they happen via multiple events. -- * -- * For objects version 3 onwards, this event is deprecated. -- * Compositors are not required to send it anymore and must send -- * wl_output.done instead. -- */ -- void (*done)(void *data, -- struct zxdg_output_v1 *zxdg_output_v1); -- /** -- * name of this output -- * -- * Many compositors will assign names to their outputs, show them -- * to the user, allow them to be configured by name, etc. The -- * client may wish to know this name as well to offer the user -- * similar behaviors. -- * -- * The naming convention is compositor defined, but limited to -- * alphanumeric characters and dashes (-). Each name is unique -- * among all wl_output globals, but if a wl_output global is -- * destroyed the same name may be reused later. The names will also -- * remain consistent across sessions with the same hardware and -- * software configuration. -- * -- * Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. -- * However, do not assume that the name is a reflection of an -- * underlying DRM connector, X11 connection, etc. -- * -- * The name event is sent after creating an xdg_output (see -- * xdg_output_manager.get_xdg_output). This event is only sent once -- * per xdg_output, and the name does not change over the lifetime -- * of the wl_output global. -- * @param name output name -- * @since 2 -- */ -- void (*name)(void *data, -- struct zxdg_output_v1 *zxdg_output_v1, -- const char *name); -- /** -- * human-readable description of this output -- * -- * Many compositors can produce human-readable descriptions of -- * their outputs. The client may wish to know this description as -- * well, to communicate the user for various purposes. -- * -- * The description is a UTF-8 string with no convention defined for -- * its contents. Examples might include 'Foocorp 11" Display' or -- * 'Virtual X11 output via :1'. -- * -- * The description event is sent after creating an xdg_output (see -- * xdg_output_manager.get_xdg_output) and whenever the description -- * changes. The description is optional, and may not be sent at -- * all. -- * -- * For objects of version 2 and lower, this event is only sent once -- * per xdg_output, and the description does not change over the -- * lifetime of the wl_output global. -- * @param description output description -- * @since 2 -- */ -- void (*description)(void *data, -- struct zxdg_output_v1 *zxdg_output_v1, -- const char *description); --}; -- --/** -- * @ingroup iface_zxdg_output_v1 -- */ --static inline int --zxdg_output_v1_add_listener(struct zxdg_output_v1 *zxdg_output_v1, -- const struct zxdg_output_v1_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) zxdg_output_v1, -- (void (**)(void)) listener, data); --} -- --#define ZXDG_OUTPUT_V1_DESTROY 0 -- --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_LOGICAL_POSITION_SINCE_VERSION 1 --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_LOGICAL_SIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_DONE_SINCE_VERSION 1 --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_NAME_SINCE_VERSION 2 --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_DESCRIPTION_SINCE_VERSION 2 -- --/** -- * @ingroup iface_zxdg_output_v1 -- */ --#define ZXDG_OUTPUT_V1_DESTROY_SINCE_VERSION 1 -- --/** @ingroup iface_zxdg_output_v1 */ --static inline void --zxdg_output_v1_set_user_data(struct zxdg_output_v1 *zxdg_output_v1, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) zxdg_output_v1, user_data); --} -- --/** @ingroup iface_zxdg_output_v1 */ --static inline void * --zxdg_output_v1_get_user_data(struct zxdg_output_v1 *zxdg_output_v1) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) zxdg_output_v1); --} -- --static inline uint32_t --zxdg_output_v1_get_version(struct zxdg_output_v1 *zxdg_output_v1) --{ -- return wl_proxy_get_version((struct wl_proxy *) zxdg_output_v1); --} -- --/** -- * @ingroup iface_zxdg_output_v1 -- * -- * Using this request a client can tell the server that it is not -- * going to use the xdg_output object anymore. -- */ --static inline void --zxdg_output_v1_destroy(struct zxdg_output_v1 *zxdg_output_v1) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) zxdg_output_v1, -- ZXDG_OUTPUT_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) zxdg_output_v1), WL_MARSHAL_FLAG_DESTROY); --} -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/xdg-output-unstable-v1-protocol.c b/src/xdg-output-unstable-v1-protocol.c -deleted file mode 100644 -index 07dda30..0000000 ---- a/src/xdg-output-unstable-v1-protocol.c -+++ /dev/null -@@ -1,78 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --/* -- * Copyright © 2017 Red Hat Inc. -- * -- * Permission is hereby granted, free of charge, to any person obtaining a -- * copy of this software and associated documentation files (the "Software"), -- * to deal in the Software without restriction, including without limitation -- * the rights to use, copy, modify, merge, publish, distribute, sublicense, -- * and/or sell copies of the Software, and to permit persons to whom the -- * Software is furnished to do so, subject to the following conditions: -- * -- * The above copyright notice and this permission notice (including the next -- * paragraph) shall be included in all copies or substantial portions of the -- * Software. -- * -- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -- * DEALINGS IN THE SOFTWARE. -- */ -- --#include --#include --#include "wayland-util.h" -- --#ifndef __has_attribute --# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ --#endif -- --#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) --#define WL_PRIVATE __attribute__ ((visibility("hidden"))) --#else --#define WL_PRIVATE --#endif -- --extern const struct wl_interface wl_output_interface; --extern const struct wl_interface zxdg_output_v1_interface; -- --static const struct wl_interface *xdg_output_unstable_v1_types[] = { -- NULL, -- NULL, -- &zxdg_output_v1_interface, -- &wl_output_interface, --}; -- --static const struct wl_message zxdg_output_manager_v1_requests[] = { -- { "destroy", "", xdg_output_unstable_v1_types + 0 }, -- { "get_xdg_output", "no", xdg_output_unstable_v1_types + 2 }, --}; -- --WL_PRIVATE const struct wl_interface zxdg_output_manager_v1_interface = { -- "zxdg_output_manager_v1", 3, -- 2, zxdg_output_manager_v1_requests, -- 0, NULL, --}; -- --static const struct wl_message zxdg_output_v1_requests[] = { -- { "destroy", "", xdg_output_unstable_v1_types + 0 }, --}; -- --static const struct wl_message zxdg_output_v1_events[] = { -- { "logical_position", "ii", xdg_output_unstable_v1_types + 0 }, -- { "logical_size", "ii", xdg_output_unstable_v1_types + 0 }, -- { "done", "", xdg_output_unstable_v1_types + 0 }, -- { "name", "2s", xdg_output_unstable_v1_types + 0 }, -- { "description", "2s", xdg_output_unstable_v1_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface zxdg_output_v1_interface = { -- "zxdg_output_v1", 3, -- 1, zxdg_output_v1_requests, -- 5, zxdg_output_v1_events, --}; -- -diff --git a/src/xdg-shell-client-protocol.h b/src/xdg-shell-client-protocol.h -deleted file mode 100644 -index aa14e2e..0000000 ---- a/src/xdg-shell-client-protocol.h -+++ /dev/null -@@ -1,2280 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --#ifndef XDG_SHELL_CLIENT_PROTOCOL_H --#define XDG_SHELL_CLIENT_PROTOCOL_H -- --#include --#include --#include "wayland-client.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --/** -- * @page page_xdg_shell The xdg_shell protocol -- * @section page_ifaces_xdg_shell Interfaces -- * - @subpage page_iface_xdg_wm_base - create desktop-style surfaces -- * - @subpage page_iface_xdg_positioner - child surface positioner -- * - @subpage page_iface_xdg_surface - desktop user interface surface base interface -- * - @subpage page_iface_xdg_toplevel - toplevel surface -- * - @subpage page_iface_xdg_popup - short-lived, popup surfaces for menus -- * @section page_copyright_xdg_shell Copyright -- *
-- *
-- * Copyright © 2008-2013 Kristian Høgsberg
-- * Copyright © 2013      Rafael Antognolli
-- * Copyright © 2013      Jasper St. Pierre
-- * Copyright © 2010-2013 Intel Corporation
-- * Copyright © 2015-2017 Samsung Electronics Co., Ltd
-- * Copyright © 2015-2017 Red Hat Inc.
-- *
-- * Permission is hereby granted, free of charge, to any person obtaining a
-- * copy of this software and associated documentation files (the "Software"),
-- * to deal in the Software without restriction, including without limitation
-- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-- * and/or sell copies of the Software, and to permit persons to whom the
-- * Software is furnished to do so, subject to the following conditions:
-- *
-- * The above copyright notice and this permission notice (including the next
-- * paragraph) shall be included in all copies or substantial portions of the
-- * Software.
-- *
-- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-- * DEALINGS IN THE SOFTWARE.
-- * 
-- */ --struct wl_output; --struct wl_seat; --struct wl_surface; --struct xdg_popup; --struct xdg_positioner; --struct xdg_surface; --struct xdg_toplevel; --struct xdg_wm_base; -- --#ifndef XDG_WM_BASE_INTERFACE --#define XDG_WM_BASE_INTERFACE --/** -- * @page page_iface_xdg_wm_base xdg_wm_base -- * @section page_iface_xdg_wm_base_desc Description -- * -- * The xdg_wm_base interface is exposed as a global object enabling clients -- * to turn their wl_surfaces into windows in a desktop environment. It -- * defines the basic functionality needed for clients and the compositor to -- * create windows that can be dragged, resized, maximized, etc, as well as -- * creating transient windows such as popup menus. -- * @section page_iface_xdg_wm_base_api API -- * See @ref iface_xdg_wm_base. -- */ --/** -- * @defgroup iface_xdg_wm_base The xdg_wm_base interface -- * -- * The xdg_wm_base interface is exposed as a global object enabling clients -- * to turn their wl_surfaces into windows in a desktop environment. It -- * defines the basic functionality needed for clients and the compositor to -- * create windows that can be dragged, resized, maximized, etc, as well as -- * creating transient windows such as popup menus. -- */ --extern const struct wl_interface xdg_wm_base_interface; --#endif --#ifndef XDG_POSITIONER_INTERFACE --#define XDG_POSITIONER_INTERFACE --/** -- * @page page_iface_xdg_positioner xdg_positioner -- * @section page_iface_xdg_positioner_desc Description -- * -- * The xdg_positioner provides a collection of rules for the placement of a -- * child surface relative to a parent surface. Rules can be defined to ensure -- * the child surface remains within the visible area's borders, and to -- * specify how the child surface changes its position, such as sliding along -- * an axis, or flipping around a rectangle. These positioner-created rules are -- * constrained by the requirement that a child surface must intersect with or -- * be at least partially adjacent to its parent surface. -- * -- * See the various requests for details about possible rules. -- * -- * At the time of the request, the compositor makes a copy of the rules -- * specified by the xdg_positioner. Thus, after the request is complete the -- * xdg_positioner object can be destroyed or reused; further changes to the -- * object will have no effect on previous usages. -- * -- * For an xdg_positioner object to be considered complete, it must have a -- * non-zero size set by set_size, and a non-zero anchor rectangle set by -- * set_anchor_rect. Passing an incomplete xdg_positioner object when -- * positioning a surface raises an invalid_positioner error. -- * @section page_iface_xdg_positioner_api API -- * See @ref iface_xdg_positioner. -- */ --/** -- * @defgroup iface_xdg_positioner The xdg_positioner interface -- * -- * The xdg_positioner provides a collection of rules for the placement of a -- * child surface relative to a parent surface. Rules can be defined to ensure -- * the child surface remains within the visible area's borders, and to -- * specify how the child surface changes its position, such as sliding along -- * an axis, or flipping around a rectangle. These positioner-created rules are -- * constrained by the requirement that a child surface must intersect with or -- * be at least partially adjacent to its parent surface. -- * -- * See the various requests for details about possible rules. -- * -- * At the time of the request, the compositor makes a copy of the rules -- * specified by the xdg_positioner. Thus, after the request is complete the -- * xdg_positioner object can be destroyed or reused; further changes to the -- * object will have no effect on previous usages. -- * -- * For an xdg_positioner object to be considered complete, it must have a -- * non-zero size set by set_size, and a non-zero anchor rectangle set by -- * set_anchor_rect. Passing an incomplete xdg_positioner object when -- * positioning a surface raises an invalid_positioner error. -- */ --extern const struct wl_interface xdg_positioner_interface; --#endif --#ifndef XDG_SURFACE_INTERFACE --#define XDG_SURFACE_INTERFACE --/** -- * @page page_iface_xdg_surface xdg_surface -- * @section page_iface_xdg_surface_desc Description -- * -- * An interface that may be implemented by a wl_surface, for -- * implementations that provide a desktop-style user interface. -- * -- * It provides a base set of functionality required to construct user -- * interface elements requiring management by the compositor, such as -- * toplevel windows, menus, etc. The types of functionality are split into -- * xdg_surface roles. -- * -- * Creating an xdg_surface does not set the role for a wl_surface. In order -- * to map an xdg_surface, the client must create a role-specific object -- * using, e.g., get_toplevel, get_popup. The wl_surface for any given -- * xdg_surface can have at most one role, and may not be assigned any role -- * not based on xdg_surface. -- * -- * A role must be assigned before any other requests are made to the -- * xdg_surface object. -- * -- * The client must call wl_surface.commit on the corresponding wl_surface -- * for the xdg_surface state to take effect. -- * -- * Creating an xdg_surface from a wl_surface which has a buffer attached or -- * committed is a client error, and any attempts by a client to attach or -- * manipulate a buffer prior to the first xdg_surface.configure call must -- * also be treated as errors. -- * -- * After creating a role-specific object and setting it up, the client must -- * perform an initial commit without any buffer attached. The compositor -- * will reply with an xdg_surface.configure event. The client must -- * acknowledge it and is then allowed to attach a buffer to map the surface. -- * -- * Mapping an xdg_surface-based role surface is defined as making it -- * possible for the surface to be shown by the compositor. Note that -- * a mapped surface is not guaranteed to be visible once it is mapped. -- * -- * For an xdg_surface to be mapped by the compositor, the following -- * conditions must be met: -- * (1) the client has assigned an xdg_surface-based role to the surface -- * (2) the client has set and committed the xdg_surface state and the -- * role-dependent state to the surface -- * (3) the client has committed a buffer to the surface -- * -- * A newly-unmapped surface is considered to have met condition (1) out -- * of the 3 required conditions for mapping a surface if its role surface -- * has not been destroyed, i.e. the client must perform the initial commit -- * again before attaching a buffer. -- * @section page_iface_xdg_surface_api API -- * See @ref iface_xdg_surface. -- */ --/** -- * @defgroup iface_xdg_surface The xdg_surface interface -- * -- * An interface that may be implemented by a wl_surface, for -- * implementations that provide a desktop-style user interface. -- * -- * It provides a base set of functionality required to construct user -- * interface elements requiring management by the compositor, such as -- * toplevel windows, menus, etc. The types of functionality are split into -- * xdg_surface roles. -- * -- * Creating an xdg_surface does not set the role for a wl_surface. In order -- * to map an xdg_surface, the client must create a role-specific object -- * using, e.g., get_toplevel, get_popup. The wl_surface for any given -- * xdg_surface can have at most one role, and may not be assigned any role -- * not based on xdg_surface. -- * -- * A role must be assigned before any other requests are made to the -- * xdg_surface object. -- * -- * The client must call wl_surface.commit on the corresponding wl_surface -- * for the xdg_surface state to take effect. -- * -- * Creating an xdg_surface from a wl_surface which has a buffer attached or -- * committed is a client error, and any attempts by a client to attach or -- * manipulate a buffer prior to the first xdg_surface.configure call must -- * also be treated as errors. -- * -- * After creating a role-specific object and setting it up, the client must -- * perform an initial commit without any buffer attached. The compositor -- * will reply with an xdg_surface.configure event. The client must -- * acknowledge it and is then allowed to attach a buffer to map the surface. -- * -- * Mapping an xdg_surface-based role surface is defined as making it -- * possible for the surface to be shown by the compositor. Note that -- * a mapped surface is not guaranteed to be visible once it is mapped. -- * -- * For an xdg_surface to be mapped by the compositor, the following -- * conditions must be met: -- * (1) the client has assigned an xdg_surface-based role to the surface -- * (2) the client has set and committed the xdg_surface state and the -- * role-dependent state to the surface -- * (3) the client has committed a buffer to the surface -- * -- * A newly-unmapped surface is considered to have met condition (1) out -- * of the 3 required conditions for mapping a surface if its role surface -- * has not been destroyed, i.e. the client must perform the initial commit -- * again before attaching a buffer. -- */ --extern const struct wl_interface xdg_surface_interface; --#endif --#ifndef XDG_TOPLEVEL_INTERFACE --#define XDG_TOPLEVEL_INTERFACE --/** -- * @page page_iface_xdg_toplevel xdg_toplevel -- * @section page_iface_xdg_toplevel_desc Description -- * -- * This interface defines an xdg_surface role which allows a surface to, -- * among other things, set window-like properties such as maximize, -- * fullscreen, and minimize, set application-specific metadata like title and -- * id, and well as trigger user interactive operations such as interactive -- * resize and move. -- * -- * Unmapping an xdg_toplevel means that the surface cannot be shown -- * by the compositor until it is explicitly mapped again. -- * All active operations (e.g., move, resize) are canceled and all -- * attributes (e.g. title, state, stacking, ...) are discarded for -- * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to -- * the state it had right after xdg_surface.get_toplevel. The client -- * can re-map the toplevel by perfoming a commit without any buffer -- * attached, waiting for a configure event and handling it as usual (see -- * xdg_surface description). -- * -- * Attaching a null buffer to a toplevel unmaps the surface. -- * @section page_iface_xdg_toplevel_api API -- * See @ref iface_xdg_toplevel. -- */ --/** -- * @defgroup iface_xdg_toplevel The xdg_toplevel interface -- * -- * This interface defines an xdg_surface role which allows a surface to, -- * among other things, set window-like properties such as maximize, -- * fullscreen, and minimize, set application-specific metadata like title and -- * id, and well as trigger user interactive operations such as interactive -- * resize and move. -- * -- * Unmapping an xdg_toplevel means that the surface cannot be shown -- * by the compositor until it is explicitly mapped again. -- * All active operations (e.g., move, resize) are canceled and all -- * attributes (e.g. title, state, stacking, ...) are discarded for -- * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to -- * the state it had right after xdg_surface.get_toplevel. The client -- * can re-map the toplevel by perfoming a commit without any buffer -- * attached, waiting for a configure event and handling it as usual (see -- * xdg_surface description). -- * -- * Attaching a null buffer to a toplevel unmaps the surface. -- */ --extern const struct wl_interface xdg_toplevel_interface; --#endif --#ifndef XDG_POPUP_INTERFACE --#define XDG_POPUP_INTERFACE --/** -- * @page page_iface_xdg_popup xdg_popup -- * @section page_iface_xdg_popup_desc Description -- * -- * A popup surface is a short-lived, temporary surface. It can be used to -- * implement for example menus, popovers, tooltips and other similar user -- * interface concepts. -- * -- * A popup can be made to take an explicit grab. See xdg_popup.grab for -- * details. -- * -- * When the popup is dismissed, a popup_done event will be sent out, and at -- * the same time the surface will be unmapped. See the xdg_popup.popup_done -- * event for details. -- * -- * Explicitly destroying the xdg_popup object will also dismiss the popup and -- * unmap the surface. Clients that want to dismiss the popup when another -- * surface of their own is clicked should dismiss the popup using the destroy -- * request. -- * -- * A newly created xdg_popup will be stacked on top of all previously created -- * xdg_popup surfaces associated with the same xdg_toplevel. -- * -- * The parent of an xdg_popup must be mapped (see the xdg_surface -- * description) before the xdg_popup itself. -- * -- * The client must call wl_surface.commit on the corresponding wl_surface -- * for the xdg_popup state to take effect. -- * @section page_iface_xdg_popup_api API -- * See @ref iface_xdg_popup. -- */ --/** -- * @defgroup iface_xdg_popup The xdg_popup interface -- * -- * A popup surface is a short-lived, temporary surface. It can be used to -- * implement for example menus, popovers, tooltips and other similar user -- * interface concepts. -- * -- * A popup can be made to take an explicit grab. See xdg_popup.grab for -- * details. -- * -- * When the popup is dismissed, a popup_done event will be sent out, and at -- * the same time the surface will be unmapped. See the xdg_popup.popup_done -- * event for details. -- * -- * Explicitly destroying the xdg_popup object will also dismiss the popup and -- * unmap the surface. Clients that want to dismiss the popup when another -- * surface of their own is clicked should dismiss the popup using the destroy -- * request. -- * -- * A newly created xdg_popup will be stacked on top of all previously created -- * xdg_popup surfaces associated with the same xdg_toplevel. -- * -- * The parent of an xdg_popup must be mapped (see the xdg_surface -- * description) before the xdg_popup itself. -- * -- * The client must call wl_surface.commit on the corresponding wl_surface -- * for the xdg_popup state to take effect. -- */ --extern const struct wl_interface xdg_popup_interface; --#endif -- --#ifndef XDG_WM_BASE_ERROR_ENUM --#define XDG_WM_BASE_ERROR_ENUM --enum xdg_wm_base_error { -- /** -- * given wl_surface has another role -- */ -- XDG_WM_BASE_ERROR_ROLE = 0, -- /** -- * xdg_wm_base was destroyed before children -- */ -- XDG_WM_BASE_ERROR_DEFUNCT_SURFACES = 1, -- /** -- * the client tried to map or destroy a non-topmost popup -- */ -- XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP = 2, -- /** -- * the client specified an invalid popup parent surface -- */ -- XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT = 3, -- /** -- * the client provided an invalid surface state -- */ -- XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE = 4, -- /** -- * the client provided an invalid positioner -- */ -- XDG_WM_BASE_ERROR_INVALID_POSITIONER = 5, -- /** -- * the client didn’t respond to a ping event in time -- */ -- XDG_WM_BASE_ERROR_UNRESPONSIVE = 6, --}; --#endif /* XDG_WM_BASE_ERROR_ENUM */ -- --/** -- * @ingroup iface_xdg_wm_base -- * @struct xdg_wm_base_listener -- */ --struct xdg_wm_base_listener { -- /** -- * check if the client is alive -- * -- * The ping event asks the client if it's still alive. Pass the -- * serial specified in the event back to the compositor by sending -- * a "pong" request back with the specified serial. See -- * xdg_wm_base.pong. -- * -- * Compositors can use this to determine if the client is still -- * alive. It's unspecified what will happen if the client doesn't -- * respond to the ping request, or in what timeframe. Clients -- * should try to respond in a reasonable amount of time. The -- * “unresponsive” error is provided for compositors that wish -- * to disconnect unresponsive clients. -- * -- * A compositor is free to ping in any way it wants, but a client -- * must always respond to any xdg_wm_base object it created. -- * @param serial pass this to the pong request -- */ -- void (*ping)(void *data, -- struct xdg_wm_base *xdg_wm_base, -- uint32_t serial); --}; -- --/** -- * @ingroup iface_xdg_wm_base -- */ --static inline int --xdg_wm_base_add_listener(struct xdg_wm_base *xdg_wm_base, -- const struct xdg_wm_base_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) xdg_wm_base, -- (void (**)(void)) listener, data); --} -- --#define XDG_WM_BASE_DESTROY 0 --#define XDG_WM_BASE_CREATE_POSITIONER 1 --#define XDG_WM_BASE_GET_XDG_SURFACE 2 --#define XDG_WM_BASE_PONG 3 -- --/** -- * @ingroup iface_xdg_wm_base -- */ --#define XDG_WM_BASE_PING_SINCE_VERSION 1 -- --/** -- * @ingroup iface_xdg_wm_base -- */ --#define XDG_WM_BASE_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_wm_base -- */ --#define XDG_WM_BASE_CREATE_POSITIONER_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_wm_base -- */ --#define XDG_WM_BASE_GET_XDG_SURFACE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_wm_base -- */ --#define XDG_WM_BASE_PONG_SINCE_VERSION 1 -- --/** @ingroup iface_xdg_wm_base */ --static inline void --xdg_wm_base_set_user_data(struct xdg_wm_base *xdg_wm_base, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) xdg_wm_base, user_data); --} -- --/** @ingroup iface_xdg_wm_base */ --static inline void * --xdg_wm_base_get_user_data(struct xdg_wm_base *xdg_wm_base) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) xdg_wm_base); --} -- --static inline uint32_t --xdg_wm_base_get_version(struct xdg_wm_base *xdg_wm_base) --{ -- return wl_proxy_get_version((struct wl_proxy *) xdg_wm_base); --} -- --/** -- * @ingroup iface_xdg_wm_base -- * -- * Destroy this xdg_wm_base object. -- * -- * Destroying a bound xdg_wm_base object while there are surfaces -- * still alive created by this xdg_wm_base object instance is illegal -- * and will result in a defunct_surfaces error. -- */ --static inline void --xdg_wm_base_destroy(struct xdg_wm_base *xdg_wm_base) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, -- XDG_WM_BASE_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_xdg_wm_base -- * -- * Create a positioner object. A positioner object is used to position -- * surfaces relative to some parent surface. See the interface description -- * and xdg_surface.get_popup for details. -- */ --static inline struct xdg_positioner * --xdg_wm_base_create_positioner(struct xdg_wm_base *xdg_wm_base) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, -- XDG_WM_BASE_CREATE_POSITIONER, &xdg_positioner_interface, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, NULL); -- -- return (struct xdg_positioner *) id; --} -- --/** -- * @ingroup iface_xdg_wm_base -- * -- * This creates an xdg_surface for the given surface. While xdg_surface -- * itself is not a role, the corresponding surface may only be assigned -- * a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is -- * illegal to create an xdg_surface for a wl_surface which already has an -- * assigned role and this will result in a role error. -- * -- * This creates an xdg_surface for the given surface. An xdg_surface is -- * used as basis to define a role to a given surface, such as xdg_toplevel -- * or xdg_popup. It also manages functionality shared between xdg_surface -- * based surface roles. -- * -- * See the documentation of xdg_surface for more details about what an -- * xdg_surface is and how it is used. -- */ --static inline struct xdg_surface * --xdg_wm_base_get_xdg_surface(struct xdg_wm_base *xdg_wm_base, struct wl_surface *surface) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, -- XDG_WM_BASE_GET_XDG_SURFACE, &xdg_surface_interface, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, NULL, surface); -- -- return (struct xdg_surface *) id; --} -- --/** -- * @ingroup iface_xdg_wm_base -- * -- * A client must respond to a ping event with a pong request or -- * the client may be deemed unresponsive. See xdg_wm_base.ping -- * and xdg_wm_base.error.unresponsive. -- */ --static inline void --xdg_wm_base_pong(struct xdg_wm_base *xdg_wm_base, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, -- XDG_WM_BASE_PONG, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, serial); --} -- --#ifndef XDG_POSITIONER_ERROR_ENUM --#define XDG_POSITIONER_ERROR_ENUM --enum xdg_positioner_error { -- /** -- * invalid input provided -- */ -- XDG_POSITIONER_ERROR_INVALID_INPUT = 0, --}; --#endif /* XDG_POSITIONER_ERROR_ENUM */ -- --#ifndef XDG_POSITIONER_ANCHOR_ENUM --#define XDG_POSITIONER_ANCHOR_ENUM --enum xdg_positioner_anchor { -- XDG_POSITIONER_ANCHOR_NONE = 0, -- XDG_POSITIONER_ANCHOR_TOP = 1, -- XDG_POSITIONER_ANCHOR_BOTTOM = 2, -- XDG_POSITIONER_ANCHOR_LEFT = 3, -- XDG_POSITIONER_ANCHOR_RIGHT = 4, -- XDG_POSITIONER_ANCHOR_TOP_LEFT = 5, -- XDG_POSITIONER_ANCHOR_BOTTOM_LEFT = 6, -- XDG_POSITIONER_ANCHOR_TOP_RIGHT = 7, -- XDG_POSITIONER_ANCHOR_BOTTOM_RIGHT = 8, --}; --#endif /* XDG_POSITIONER_ANCHOR_ENUM */ -- --#ifndef XDG_POSITIONER_GRAVITY_ENUM --#define XDG_POSITIONER_GRAVITY_ENUM --enum xdg_positioner_gravity { -- XDG_POSITIONER_GRAVITY_NONE = 0, -- XDG_POSITIONER_GRAVITY_TOP = 1, -- XDG_POSITIONER_GRAVITY_BOTTOM = 2, -- XDG_POSITIONER_GRAVITY_LEFT = 3, -- XDG_POSITIONER_GRAVITY_RIGHT = 4, -- XDG_POSITIONER_GRAVITY_TOP_LEFT = 5, -- XDG_POSITIONER_GRAVITY_BOTTOM_LEFT = 6, -- XDG_POSITIONER_GRAVITY_TOP_RIGHT = 7, -- XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT = 8, --}; --#endif /* XDG_POSITIONER_GRAVITY_ENUM */ -- --#ifndef XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM --#define XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM --/** -- * @ingroup iface_xdg_positioner -- * constraint adjustments -- * -- * The constraint adjustment value define ways the compositor will adjust -- * the position of the surface, if the unadjusted position would result -- * in the surface being partly constrained. -- * -- * Whether a surface is considered 'constrained' is left to the compositor -- * to determine. For example, the surface may be partly outside the -- * compositor's defined 'work area', thus necessitating the child surface's -- * position be adjusted until it is entirely inside the work area. -- * -- * The adjustments can be combined, according to a defined precedence: 1) -- * Flip, 2) Slide, 3) Resize. -- */ --enum xdg_positioner_constraint_adjustment { -- /** -- * don't move the child surface when constrained -- * -- * Don't alter the surface position even if it is constrained on -- * some axis, for example partially outside the edge of an output. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE = 0, -- /** -- * move along the x axis until unconstrained -- * -- * Slide the surface along the x axis until it is no longer -- * constrained. -- * -- * First try to slide towards the direction of the gravity on the x -- * axis until either the edge in the opposite direction of the -- * gravity is unconstrained or the edge in the direction of the -- * gravity is constrained. -- * -- * Then try to slide towards the opposite direction of the gravity -- * on the x axis until either the edge in the direction of the -- * gravity is unconstrained or the edge in the opposite direction -- * of the gravity is constrained. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1, -- /** -- * move along the y axis until unconstrained -- * -- * Slide the surface along the y axis until it is no longer -- * constrained. -- * -- * First try to slide towards the direction of the gravity on the y -- * axis until either the edge in the opposite direction of the -- * gravity is unconstrained or the edge in the direction of the -- * gravity is constrained. -- * -- * Then try to slide towards the opposite direction of the gravity -- * on the y axis until either the edge in the direction of the -- * gravity is unconstrained or the edge in the opposite direction -- * of the gravity is constrained. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 2, -- /** -- * invert the anchor and gravity on the x axis -- * -- * Invert the anchor and gravity on the x axis if the surface is -- * constrained on the x axis. For example, if the left edge of the -- * surface is constrained, the gravity is 'left' and the anchor is -- * 'left', change the gravity to 'right' and the anchor to 'right'. -- * -- * If the adjusted position also ends up being constrained, the -- * resulting position of the flip_x adjustment will be the one -- * before the adjustment. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X = 4, -- /** -- * invert the anchor and gravity on the y axis -- * -- * Invert the anchor and gravity on the y axis if the surface is -- * constrained on the y axis. For example, if the bottom edge of -- * the surface is constrained, the gravity is 'bottom' and the -- * anchor is 'bottom', change the gravity to 'top' and the anchor -- * to 'top'. -- * -- * The adjusted position is calculated given the original anchor -- * rectangle and offset, but with the new flipped anchor and -- * gravity values. -- * -- * If the adjusted position also ends up being constrained, the -- * resulting position of the flip_y adjustment will be the one -- * before the adjustment. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y = 8, -- /** -- * horizontally resize the surface -- * -- * Resize the surface horizontally so that it is completely -- * unconstrained. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X = 16, -- /** -- * vertically resize the surface -- * -- * Resize the surface vertically so that it is completely -- * unconstrained. -- */ -- XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 32, --}; --#endif /* XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM */ -- --#define XDG_POSITIONER_DESTROY 0 --#define XDG_POSITIONER_SET_SIZE 1 --#define XDG_POSITIONER_SET_ANCHOR_RECT 2 --#define XDG_POSITIONER_SET_ANCHOR 3 --#define XDG_POSITIONER_SET_GRAVITY 4 --#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT 5 --#define XDG_POSITIONER_SET_OFFSET 6 --#define XDG_POSITIONER_SET_REACTIVE 7 --#define XDG_POSITIONER_SET_PARENT_SIZE 8 --#define XDG_POSITIONER_SET_PARENT_CONFIGURE 9 -- -- --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_SIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_ANCHOR_RECT_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_ANCHOR_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_GRAVITY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_OFFSET_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_REACTIVE_SINCE_VERSION 3 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_PARENT_SIZE_SINCE_VERSION 3 --/** -- * @ingroup iface_xdg_positioner -- */ --#define XDG_POSITIONER_SET_PARENT_CONFIGURE_SINCE_VERSION 3 -- --/** @ingroup iface_xdg_positioner */ --static inline void --xdg_positioner_set_user_data(struct xdg_positioner *xdg_positioner, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) xdg_positioner, user_data); --} -- --/** @ingroup iface_xdg_positioner */ --static inline void * --xdg_positioner_get_user_data(struct xdg_positioner *xdg_positioner) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) xdg_positioner); --} -- --static inline uint32_t --xdg_positioner_get_version(struct xdg_positioner *xdg_positioner) --{ -- return wl_proxy_get_version((struct wl_proxy *) xdg_positioner); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Notify the compositor that the xdg_positioner will no longer be used. -- */ --static inline void --xdg_positioner_destroy(struct xdg_positioner *xdg_positioner) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Set the size of the surface that is to be positioned with the positioner -- * object. The size is in surface-local coordinates and corresponds to the -- * window geometry. See xdg_surface.set_window_geometry. -- * -- * If a zero or negative size is set the invalid_input error is raised. -- */ --static inline void --xdg_positioner_set_size(struct xdg_positioner *xdg_positioner, int32_t width, int32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, width, height); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Specify the anchor rectangle within the parent surface that the child -- * surface will be placed relative to. The rectangle is relative to the -- * window geometry as defined by xdg_surface.set_window_geometry of the -- * parent surface. -- * -- * When the xdg_positioner object is used to position a child surface, the -- * anchor rectangle may not extend outside the window geometry of the -- * positioned child's parent surface. -- * -- * If a negative size is set the invalid_input error is raised. -- */ --static inline void --xdg_positioner_set_anchor_rect(struct xdg_positioner *xdg_positioner, int32_t x, int32_t y, int32_t width, int32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_ANCHOR_RECT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, x, y, width, height); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Defines the anchor point for the anchor rectangle. The specified anchor -- * is used derive an anchor point that the child surface will be -- * positioned relative to. If a corner anchor is set (e.g. 'top_left' or -- * 'bottom_right'), the anchor point will be at the specified corner; -- * otherwise, the derived anchor point will be centered on the specified -- * edge, or in the center of the anchor rectangle if no edge is specified. -- */ --static inline void --xdg_positioner_set_anchor(struct xdg_positioner *xdg_positioner, uint32_t anchor) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_ANCHOR, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, anchor); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Defines in what direction a surface should be positioned, relative to -- * the anchor point of the parent surface. If a corner gravity is -- * specified (e.g. 'bottom_right' or 'top_left'), then the child surface -- * will be placed towards the specified gravity; otherwise, the child -- * surface will be centered over the anchor point on any axis that had no -- * gravity specified. If the gravity is not in the ‘gravity’ enum, an -- * invalid_input error is raised. -- */ --static inline void --xdg_positioner_set_gravity(struct xdg_positioner *xdg_positioner, uint32_t gravity) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_GRAVITY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, gravity); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Specify how the window should be positioned if the originally intended -- * position caused the surface to be constrained, meaning at least -- * partially outside positioning boundaries set by the compositor. The -- * adjustment is set by constructing a bitmask describing the adjustment to -- * be made when the surface is constrained on that axis. -- * -- * If no bit for one axis is set, the compositor will assume that the child -- * surface should not change its position on that axis when constrained. -- * -- * If more than one bit for one axis is set, the order of how adjustments -- * are applied is specified in the corresponding adjustment descriptions. -- * -- * The default adjustment is none. -- */ --static inline void --xdg_positioner_set_constraint_adjustment(struct xdg_positioner *xdg_positioner, uint32_t constraint_adjustment) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, constraint_adjustment); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Specify the surface position offset relative to the position of the -- * anchor on the anchor rectangle and the anchor on the surface. For -- * example if the anchor of the anchor rectangle is at (x, y), the surface -- * has the gravity bottom|right, and the offset is (ox, oy), the calculated -- * surface position will be (x + ox, y + oy). The offset position of the -- * surface is the one used for constraint testing. See -- * set_constraint_adjustment. -- * -- * An example use case is placing a popup menu on top of a user interface -- * element, while aligning the user interface element of the parent surface -- * with some user interface element placed somewhere in the popup surface. -- */ --static inline void --xdg_positioner_set_offset(struct xdg_positioner *xdg_positioner, int32_t x, int32_t y) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_OFFSET, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, x, y); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * When set reactive, the surface is reconstrained if the conditions used -- * for constraining changed, e.g. the parent window moved. -- * -- * If the conditions changed and the popup was reconstrained, an -- * xdg_popup.configure event is sent with updated geometry, followed by an -- * xdg_surface.configure event. -- */ --static inline void --xdg_positioner_set_reactive(struct xdg_positioner *xdg_positioner) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_REACTIVE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Set the parent window geometry the compositor should use when -- * positioning the popup. The compositor may use this information to -- * determine the future state the popup should be constrained using. If -- * this doesn't match the dimension of the parent the popup is eventually -- * positioned against, the behavior is undefined. -- * -- * The arguments are given in the surface-local coordinate space. -- */ --static inline void --xdg_positioner_set_parent_size(struct xdg_positioner *xdg_positioner, int32_t parent_width, int32_t parent_height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_PARENT_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, parent_width, parent_height); --} -- --/** -- * @ingroup iface_xdg_positioner -- * -- * Set the serial of an xdg_surface.configure event this positioner will be -- * used in response to. The compositor may use this information together -- * with set_parent_size to determine what future state the popup should be -- * constrained using. -- */ --static inline void --xdg_positioner_set_parent_configure(struct xdg_positioner *xdg_positioner, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, -- XDG_POSITIONER_SET_PARENT_CONFIGURE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, serial); --} -- --#ifndef XDG_SURFACE_ERROR_ENUM --#define XDG_SURFACE_ERROR_ENUM --enum xdg_surface_error { -- /** -- * Surface was not fully constructed -- */ -- XDG_SURFACE_ERROR_NOT_CONSTRUCTED = 1, -- /** -- * Surface was already constructed -- */ -- XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED = 2, -- /** -- * Attaching a buffer to an unconfigured surface -- */ -- XDG_SURFACE_ERROR_UNCONFIGURED_BUFFER = 3, -- /** -- * Invalid serial number when acking a configure event -- */ -- XDG_SURFACE_ERROR_INVALID_SERIAL = 4, -- /** -- * Width or height was zero or negative -- */ -- XDG_SURFACE_ERROR_INVALID_SIZE = 5, -- /** -- * Surface was destroyed before its role object -- */ -- XDG_SURFACE_ERROR_DEFUNCT_ROLE_OBJECT = 6, --}; --#endif /* XDG_SURFACE_ERROR_ENUM */ -- --/** -- * @ingroup iface_xdg_surface -- * @struct xdg_surface_listener -- */ --struct xdg_surface_listener { -- /** -- * suggest a surface change -- * -- * The configure event marks the end of a configure sequence. A -- * configure sequence is a set of one or more events configuring -- * the state of the xdg_surface, including the final -- * xdg_surface.configure event. -- * -- * Where applicable, xdg_surface surface roles will during a -- * configure sequence extend this event as a latched state sent as -- * events before the xdg_surface.configure event. Such events -- * should be considered to make up a set of atomically applied -- * configuration states, where the xdg_surface.configure commits -- * the accumulated state. -- * -- * Clients should arrange their surface for the new states, and -- * then send an ack_configure request with the serial sent in this -- * configure event at some point before committing the new surface. -- * -- * If the client receives multiple configure events before it can -- * respond to one, it is free to discard all but the last event it -- * received. -- * @param serial serial of the configure event -- */ -- void (*configure)(void *data, -- struct xdg_surface *xdg_surface, -- uint32_t serial); --}; -- --/** -- * @ingroup iface_xdg_surface -- */ --static inline int --xdg_surface_add_listener(struct xdg_surface *xdg_surface, -- const struct xdg_surface_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) xdg_surface, -- (void (**)(void)) listener, data); --} -- --#define XDG_SURFACE_DESTROY 0 --#define XDG_SURFACE_GET_TOPLEVEL 1 --#define XDG_SURFACE_GET_POPUP 2 --#define XDG_SURFACE_SET_WINDOW_GEOMETRY 3 --#define XDG_SURFACE_ACK_CONFIGURE 4 -- --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 -- --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_GET_TOPLEVEL_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_GET_POPUP_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_surface -- */ --#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 -- --/** @ingroup iface_xdg_surface */ --static inline void --xdg_surface_set_user_data(struct xdg_surface *xdg_surface, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) xdg_surface, user_data); --} -- --/** @ingroup iface_xdg_surface */ --static inline void * --xdg_surface_get_user_data(struct xdg_surface *xdg_surface) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) xdg_surface); --} -- --static inline uint32_t --xdg_surface_get_version(struct xdg_surface *xdg_surface) --{ -- return wl_proxy_get_version((struct wl_proxy *) xdg_surface); --} -- --/** -- * @ingroup iface_xdg_surface -- * -- * Destroy the xdg_surface object. An xdg_surface must only be destroyed -- * after its role object has been destroyed, otherwise -- * a defunct_role_object error is raised. -- */ --static inline void --xdg_surface_destroy(struct xdg_surface *xdg_surface) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, -- XDG_SURFACE_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_xdg_surface -- * -- * This creates an xdg_toplevel object for the given xdg_surface and gives -- * the associated wl_surface the xdg_toplevel role. -- * -- * See the documentation of xdg_toplevel for more details about what an -- * xdg_toplevel is and how it is used. -- */ --static inline struct xdg_toplevel * --xdg_surface_get_toplevel(struct xdg_surface *xdg_surface) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, -- XDG_SURFACE_GET_TOPLEVEL, &xdg_toplevel_interface, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, NULL); -- -- return (struct xdg_toplevel *) id; --} -- --/** -- * @ingroup iface_xdg_surface -- * -- * This creates an xdg_popup object for the given xdg_surface and gives -- * the associated wl_surface the xdg_popup role. -- * -- * If null is passed as a parent, a parent surface must be specified using -- * some other protocol, before committing the initial state. -- * -- * See the documentation of xdg_popup for more details about what an -- * xdg_popup is and how it is used. -- */ --static inline struct xdg_popup * --xdg_surface_get_popup(struct xdg_surface *xdg_surface, struct xdg_surface *parent, struct xdg_positioner *positioner) --{ -- struct wl_proxy *id; -- -- id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, -- XDG_SURFACE_GET_POPUP, &xdg_popup_interface, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, NULL, parent, positioner); -- -- return (struct xdg_popup *) id; --} -- --/** -- * @ingroup iface_xdg_surface -- * -- * The window geometry of a surface is its "visible bounds" from the -- * user's perspective. Client-side decorations often have invisible -- * portions like drop-shadows which should be ignored for the -- * purposes of aligning, placing and constraining windows. -- * -- * The window geometry is double buffered, and will be applied at the -- * time wl_surface.commit of the corresponding wl_surface is called. -- * -- * When maintaining a position, the compositor should treat the (x, y) -- * coordinate of the window geometry as the top left corner of the window. -- * A client changing the (x, y) window geometry coordinate should in -- * general not alter the position of the window. -- * -- * Once the window geometry of the surface is set, it is not possible to -- * unset it, and it will remain the same until set_window_geometry is -- * called again, even if a new subsurface or buffer is attached. -- * -- * If never set, the value is the full bounds of the surface, -- * including any subsurfaces. This updates dynamically on every -- * commit. This unset is meant for extremely simple clients. -- * -- * The arguments are given in the surface-local coordinate space of -- * the wl_surface associated with this xdg_surface. -- * -- * The width and height must be greater than zero. Setting an invalid size -- * will raise an invalid_size error. When applied, the effective window -- * geometry will be the set window geometry clamped to the bounding -- * rectangle of the combined geometry of the surface of the xdg_surface and -- * the associated subsurfaces. -- */ --static inline void --xdg_surface_set_window_geometry(struct xdg_surface *xdg_surface, int32_t x, int32_t y, int32_t width, int32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, -- XDG_SURFACE_SET_WINDOW_GEOMETRY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, x, y, width, height); --} -- --/** -- * @ingroup iface_xdg_surface -- * -- * When a configure event is received, if a client commits the -- * surface in response to the configure event, then the client -- * must make an ack_configure request sometime before the commit -- * request, passing along the serial of the configure event. -- * -- * For instance, for toplevel surfaces the compositor might use this -- * information to move a surface to the top left only when the client has -- * drawn itself for the maximized or fullscreen state. -- * -- * If the client receives multiple configure events before it -- * can respond to one, it only has to ack the last configure event. -- * Acking a configure event that was never sent raises an invalid_serial -- * error. -- * -- * A client is not required to commit immediately after sending -- * an ack_configure request - it may even ack_configure several times -- * before its next surface commit. -- * -- * A client may send multiple ack_configure requests before committing, but -- * only the last request sent before a commit indicates which configure -- * event the client really is responding to. -- * -- * Sending an ack_configure request consumes the serial number sent with -- * the request, as well as serial numbers sent by all configure events -- * sent on this xdg_surface prior to the configure event referenced by -- * the committed serial. -- * -- * It is an error to issue multiple ack_configure requests referencing a -- * serial from the same configure event, or to issue an ack_configure -- * request referencing a serial from a configure event issued before the -- * event identified by the last ack_configure request for the same -- * xdg_surface. Doing so will raise an invalid_serial error. -- */ --static inline void --xdg_surface_ack_configure(struct xdg_surface *xdg_surface, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, -- XDG_SURFACE_ACK_CONFIGURE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, serial); --} -- --#ifndef XDG_TOPLEVEL_ERROR_ENUM --#define XDG_TOPLEVEL_ERROR_ENUM --enum xdg_toplevel_error { -- /** -- * provided value is not a valid variant of the resize_edge enum -- */ -- XDG_TOPLEVEL_ERROR_INVALID_RESIZE_EDGE = 0, -- /** -- * invalid parent toplevel -- */ -- XDG_TOPLEVEL_ERROR_INVALID_PARENT = 1, -- /** -- * client provided an invalid min or max size -- */ -- XDG_TOPLEVEL_ERROR_INVALID_SIZE = 2, --}; --#endif /* XDG_TOPLEVEL_ERROR_ENUM */ -- --#ifndef XDG_TOPLEVEL_RESIZE_EDGE_ENUM --#define XDG_TOPLEVEL_RESIZE_EDGE_ENUM --/** -- * @ingroup iface_xdg_toplevel -- * edge values for resizing -- * -- * These values are used to indicate which edge of a surface -- * is being dragged in a resize operation. -- */ --enum xdg_toplevel_resize_edge { -- XDG_TOPLEVEL_RESIZE_EDGE_NONE = 0, -- XDG_TOPLEVEL_RESIZE_EDGE_TOP = 1, -- XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM = 2, -- XDG_TOPLEVEL_RESIZE_EDGE_LEFT = 4, -- XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT = 5, -- XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT = 6, -- XDG_TOPLEVEL_RESIZE_EDGE_RIGHT = 8, -- XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT = 9, -- XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT = 10, --}; --#endif /* XDG_TOPLEVEL_RESIZE_EDGE_ENUM */ -- --#ifndef XDG_TOPLEVEL_STATE_ENUM --#define XDG_TOPLEVEL_STATE_ENUM --/** -- * @ingroup iface_xdg_toplevel -- * types of state on the surface -- * -- * The different state values used on the surface. This is designed for -- * state values like maximized, fullscreen. It is paired with the -- * configure event to ensure that both the client and the compositor -- * setting the state can be synchronized. -- * -- * States set in this way are double-buffered. They will get applied on -- * the next commit. -- */ --enum xdg_toplevel_state { -- /** -- * the surface is maximized -- * the surface is maximized -- * -- * The surface is maximized. The window geometry specified in the -- * configure event must be obeyed by the client. -- * -- * The client should draw without shadow or other decoration -- * outside of the window geometry. -- */ -- XDG_TOPLEVEL_STATE_MAXIMIZED = 1, -- /** -- * the surface is fullscreen -- * the surface is fullscreen -- * -- * The surface is fullscreen. The window geometry specified in -- * the configure event is a maximum; the client cannot resize -- * beyond it. For a surface to cover the whole fullscreened area, -- * the geometry dimensions must be obeyed by the client. For more -- * details, see xdg_toplevel.set_fullscreen. -- */ -- XDG_TOPLEVEL_STATE_FULLSCREEN = 2, -- /** -- * the surface is being resized -- * the surface is being resized -- * -- * The surface is being resized. The window geometry specified in -- * the configure event is a maximum; the client cannot resize -- * beyond it. Clients that have aspect ratio or cell sizing -- * configuration can use a smaller size, however. -- */ -- XDG_TOPLEVEL_STATE_RESIZING = 3, -- /** -- * the surface is now activated -- * the surface is now activated -- * -- * Client window decorations should be painted as if the window -- * is active. Do not assume this means that the window actually has -- * keyboard or pointer focus. -- */ -- XDG_TOPLEVEL_STATE_ACTIVATED = 4, -- /** -- * the surface’s left edge is tiled -- * -- * The window is currently in a tiled layout and the left edge is -- * considered to be adjacent to another part of the tiling grid. -- * @since 2 -- */ -- XDG_TOPLEVEL_STATE_TILED_LEFT = 5, -- /** -- * the surface’s right edge is tiled -- * -- * The window is currently in a tiled layout and the right edge -- * is considered to be adjacent to another part of the tiling grid. -- * @since 2 -- */ -- XDG_TOPLEVEL_STATE_TILED_RIGHT = 6, -- /** -- * the surface’s top edge is tiled -- * -- * The window is currently in a tiled layout and the top edge is -- * considered to be adjacent to another part of the tiling grid. -- * @since 2 -- */ -- XDG_TOPLEVEL_STATE_TILED_TOP = 7, -- /** -- * the surface’s bottom edge is tiled -- * -- * The window is currently in a tiled layout and the bottom edge -- * is considered to be adjacent to another part of the tiling grid. -- * @since 2 -- */ -- XDG_TOPLEVEL_STATE_TILED_BOTTOM = 8, --}; --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_STATE_TILED_LEFT_SINCE_VERSION 2 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION 2 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_STATE_TILED_TOP_SINCE_VERSION 2 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_STATE_TILED_BOTTOM_SINCE_VERSION 2 --#endif /* XDG_TOPLEVEL_STATE_ENUM */ -- --#ifndef XDG_TOPLEVEL_WM_CAPABILITIES_ENUM --#define XDG_TOPLEVEL_WM_CAPABILITIES_ENUM --enum xdg_toplevel_wm_capabilities { -- /** -- * show_window_menu is available -- */ -- XDG_TOPLEVEL_WM_CAPABILITIES_WINDOW_MENU = 1, -- /** -- * set_maximized and unset_maximized are available -- */ -- XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE = 2, -- /** -- * set_fullscreen and unset_fullscreen are available -- */ -- XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN = 3, -- /** -- * set_minimized is available -- */ -- XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE = 4, --}; --#endif /* XDG_TOPLEVEL_WM_CAPABILITIES_ENUM */ -- --/** -- * @ingroup iface_xdg_toplevel -- * @struct xdg_toplevel_listener -- */ --struct xdg_toplevel_listener { -- /** -- * suggest a surface change -- * -- * This configure event asks the client to resize its toplevel -- * surface or to change its state. The configured state should not -- * be applied immediately. See xdg_surface.configure for details. -- * -- * The width and height arguments specify a hint to the window -- * about how its surface should be resized in window geometry -- * coordinates. See set_window_geometry. -- * -- * If the width or height arguments are zero, it means the client -- * should decide its own window dimension. This may happen when the -- * compositor needs to configure the state of the surface but -- * doesn't have any information about any previous or expected -- * dimension. -- * -- * The states listed in the event specify how the width/height -- * arguments should be interpreted, and possibly how it should be -- * drawn. -- * -- * Clients must send an ack_configure in response to this event. -- * See xdg_surface.configure and xdg_surface.ack_configure for -- * details. -- */ -- void (*configure)(void *data, -- struct xdg_toplevel *xdg_toplevel, -- int32_t width, -- int32_t height, -- struct wl_array *states); -- /** -- * surface wants to be closed -- * -- * The close event is sent by the compositor when the user wants -- * the surface to be closed. This should be equivalent to the user -- * clicking the close button in client-side decorations, if your -- * application has any. -- * -- * This is only a request that the user intends to close the -- * window. The client may choose to ignore this request, or show a -- * dialog to ask the user to save their data, etc. -- */ -- void (*close)(void *data, -- struct xdg_toplevel *xdg_toplevel); -- /** -- * recommended window geometry bounds -- * -- * The configure_bounds event may be sent prior to a -- * xdg_toplevel.configure event to communicate the bounds a window -- * geometry size is recommended to constrain to. -- * -- * The passed width and height are in surface coordinate space. If -- * width and height are 0, it means bounds is unknown and -- * equivalent to as if no configure_bounds event was ever sent for -- * this surface. -- * -- * The bounds can for example correspond to the size of a monitor -- * excluding any panels or other shell components, so that a -- * surface isn't created in a way that it cannot fit. -- * -- * The bounds may change at any point, and in such a case, a new -- * xdg_toplevel.configure_bounds will be sent, followed by -- * xdg_toplevel.configure and xdg_surface.configure. -- * @since 4 -- */ -- void (*configure_bounds)(void *data, -- struct xdg_toplevel *xdg_toplevel, -- int32_t width, -- int32_t height); -- /** -- * compositor capabilities -- * -- * This event advertises the capabilities supported by the -- * compositor. If a capability isn't supported, clients should hide -- * or disable the UI elements that expose this functionality. For -- * instance, if the compositor doesn't advertise support for -- * minimized toplevels, a button triggering the set_minimized -- * request should not be displayed. -- * -- * The compositor will ignore requests it doesn't support. For -- * instance, a compositor which doesn't advertise support for -- * minimized will ignore set_minimized requests. -- * -- * Compositors must send this event once before the first -- * xdg_surface.configure event. When the capabilities change, -- * compositors must send this event again and then send an -- * xdg_surface.configure event. -- * -- * The configured state should not be applied immediately. See -- * xdg_surface.configure for details. -- * -- * The capabilities are sent as an array of 32-bit unsigned -- * integers in native endianness. -- * @param capabilities array of 32-bit capabilities -- * @since 5 -- */ -- void (*wm_capabilities)(void *data, -- struct xdg_toplevel *xdg_toplevel, -- struct wl_array *capabilities); --}; -- --/** -- * @ingroup iface_xdg_toplevel -- */ --static inline int --xdg_toplevel_add_listener(struct xdg_toplevel *xdg_toplevel, -- const struct xdg_toplevel_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) xdg_toplevel, -- (void (**)(void)) listener, data); --} -- --#define XDG_TOPLEVEL_DESTROY 0 --#define XDG_TOPLEVEL_SET_PARENT 1 --#define XDG_TOPLEVEL_SET_TITLE 2 --#define XDG_TOPLEVEL_SET_APP_ID 3 --#define XDG_TOPLEVEL_SHOW_WINDOW_MENU 4 --#define XDG_TOPLEVEL_MOVE 5 --#define XDG_TOPLEVEL_RESIZE 6 --#define XDG_TOPLEVEL_SET_MAX_SIZE 7 --#define XDG_TOPLEVEL_SET_MIN_SIZE 8 --#define XDG_TOPLEVEL_SET_MAXIMIZED 9 --#define XDG_TOPLEVEL_UNSET_MAXIMIZED 10 --#define XDG_TOPLEVEL_SET_FULLSCREEN 11 --#define XDG_TOPLEVEL_UNSET_FULLSCREEN 12 --#define XDG_TOPLEVEL_SET_MINIMIZED 13 -- --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_CONFIGURE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_CLOSE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION 4 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION 5 -- --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_PARENT_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_TITLE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_APP_ID_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SHOW_WINDOW_MENU_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_MOVE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_RESIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_MAX_SIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_MIN_SIZE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_MAXIMIZED_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_UNSET_MAXIMIZED_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_FULLSCREEN_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_UNSET_FULLSCREEN_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_toplevel -- */ --#define XDG_TOPLEVEL_SET_MINIMIZED_SINCE_VERSION 1 -- --/** @ingroup iface_xdg_toplevel */ --static inline void --xdg_toplevel_set_user_data(struct xdg_toplevel *xdg_toplevel, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) xdg_toplevel, user_data); --} -- --/** @ingroup iface_xdg_toplevel */ --static inline void * --xdg_toplevel_get_user_data(struct xdg_toplevel *xdg_toplevel) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) xdg_toplevel); --} -- --static inline uint32_t --xdg_toplevel_get_version(struct xdg_toplevel *xdg_toplevel) --{ -- return wl_proxy_get_version((struct wl_proxy *) xdg_toplevel); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * This request destroys the role surface and unmaps the surface; -- * see "Unmapping" behavior in interface section for details. -- */ --static inline void --xdg_toplevel_destroy(struct xdg_toplevel *xdg_toplevel) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Set the "parent" of this surface. This surface should be stacked -- * above the parent surface and all other ancestor surfaces. -- * -- * Parent surfaces should be set on dialogs, toolboxes, or other -- * "auxiliary" surfaces, so that the parent is raised when the dialog -- * is raised. -- * -- * Setting a null parent for a child surface unsets its parent. Setting -- * a null parent for a surface which currently has no parent is a no-op. -- * -- * Only mapped surfaces can have child surfaces. Setting a parent which -- * is not mapped is equivalent to setting a null parent. If a surface -- * becomes unmapped, its children's parent is set to the parent of -- * the now-unmapped surface. If the now-unmapped surface has no parent, -- * its children's parent is unset. If the now-unmapped surface becomes -- * mapped again, its parent-child relationship is not restored. -- * -- * The parent toplevel must not be one of the child toplevel's -- * descendants, and the parent must be different from the child toplevel, -- * otherwise the invalid_parent protocol error is raised. -- */ --static inline void --xdg_toplevel_set_parent(struct xdg_toplevel *xdg_toplevel, struct xdg_toplevel *parent) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_PARENT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, parent); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Set a short title for the surface. -- * -- * This string may be used to identify the surface in a task bar, -- * window list, or other user interface elements provided by the -- * compositor. -- * -- * The string must be encoded in UTF-8. -- */ --static inline void --xdg_toplevel_set_title(struct xdg_toplevel *xdg_toplevel, const char *title) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_TITLE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, title); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Set an application identifier for the surface. -- * -- * The app ID identifies the general class of applications to which -- * the surface belongs. The compositor can use this to group multiple -- * surfaces together, or to determine how to launch a new application. -- * -- * For D-Bus activatable applications, the app ID is used as the D-Bus -- * service name. -- * -- * The compositor shell will try to group application surfaces together -- * by their app ID. As a best practice, it is suggested to select app -- * ID's that match the basename of the application's .desktop file. -- * For example, "org.freedesktop.FooViewer" where the .desktop file is -- * "org.freedesktop.FooViewer.desktop". -- * -- * Like other properties, a set_app_id request can be sent after the -- * xdg_toplevel has been mapped to update the property. -- * -- * See the desktop-entry specification [0] for more details on -- * application identifiers and how they relate to well-known D-Bus -- * names and .desktop files. -- * -- * [0] https://standards.freedesktop.org/desktop-entry-spec/ -- */ --static inline void --xdg_toplevel_set_app_id(struct xdg_toplevel *xdg_toplevel, const char *app_id) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_APP_ID, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, app_id); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Clients implementing client-side decorations might want to show -- * a context menu when right-clicking on the decorations, giving the -- * user a menu that they can use to maximize or minimize the window. -- * -- * This request asks the compositor to pop up such a window menu at -- * the given position, relative to the local surface coordinates of -- * the parent surface. There are no guarantees as to what menu items -- * the window menu contains, or even if a window menu will be drawn -- * at all. -- * -- * This request must be used in response to some sort of user action -- * like a button press, key press, or touch down event. -- */ --static inline void --xdg_toplevel_show_window_menu(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SHOW_WINDOW_MENU, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial, x, y); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Start an interactive, user-driven move of the surface. -- * -- * This request must be used in response to some sort of user action -- * like a button press, key press, or touch down event. The passed -- * serial is used to determine the type of interactive move (touch, -- * pointer, etc). -- * -- * The server may ignore move requests depending on the state of -- * the surface (e.g. fullscreen or maximized), or if the passed serial -- * is no longer valid. -- * -- * If triggered, the surface will lose the focus of the device -- * (wl_pointer, wl_touch, etc) used for the move. It is up to the -- * compositor to visually indicate that the move is taking place, such as -- * updating a pointer cursor, during the move. There is no guarantee -- * that the device focus will return when the move is completed. -- */ --static inline void --xdg_toplevel_move(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_MOVE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Start a user-driven, interactive resize of the surface. -- * -- * This request must be used in response to some sort of user action -- * like a button press, key press, or touch down event. The passed -- * serial is used to determine the type of interactive resize (touch, -- * pointer, etc). -- * -- * The server may ignore resize requests depending on the state of -- * the surface (e.g. fullscreen or maximized). -- * -- * If triggered, the client will receive configure events with the -- * "resize" state enum value and the expected sizes. See the "resize" -- * enum value for more details about what is required. The client -- * must also acknowledge configure events using "ack_configure". After -- * the resize is completed, the client will receive another "configure" -- * event without the resize state. -- * -- * If triggered, the surface also will lose the focus of the device -- * (wl_pointer, wl_touch, etc) used for the resize. It is up to the -- * compositor to visually indicate that the resize is taking place, -- * such as updating a pointer cursor, during the resize. There is no -- * guarantee that the device focus will return when the resize is -- * completed. -- * -- * The edges parameter specifies how the surface should be resized, and -- * is one of the values of the resize_edge enum. Values not matching -- * a variant of the enum will cause a protocol error. The compositor -- * may use this information to update the surface position for example -- * when dragging the top left corner. The compositor may also use -- * this information to adapt its behavior, e.g. choose an appropriate -- * cursor image. -- */ --static inline void --xdg_toplevel_resize(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial, uint32_t edges) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_RESIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial, edges); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Set a maximum size for the window. -- * -- * The client can specify a maximum size so that the compositor does -- * not try to configure the window beyond this size. -- * -- * The width and height arguments are in window geometry coordinates. -- * See xdg_surface.set_window_geometry. -- * -- * Values set in this way are double-buffered. They will get applied -- * on the next commit. -- * -- * The compositor can use this information to allow or disallow -- * different states like maximize or fullscreen and draw accurate -- * animations. -- * -- * Similarly, a tiling window manager may use this information to -- * place and resize client windows in a more effective way. -- * -- * The client should not rely on the compositor to obey the maximum -- * size. The compositor may decide to ignore the values set by the -- * client and request a larger size. -- * -- * If never set, or a value of zero in the request, means that the -- * client has no expected maximum size in the given dimension. -- * As a result, a client wishing to reset the maximum size -- * to an unspecified state can use zero for width and height in the -- * request. -- * -- * Requesting a maximum size to be smaller than the minimum size of -- * a surface is illegal and will result in an invalid_size error. -- * -- * The width and height must be greater than or equal to zero. Using -- * strictly negative values for width or height will result in a -- * invalid_size error. -- */ --static inline void --xdg_toplevel_set_max_size(struct xdg_toplevel *xdg_toplevel, int32_t width, int32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_MAX_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, width, height); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Set a minimum size for the window. -- * -- * The client can specify a minimum size so that the compositor does -- * not try to configure the window below this size. -- * -- * The width and height arguments are in window geometry coordinates. -- * See xdg_surface.set_window_geometry. -- * -- * Values set in this way are double-buffered. They will get applied -- * on the next commit. -- * -- * The compositor can use this information to allow or disallow -- * different states like maximize or fullscreen and draw accurate -- * animations. -- * -- * Similarly, a tiling window manager may use this information to -- * place and resize client windows in a more effective way. -- * -- * The client should not rely on the compositor to obey the minimum -- * size. The compositor may decide to ignore the values set by the -- * client and request a smaller size. -- * -- * If never set, or a value of zero in the request, means that the -- * client has no expected minimum size in the given dimension. -- * As a result, a client wishing to reset the minimum size -- * to an unspecified state can use zero for width and height in the -- * request. -- * -- * Requesting a minimum size to be larger than the maximum size of -- * a surface is illegal and will result in an invalid_size error. -- * -- * The width and height must be greater than or equal to zero. Using -- * strictly negative values for width and height will result in a -- * invalid_size error. -- */ --static inline void --xdg_toplevel_set_min_size(struct xdg_toplevel *xdg_toplevel, int32_t width, int32_t height) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_MIN_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, width, height); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Maximize the surface. -- * -- * After requesting that the surface should be maximized, the compositor -- * will respond by emitting a configure event. Whether this configure -- * actually sets the window maximized is subject to compositor policies. -- * The client must then update its content, drawing in the configured -- * state. The client must also acknowledge the configure when committing -- * the new content (see ack_configure). -- * -- * It is up to the compositor to decide how and where to maximize the -- * surface, for example which output and what region of the screen should -- * be used. -- * -- * If the surface was already maximized, the compositor will still emit -- * a configure event with the "maximized" state. -- * -- * If the surface is in a fullscreen state, this request has no direct -- * effect. It may alter the state the surface is returned to when -- * unmaximized unless overridden by the compositor. -- */ --static inline void --xdg_toplevel_set_maximized(struct xdg_toplevel *xdg_toplevel) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_MAXIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Unmaximize the surface. -- * -- * After requesting that the surface should be unmaximized, the compositor -- * will respond by emitting a configure event. Whether this actually -- * un-maximizes the window is subject to compositor policies. -- * If available and applicable, the compositor will include the window -- * geometry dimensions the window had prior to being maximized in the -- * configure event. The client must then update its content, drawing it in -- * the configured state. The client must also acknowledge the configure -- * when committing the new content (see ack_configure). -- * -- * It is up to the compositor to position the surface after it was -- * unmaximized; usually the position the surface had before maximizing, if -- * applicable. -- * -- * If the surface was already not maximized, the compositor will still -- * emit a configure event without the "maximized" state. -- * -- * If the surface is in a fullscreen state, this request has no direct -- * effect. It may alter the state the surface is returned to when -- * unmaximized unless overridden by the compositor. -- */ --static inline void --xdg_toplevel_unset_maximized(struct xdg_toplevel *xdg_toplevel) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_UNSET_MAXIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Make the surface fullscreen. -- * -- * After requesting that the surface should be fullscreened, the -- * compositor will respond by emitting a configure event. Whether the -- * client is actually put into a fullscreen state is subject to compositor -- * policies. The client must also acknowledge the configure when -- * committing the new content (see ack_configure). -- * -- * The output passed by the request indicates the client's preference as -- * to which display it should be set fullscreen on. If this value is NULL, -- * it's up to the compositor to choose which display will be used to map -- * this surface. -- * -- * If the surface doesn't cover the whole output, the compositor will -- * position the surface in the center of the output and compensate with -- * with border fill covering the rest of the output. The content of the -- * border fill is undefined, but should be assumed to be in some way that -- * attempts to blend into the surrounding area (e.g. solid black). -- * -- * If the fullscreened surface is not opaque, the compositor must make -- * sure that other screen content not part of the same surface tree (made -- * up of subsurfaces, popups or similarly coupled surfaces) are not -- * visible below the fullscreened surface. -- */ --static inline void --xdg_toplevel_set_fullscreen(struct xdg_toplevel *xdg_toplevel, struct wl_output *output) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_FULLSCREEN, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, output); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Make the surface no longer fullscreen. -- * -- * After requesting that the surface should be unfullscreened, the -- * compositor will respond by emitting a configure event. -- * Whether this actually removes the fullscreen state of the client is -- * subject to compositor policies. -- * -- * Making a surface unfullscreen sets states for the surface based on the following: -- * * the state(s) it may have had before becoming fullscreen -- * * any state(s) decided by the compositor -- * * any state(s) requested by the client while the surface was fullscreen -- * -- * The compositor may include the previous window geometry dimensions in -- * the configure event, if applicable. -- * -- * The client must also acknowledge the configure when committing the new -- * content (see ack_configure). -- */ --static inline void --xdg_toplevel_unset_fullscreen(struct xdg_toplevel *xdg_toplevel) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_UNSET_FULLSCREEN, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); --} -- --/** -- * @ingroup iface_xdg_toplevel -- * -- * Request that the compositor minimize your surface. There is no -- * way to know if the surface is currently minimized, nor is there -- * any way to unset minimization on this surface. -- * -- * If you are looking to throttle redrawing when minimized, please -- * instead use the wl_surface.frame event for this, as this will -- * also work with live previews on windows in Alt-Tab, Expose or -- * similar compositor features. -- */ --static inline void --xdg_toplevel_set_minimized(struct xdg_toplevel *xdg_toplevel) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, -- XDG_TOPLEVEL_SET_MINIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); --} -- --#ifndef XDG_POPUP_ERROR_ENUM --#define XDG_POPUP_ERROR_ENUM --enum xdg_popup_error { -- /** -- * tried to grab after being mapped -- */ -- XDG_POPUP_ERROR_INVALID_GRAB = 0, --}; --#endif /* XDG_POPUP_ERROR_ENUM */ -- --/** -- * @ingroup iface_xdg_popup -- * @struct xdg_popup_listener -- */ --struct xdg_popup_listener { -- /** -- * configure the popup surface -- * -- * This event asks the popup surface to configure itself given -- * the configuration. The configured state should not be applied -- * immediately. See xdg_surface.configure for details. -- * -- * The x and y arguments represent the position the popup was -- * placed at given the xdg_positioner rule, relative to the upper -- * left corner of the window geometry of the parent surface. -- * -- * For version 2 or older, the configure event for an xdg_popup is -- * only ever sent once for the initial configuration. Starting with -- * version 3, it may be sent again if the popup is setup with an -- * xdg_positioner with set_reactive requested, or in response to -- * xdg_popup.reposition requests. -- * @param x x position relative to parent surface window geometry -- * @param y y position relative to parent surface window geometry -- * @param width window geometry width -- * @param height window geometry height -- */ -- void (*configure)(void *data, -- struct xdg_popup *xdg_popup, -- int32_t x, -- int32_t y, -- int32_t width, -- int32_t height); -- /** -- * popup interaction is done -- * -- * The popup_done event is sent out when a popup is dismissed by -- * the compositor. The client should destroy the xdg_popup object -- * at this point. -- */ -- void (*popup_done)(void *data, -- struct xdg_popup *xdg_popup); -- /** -- * signal the completion of a repositioned request -- * -- * The repositioned event is sent as part of a popup -- * configuration sequence, together with xdg_popup.configure and -- * lastly xdg_surface.configure to notify the completion of a -- * reposition request. -- * -- * The repositioned event is to notify about the completion of a -- * xdg_popup.reposition request. The token argument is the token -- * passed in the xdg_popup.reposition request. -- * -- * Immediately after this event is emitted, xdg_popup.configure and -- * xdg_surface.configure will be sent with the updated size and -- * position, as well as a new configure serial. -- * -- * The client should optionally update the content of the popup, -- * but must acknowledge the new popup configuration for the new -- * position to take effect. See xdg_surface.ack_configure for -- * details. -- * @param token reposition request token -- * @since 3 -- */ -- void (*repositioned)(void *data, -- struct xdg_popup *xdg_popup, -- uint32_t token); --}; -- --/** -- * @ingroup iface_xdg_popup -- */ --static inline int --xdg_popup_add_listener(struct xdg_popup *xdg_popup, -- const struct xdg_popup_listener *listener, void *data) --{ -- return wl_proxy_add_listener((struct wl_proxy *) xdg_popup, -- (void (**)(void)) listener, data); --} -- --#define XDG_POPUP_DESTROY 0 --#define XDG_POPUP_GRAB 1 --#define XDG_POPUP_REPOSITION 2 -- --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_CONFIGURE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_REPOSITIONED_SINCE_VERSION 3 -- --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_DESTROY_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_GRAB_SINCE_VERSION 1 --/** -- * @ingroup iface_xdg_popup -- */ --#define XDG_POPUP_REPOSITION_SINCE_VERSION 3 -- --/** @ingroup iface_xdg_popup */ --static inline void --xdg_popup_set_user_data(struct xdg_popup *xdg_popup, void *user_data) --{ -- wl_proxy_set_user_data((struct wl_proxy *) xdg_popup, user_data); --} -- --/** @ingroup iface_xdg_popup */ --static inline void * --xdg_popup_get_user_data(struct xdg_popup *xdg_popup) --{ -- return wl_proxy_get_user_data((struct wl_proxy *) xdg_popup); --} -- --static inline uint32_t --xdg_popup_get_version(struct xdg_popup *xdg_popup) --{ -- return wl_proxy_get_version((struct wl_proxy *) xdg_popup); --} -- --/** -- * @ingroup iface_xdg_popup -- * -- * This destroys the popup. Explicitly destroying the xdg_popup -- * object will also dismiss the popup, and unmap the surface. -- * -- * If this xdg_popup is not the "topmost" popup, a protocol error -- * will be sent. -- */ --static inline void --xdg_popup_destroy(struct xdg_popup *xdg_popup) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, -- XDG_POPUP_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), WL_MARSHAL_FLAG_DESTROY); --} -- --/** -- * @ingroup iface_xdg_popup -- * -- * This request makes the created popup take an explicit grab. An explicit -- * grab will be dismissed when the user dismisses the popup, or when the -- * client destroys the xdg_popup. This can be done by the user clicking -- * outside the surface, using the keyboard, or even locking the screen -- * through closing the lid or a timeout. -- * -- * If the compositor denies the grab, the popup will be immediately -- * dismissed. -- * -- * This request must be used in response to some sort of user action like a -- * button press, key press, or touch down event. The serial number of the -- * event should be passed as 'serial'. -- * -- * The parent of a grabbing popup must either be an xdg_toplevel surface or -- * another xdg_popup with an explicit grab. If the parent is another -- * xdg_popup it means that the popups are nested, with this popup now being -- * the topmost popup. -- * -- * Nested popups must be destroyed in the reverse order they were created -- * in, e.g. the only popup you are allowed to destroy at all times is the -- * topmost one. -- * -- * When compositors choose to dismiss a popup, they may dismiss every -- * nested grabbing popup as well. When a compositor dismisses popups, it -- * will follow the same dismissing order as required from the client. -- * -- * If the topmost grabbing popup is destroyed, the grab will be returned to -- * the parent of the popup, if that parent previously had an explicit grab. -- * -- * If the parent is a grabbing popup which has already been dismissed, this -- * popup will be immediately dismissed. If the parent is a popup that did -- * not take an explicit grab, an error will be raised. -- * -- * During a popup grab, the client owning the grab will receive pointer -- * and touch events for all their surfaces as normal (similar to an -- * "owner-events" grab in X11 parlance), while the top most grabbing popup -- * will always have keyboard focus. -- */ --static inline void --xdg_popup_grab(struct xdg_popup *xdg_popup, struct wl_seat *seat, uint32_t serial) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, -- XDG_POPUP_GRAB, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), 0, seat, serial); --} -- --/** -- * @ingroup iface_xdg_popup -- * -- * Reposition an already-mapped popup. The popup will be placed given the -- * details in the passed xdg_positioner object, and a -- * xdg_popup.repositioned followed by xdg_popup.configure and -- * xdg_surface.configure will be emitted in response. Any parameters set -- * by the previous positioner will be discarded. -- * -- * The passed token will be sent in the corresponding -- * xdg_popup.repositioned event. The new popup position will not take -- * effect until the corresponding configure event is acknowledged by the -- * client. See xdg_popup.repositioned for details. The token itself is -- * opaque, and has no other special meaning. -- * -- * If multiple reposition requests are sent, the compositor may skip all -- * but the last one. -- * -- * If the popup is repositioned in response to a configure event for its -- * parent, the client should send an xdg_positioner.set_parent_configure -- * and possibly an xdg_positioner.set_parent_size request to allow the -- * compositor to properly constrain the popup. -- * -- * If the popup is repositioned together with a parent that is being -- * resized, but not in response to a configure event, the client should -- * send an xdg_positioner.set_parent_size request. -- */ --static inline void --xdg_popup_reposition(struct xdg_popup *xdg_popup, struct xdg_positioner *positioner, uint32_t token) --{ -- wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, -- XDG_POPUP_REPOSITION, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), 0, positioner, token); --} -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/src/xdg-shell-protocol.c b/src/xdg-shell-protocol.c -deleted file mode 100644 -index d2fde49..0000000 ---- a/src/xdg-shell-protocol.c -+++ /dev/null -@@ -1,183 +0,0 @@ --/* Generated by wayland-scanner 1.21.0 */ -- --/* -- * Copyright © 2008-2013 Kristian Høgsberg -- * Copyright © 2013 Rafael Antognolli -- * Copyright © 2013 Jasper St. Pierre -- * Copyright © 2010-2013 Intel Corporation -- * Copyright © 2015-2017 Samsung Electronics Co., Ltd -- * Copyright © 2015-2017 Red Hat Inc. -- * -- * Permission is hereby granted, free of charge, to any person obtaining a -- * copy of this software and associated documentation files (the "Software"), -- * to deal in the Software without restriction, including without limitation -- * the rights to use, copy, modify, merge, publish, distribute, sublicense, -- * and/or sell copies of the Software, and to permit persons to whom the -- * Software is furnished to do so, subject to the following conditions: -- * -- * The above copyright notice and this permission notice (including the next -- * paragraph) shall be included in all copies or substantial portions of the -- * Software. -- * -- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -- * DEALINGS IN THE SOFTWARE. -- */ -- --#include --#include --#include "wayland-util.h" -- --#ifndef __has_attribute --# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ --#endif -- --#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) --#define WL_PRIVATE __attribute__ ((visibility("hidden"))) --#else --#define WL_PRIVATE --#endif -- --extern const struct wl_interface wl_output_interface; --extern const struct wl_interface wl_seat_interface; --extern const struct wl_interface wl_surface_interface; --extern const struct wl_interface xdg_popup_interface; --extern const struct wl_interface xdg_positioner_interface; --extern const struct wl_interface xdg_surface_interface; --extern const struct wl_interface xdg_toplevel_interface; -- --static const struct wl_interface *xdg_shell_types[] = { -- NULL, -- NULL, -- NULL, -- NULL, -- &xdg_positioner_interface, -- &xdg_surface_interface, -- &wl_surface_interface, -- &xdg_toplevel_interface, -- &xdg_popup_interface, -- &xdg_surface_interface, -- &xdg_positioner_interface, -- &xdg_toplevel_interface, -- &wl_seat_interface, -- NULL, -- NULL, -- NULL, -- &wl_seat_interface, -- NULL, -- &wl_seat_interface, -- NULL, -- NULL, -- &wl_output_interface, -- &wl_seat_interface, -- NULL, -- &xdg_positioner_interface, -- NULL, --}; -- --static const struct wl_message xdg_wm_base_requests[] = { -- { "destroy", "", xdg_shell_types + 0 }, -- { "create_positioner", "n", xdg_shell_types + 4 }, -- { "get_xdg_surface", "no", xdg_shell_types + 5 }, -- { "pong", "u", xdg_shell_types + 0 }, --}; -- --static const struct wl_message xdg_wm_base_events[] = { -- { "ping", "u", xdg_shell_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface xdg_wm_base_interface = { -- "xdg_wm_base", 5, -- 4, xdg_wm_base_requests, -- 1, xdg_wm_base_events, --}; -- --static const struct wl_message xdg_positioner_requests[] = { -- { "destroy", "", xdg_shell_types + 0 }, -- { "set_size", "ii", xdg_shell_types + 0 }, -- { "set_anchor_rect", "iiii", xdg_shell_types + 0 }, -- { "set_anchor", "u", xdg_shell_types + 0 }, -- { "set_gravity", "u", xdg_shell_types + 0 }, -- { "set_constraint_adjustment", "u", xdg_shell_types + 0 }, -- { "set_offset", "ii", xdg_shell_types + 0 }, -- { "set_reactive", "3", xdg_shell_types + 0 }, -- { "set_parent_size", "3ii", xdg_shell_types + 0 }, -- { "set_parent_configure", "3u", xdg_shell_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface xdg_positioner_interface = { -- "xdg_positioner", 5, -- 10, xdg_positioner_requests, -- 0, NULL, --}; -- --static const struct wl_message xdg_surface_requests[] = { -- { "destroy", "", xdg_shell_types + 0 }, -- { "get_toplevel", "n", xdg_shell_types + 7 }, -- { "get_popup", "n?oo", xdg_shell_types + 8 }, -- { "set_window_geometry", "iiii", xdg_shell_types + 0 }, -- { "ack_configure", "u", xdg_shell_types + 0 }, --}; -- --static const struct wl_message xdg_surface_events[] = { -- { "configure", "u", xdg_shell_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface xdg_surface_interface = { -- "xdg_surface", 5, -- 5, xdg_surface_requests, -- 1, xdg_surface_events, --}; -- --static const struct wl_message xdg_toplevel_requests[] = { -- { "destroy", "", xdg_shell_types + 0 }, -- { "set_parent", "?o", xdg_shell_types + 11 }, -- { "set_title", "s", xdg_shell_types + 0 }, -- { "set_app_id", "s", xdg_shell_types + 0 }, -- { "show_window_menu", "ouii", xdg_shell_types + 12 }, -- { "move", "ou", xdg_shell_types + 16 }, -- { "resize", "ouu", xdg_shell_types + 18 }, -- { "set_max_size", "ii", xdg_shell_types + 0 }, -- { "set_min_size", "ii", xdg_shell_types + 0 }, -- { "set_maximized", "", xdg_shell_types + 0 }, -- { "unset_maximized", "", xdg_shell_types + 0 }, -- { "set_fullscreen", "?o", xdg_shell_types + 21 }, -- { "unset_fullscreen", "", xdg_shell_types + 0 }, -- { "set_minimized", "", xdg_shell_types + 0 }, --}; -- --static const struct wl_message xdg_toplevel_events[] = { -- { "configure", "iia", xdg_shell_types + 0 }, -- { "close", "", xdg_shell_types + 0 }, -- { "configure_bounds", "4ii", xdg_shell_types + 0 }, -- { "wm_capabilities", "5a", xdg_shell_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface xdg_toplevel_interface = { -- "xdg_toplevel", 5, -- 14, xdg_toplevel_requests, -- 4, xdg_toplevel_events, --}; -- --static const struct wl_message xdg_popup_requests[] = { -- { "destroy", "", xdg_shell_types + 0 }, -- { "grab", "ou", xdg_shell_types + 22 }, -- { "reposition", "3ou", xdg_shell_types + 24 }, --}; -- --static const struct wl_message xdg_popup_events[] = { -- { "configure", "iiii", xdg_shell_types + 0 }, -- { "popup_done", "", xdg_shell_types + 0 }, -- { "repositioned", "3u", xdg_shell_types + 0 }, --}; -- --WL_PRIVATE const struct wl_interface xdg_popup_interface = { -- "xdg_popup", 5, -- 3, xdg_popup_requests, -- 3, xdg_popup_events, --}; -- --- -2.39.1 - - -From 35691274a935e24c5bccd6931235aa759f32232e Mon Sep 17 00:00:00 2001 -From: MadcowOG -Date: Wed, 22 Feb 2023 22:45:42 -0800 -Subject: [PATCH 11/11] Readme change - ---- - README.md | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/README.md b/README.md -index b5e2507..d9b576b 100644 ---- a/README.md -+++ b/README.md -@@ -3,20 +3,19 @@ dwm-like bar for dwl - - I believe dwl-bar provides a more dwm-like experience out of the box than other bars like somebar. - --Still in development. But should compile. -- - ## Dependencies - I'm not sure what the package names will be for your distrobution, so just make sure these are generally what you have. -+ + make - + pango - + cairo - + wayland - + wayland-protocols - - ## Compile --Compile with this command `gcc ./src/*.c -o ./bar $(pkg-config --cflags --libs wayland-client wayland-cursor pangocairo)`. -+Compile with `make`, install with `make install`, uninstall `make uninstall`. - - ## Configuration --Like most suckless-like software, configuration is done through `src/config.def.h` modify it to your heart's content. -+Like most suckless-like software, configuration is done through `src/config.def.h` modify it to your heart's content. dwl-bar is compatible with [someblocks](https://sr.ht/~raphi/someblocks/) for status. - - ## Thanks - Thanks to raphi for somebar this project is largely just somebar but in C and a few tweaks to make it similar to dwm. The ipc protocol is also just the ipc patch in somebar's `contrib/`. --- -2.39.1 -