summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFabrice <fabrice@schaub-dev.xyz>2026-02-10 07:41:11 +0100
committerFabrice <fabrice@schaub-dev.xyz>2026-02-10 07:41:11 +0100
commit5b5eb5a16969afc4862fac387940818efc26780a (patch)
treeb33d699e7c0d780d88b015f3f605cebc46258210 /src
parent0a158275020e94d9395fadaec1db34a1031fe87c (diff)
how are we going to do this
Diffstat (limited to 'src')
-rw-r--r--src/utils.h50
-rw-r--r--src/wayclock.cc12
-rw-r--r--src/wlstate.cc19
-rw-r--r--src/wlstate.h13
-rw-r--r--src/xdg-shell.h167
5 files changed, 166 insertions, 95 deletions
diff --git a/src/utils.h b/src/utils.h
new file mode 100644
index 0000000..a89f498
--- /dev/null
+++ b/src/utils.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <cstdio>
+#include <cstdlib>
+#include <stdint.h>
+
+extern "C" {
+#include "xdg-shell.h"
+#include <wayland-client.h>
+}
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef uint64_t u64;
+
+typedef int8_t i8;
+typedef int16_t i16;
+typedef int32_t i32;
+typedef int64_t i64;
+
+typedef struct wl_display *wl_display_t;
+typedef struct wl_registry *wl_registry_t;
+typedef struct wl_compositor *wl_compositor_t;
+typedef struct wl_surface *wl_surface_t;
+
+typedef struct xdg_wm_base *xdg_wm_base_t;
+typedef struct xdg_surface *xdg_surface_t;
+typedef struct xdg_toplevel *xdg_toplevel_t;
+
+[[noreturn]] static inline void wayc_panic_impl(const char *file, int line,
+ const char *func,
+ const char *fmt, ...) {
+ fprintf(stderr, "Panic at %s:%d in %s: ", file, line, func);
+ va_list args;
+ va_start(args, fmt);
+ vfprintf(stderr, fmt, args);
+ va_end(args);
+ fprintf(stderr, "\n");
+ exit(EXIT_FAILURE);
+}
+
+#define wayc_panic(...) \
+ wayc_panic_impl(__FILE__, __LINE__, __func__, __VA_ARGS__)
+
+#define wayc_assert(expr) \
+ do { \
+ if (!(expr)) \
+ wayc_panic("Assertion failed: %s", #expr); \
+ } while (0)
diff --git a/src/wayclock.cc b/src/wayclock.cc
index 0e39169..ecfb784 100644
--- a/src/wayclock.cc
+++ b/src/wayclock.cc
@@ -1,10 +1,10 @@
-#include <wayland-client.h>
+#include "wlstate.h"
int main() {
- struct wl_display *disp = wl_display_connect(NULL);
- if (!disp) {
- return -1;
- }
- wl_display_disconnect(disp);
+ wl_state_s state;
+ if (!wayc_wl_state_init(&state))
+ wayc_panic("Failed to initialize Wayland state", nullptr);
+
+ wayc_wl_state_deinit(&state);
return 0;
} \ No newline at end of file
diff --git a/src/wlstate.cc b/src/wlstate.cc
new file mode 100644
index 0000000..e78aad1
--- /dev/null
+++ b/src/wlstate.cc
@@ -0,0 +1,19 @@
+#include "wlstate.h"
+#include "utils.h"
+
+bool wayc_wl_state_init(struct wl_state_s *state) {
+ wayc_assert(state != NULL);
+
+ wl_display_t display = wl_display_connect(NULL);
+ if (display == NULL)
+ return false;
+
+ state->display = display;
+ return true;
+}
+
+void wayc_wl_state_deinit(struct wl_state_s *state) {
+ wayc_assert(state != NULL);
+
+ wl_display_disconnect(state->display);
+}
diff --git a/src/wlstate.h b/src/wlstate.h
new file mode 100644
index 0000000..4143a74
--- /dev/null
+++ b/src/wlstate.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "utils.h"
+
+struct wl_state_s {
+ wl_display_t display;
+ wl_compositor_t compositor;
+ xdg_wm_base_t wm_base;
+ wl_surface_t surface;
+};
+
+bool wayc_wl_state_init(struct wl_state_s *state);
+void wayc_wl_state_deinit(struct wl_state_s *state);
diff --git a/src/xdg-shell.h b/src/xdg-shell.h
index 9f796f0..30be540 100644
--- a/src/xdg-shell.h
+++ b/src/xdg-shell.h
@@ -28,10 +28,10 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include "wayland-util.h"
#include <stdbool.h>
-#include <stdlib.h>
#include <stdint.h>
-#include "wayland-util.h"
+#include <stdlib.h>
extern const struct wl_interface wl_output_interface;
extern const struct wl_interface wl_seat_interface;
@@ -42,133 +42,122 @@ 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,
+ 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 },
+ {"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 },
+ {"ping", "u", xdg_shell_types + 0},
};
WL_EXPORT const struct wl_interface xdg_wm_base_interface = {
- "xdg_wm_base", 7,
- 4, xdg_wm_base_requests,
- 1, xdg_wm_base_events,
+ "xdg_wm_base", 7, 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 },
+ {"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_EXPORT const struct wl_interface xdg_positioner_interface = {
- "xdg_positioner", 7,
- 10, xdg_positioner_requests,
- 0, NULL,
+ "xdg_positioner", 7, 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 },
+ {"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 },
+ {"configure", "u", xdg_shell_types + 0},
};
WL_EXPORT const struct wl_interface xdg_surface_interface = {
- "xdg_surface", 7,
- 5, xdg_surface_requests,
- 1, xdg_surface_events,
+ "xdg_surface", 7, 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 },
+ {"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 },
+ {"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_EXPORT const struct wl_interface xdg_toplevel_interface = {
- "xdg_toplevel", 7,
- 14, xdg_toplevel_requests,
- 4, xdg_toplevel_events,
+ "xdg_toplevel", 7, 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 },
+ {"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 },
+ {"configure", "iiii", xdg_shell_types + 0},
+ {"popup_done", "", xdg_shell_types + 0},
+ {"repositioned", "3u", xdg_shell_types + 0},
};
WL_EXPORT const struct wl_interface xdg_popup_interface = {
- "xdg_popup", 7,
- 3, xdg_popup_requests,
- 3, xdg_popup_events,
+ "xdg_popup", 7, 3, xdg_popup_requests, 3, xdg_popup_events,
};
-