i mean, there are too many changes to even comment it

This commit is contained in:
2026-05-03 22:56:12 +07:00
parent 5af4ca8015
commit ba803af701
39 changed files with 1538 additions and 972 deletions
-9
View File
@@ -1,9 +0,0 @@
#pragma once
void absinthe_toplevel_map(struct wl_listener *listener, void *data);
void absinthe_toplevel_unmap(struct wl_listener *listener, void *data);
void absinthe_toplevel_destroy(struct wl_listener *listener, void *data);
void absinthe_toplevel_request_move(struct wl_listener *listener, void *data);
void absinthe_toplevel_request_resize(struct wl_listener *listener, void *data);
void absinthe_toplevel_request_maximize(struct wl_listener *listener, void *data);
void absinthe_toplevel_request_fullscreen(struct wl_listener *listener, void *data);
-16
View File
@@ -1,16 +0,0 @@
#pragma once
#include "types.h"
struct absinthe_toplevel *absinthe_toplevel_at(struct absinthe_server *server, double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy);
bool absinthe_toplevel_is_unmanaged(struct absinthe_toplevel *toplevel);
void absinthe_toplevel_update_geometry(struct absinthe_toplevel *toplevel);
void absinthe_toplevel_update_borders_geometry(struct absinthe_toplevel *toplevel);
void absinthe_toplevel_set_position(struct absinthe_toplevel *toplevel, int32_t x, int32_t y);
void absinthe_toplevel_set_size(struct absinthe_toplevel *toplevel, int32_t width, int32_t height);
void absinthe_toplevel_set_fullscreen(struct absinthe_toplevel *toplevel, bool fullscreen);
void absinthe_toplevel_set_border_color(struct absinthe_toplevel *toplevel, const float color[4]);
+14 -12
View File
@@ -1,17 +1,19 @@
#pragma once
#ifndef __CONFIG_H_
#define __CONFIG_H_
#define ABSINTHE_CURSOR_MOD WLR_MODIFIER_ALT
#define ABSINTHE_CURSOR_MOVE_BUTTON BTN_LEFT
#define ABSINTHE_CURSOR_RESIZE_BUTTON BTN_RIGHT
#define CURSOR_MOD WLR_MODIFIER_ALT
#define CURSOR_MOVE_BUTTON BTN_LEFT
#define CURSOR_RESIZE_BUTTON BTN_RIGHT
#define ABSINTHE_TOPLEVEL_BORDER_WIDTH 1
#define TOPLEVEL_BW 1
static const float focused_border_color[4] = {0.64, 0.75, 0.55, 1.0};
static const float urgent_border_color[4] = {0.84, 0.47, 0.5, 1.0};
static const float unfocused_border_color[4] = {0.39, 0.42, 0.46, 1.0};
static const float focused_bc[4] = { 0.64, 0.75, 0.55, 1.0 };
static const float urgent_bc[4] = { 0.84, 0.47, 0.5, 1.0 };
static const float unfocused_bc[4] = { 0.39, 0.42, 0.46, 1.0 };
#define ABSINTHE_MAIN_STACK_SIZE 1;
#define ABSINTHE_MAIN_STACK_WIDTH 0.5;
#define MSTACK_SIZE 1
#define MSTACK_WIDTH 0.5
#define ABSINTHE_OUTPUT_GAP 0
#define ABSINTHE_LAYOUT_GAP 0
#define OUTPUT_GAP 0
#define LAYOUT_GAP 0
#endif
+4 -1
View File
@@ -1,4 +1,5 @@
#pragma once
#ifndef __FOCUS_H_
#define __FOCUS_H_
#include "types.h"
@@ -8,3 +9,5 @@ struct absinthe_toplevel *focus_get_topmost(struct absinthe_server *server);
void focus_next(struct absinthe_server *server);
void focus_prev(struct absinthe_server *server);
#endif
+3 -2
View File
@@ -1,3 +1,4 @@
#pragma once
#ifndef __KEYBINDS_CALLBACKS_H
#define __KEYBINDS_CALLBACKS_H
void run_command();
#endif
+7 -4
View File
@@ -1,7 +1,10 @@
#pragma once
#ifndef __KEYBOARD_H_
#define __KEYBOARD_H_
#include <wayland-server-core.h>
void keyboard_handle_modifiers(struct wl_listener *listener, void *data);
void keyboard_handle_key(struct wl_listener *listener, void *data);
void keyboard_handle_destroy(struct wl_listener *listener, void *data);
void handle_modifiers(struct wl_listener *listener, void *data);
void handle_key(struct wl_listener *listener, void *data);
void handle_destroy(struct wl_listener *listener, void *data);
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef __LAYER_SURFACE_H_
#define __LAYER_SURFACE_H_
#include <wayland-server-core.h>
void layer_surface_map(struct wl_listener *listener, void *data);
void layer_surface_unmap(struct wl_listener *listener, void *data);
void layer_surface_commit(struct wl_listener *listener, void *data);
void layer_surface_destroy(struct wl_listener *listener, void *data);
#endif
+4 -1
View File
@@ -1,5 +1,8 @@
#pragma once
#ifndef __LAYOUT_H_
#define __LAYOUT_H_
#include "types.h"
void layout_arrange(struct absinthe_output *output);
#endif
+5 -2
View File
@@ -1,4 +1,5 @@
#pragma once
#ifndef __OUTPUT_H_
#define __OUTPUT_H_
#include <wayland-server-core.h>
@@ -7,6 +8,8 @@
void output_frame(struct wl_listener *listener, void *data);
void output_request_state(struct wl_listener *listener, void *data);
void output_destroy(struct wl_listener *listener, void *data);
void outputs_update(struct wl_listener *listener, void *data);
void output_layout_change(struct wl_listener *listener, void *data);
void update_focused_output(struct absinthe_server *server);
#endif
+7 -4
View File
@@ -1,7 +1,10 @@
#pragma once
#ifndef __SEAT_H_
#define __SEAT_H_
#include <wayland-server-core.h>
void seat_request_cursor(struct wl_listener *listener, void *data);
void seat_pointer_focus_change(struct wl_listener *listener, void *data);
void seat_request_set_selection(struct wl_listener *listener, void *data);
void request_cursor(struct wl_listener *listener, void *data);
void pointer_focus_change(struct wl_listener *listener, void *data);
void request_set_selection(struct wl_listener *listener, void *data);
#endif
+18 -13
View File
@@ -1,22 +1,27 @@
#pragma once
#ifndef __SERVER_H_
#define __SERVER_H_
#include <wayland-server-core.h>
void server_new_output(struct wl_listener *listener, void *data);
void new_output(struct wl_listener *listener, void *data);
void server_new_xdg_toplevel(struct wl_listener *listener, void *data);
void server_new_xdg_popup(struct wl_listener *listener, void *data);
void server_new_xdg_decoration(struct wl_listener *listener, void *data);
void new_xdg_toplevel(struct wl_listener *listener, void *data);
void new_xdg_popup(struct wl_listener *listener, void *data);
void new_xdg_decoration(struct wl_listener *listener, void *data);
void new_layer_surface(struct wl_listener *listener, void *data);
#ifdef XWAYLAND
void server_xwayland_ready(struct wl_listener *listener, void *data);
void server_xwayland_new_surface(struct wl_listener *listener, void *data);
void xwayland_ready(struct wl_listener *listener, void *data);
void xwayland_new_surface(struct wl_listener *listener, void *data);
#endif
void server_cursor_motion(struct wl_listener *listener, void *data);
void server_cursor_motion_absolute(struct wl_listener *listener, void *data);
void server_cursor_button(struct wl_listener *listener, void *data);
void server_cursor_axis(struct wl_listener *listener, void *data);
void server_cursor_frame(struct wl_listener *listener, void *data);
void cursor_motion(struct wl_listener *listener, void *data);
void cursor_motion_abs(struct wl_listener *listener, void *data);
void cursor_button(struct wl_listener *listener, void *data);
void cursor_axis(struct wl_listener *listener, void *data);
void cursor_frame(struct wl_listener *listener, void *data);
void server_new_input(struct wl_listener *listener, void *data);
void new_input(struct wl_listener *listener, void *data);
#endif
+14
View File
@@ -0,0 +1,14 @@
#ifndef __TOPLEVLE_HANDLERS_H_
#define __TOPLEVLE_HANDLERS_H_
#include <wayland-server-core.h>
void toplevel_map(struct wl_listener *listener, void *data);
void toplevel_unmap(struct wl_listener *listener, void *data);
void toplevel_destroy(struct wl_listener *listener, void *data);
void toplevel_request_move(struct wl_listener *listener, void *data);
void toplevel_request_resize(struct wl_listener *listener, void *data);
void toplevel_request_maximize(struct wl_listener *listener, void *data);
void toplevel_request_fullscreen(struct wl_listener *listener, void *data);
#endif
+22
View File
@@ -0,0 +1,22 @@
#ifndef __TOPLEVEL_H_
#define __TOPLEVEL_H_
#include "types.h"
struct absinthe_toplevel *toplevel_at(struct absinthe_server *server, double lx,
double ly, struct wlr_surface **surface, double *sx, double *sy);
bool toplevel_is_unmanaged(struct absinthe_toplevel *toplevel);
void toplevel_update_geom(struct absinthe_toplevel *toplevel);
void toplevel_update_borders_geom(struct absinthe_toplevel *toplevel);
void toplevel_set_pos(struct absinthe_toplevel *toplevel, int32_t x, int32_t y);
void toplevel_set_size(struct absinthe_toplevel *toplevel, int32_t width,
int32_t height);
void toplevel_set_fullscreen(struct absinthe_toplevel *toplevel,
bool fullscreen);
void toplevel_set_border_color(struct absinthe_toplevel *toplevel,
const float color[4]);
#endif
+87 -57
View File
@@ -1,4 +1,5 @@
#pragma once
#ifndef __TYPES_H_
#define __TYPES_H_
#include <linux/input-event-codes.h>
#include <wayland-server-core.h>
@@ -21,39 +22,43 @@
#include <xcb/xcb_icccm.h>
#endif
#include "config.h"
#define MAX(A, B) (A) > (B) ? (A) : (B)
#define MIN(A, B) (A) < (B) ? (A) : (B)
#define LISTEN(L, C, E) \
do { \
(L).notify = (C); \
wl_signal_add(&(E), &(L)); \
} while (0);
#define UNUSED(X) (void)(X)
#define UNUSED(x) (void)(x)
enum absinthe_cursor_mode {
ABSINTHE_CURSOR_PASSTHROUGH,
ABSINTHE_CURSOR_MOVE,
ABSINTHE_CURSOR_RESIZE,
enum {
CURSOR_PASSTHROUGH,
CURSOR_MOVE,
CURSOR_RESIZE,
};
enum absinthe_cursor_resize_corner {
ABSINTHE_CURSOR_RESIZE_CORNER_TOP_LEFT,
ABSINTHE_CURSOR_RESIZE_CORNER_TOP_RIGHT,
ABSINTHE_CURSOR_RESIZE_CORNER_BOTTOM_LEFT,
ABSINTHE_CURSOR_RESIZE_CORNER_BOTTOM_RIGHT,
enum {
TOP_LEFT,
TOP_RIGHT,
BOTTOM_LEFT,
BOTTOM_RIGHT,
};
enum absinthe_toplevel_type {
ABSINTHE_TOPLEVEL_XDG,
ABSINTHE_TOPLEVEL_LAYER_SHELL,
ABSINTHE_TOPLEVEL_X11,
enum {
TOPLEVEL_XDG,
TOPLEVEL_X11,
};
enum absinthe_layers {
ABSINTHE_LAYER_BACKGROUND,
ABSINTHE_LAYER_BOTTOM,
ABSINTHE_LAYER_TILE,
ABSINTHE_LAYER_FLOAT,
ABSINTHE_LAYER_TOP,
ABSINTHE_LAYER_FULLSCREEN,
ABSINTHE_LAYER_OVERLAY,
ABSINTHE_LAYER_LOCK,
ABSINTHE_LAYERS_COUNT,
LAYER_BACKGROUND,
LAYER_BOTTOM,
LAYER_TILE,
LAYER_FLOAT,
LAYER_TOP,
LAYER_FULLSCREEN,
LAYER_OVERLAY,
LAYER_LOCK,
LAYERS_COUNT,
};
struct absinthe_output;
@@ -70,19 +75,23 @@ struct absinthe_server {
struct wlr_xdg_shell *xdg_shell;
struct wl_listener new_xdg_toplevel;
struct wl_listener new_xdg_popup;
struct wlr_xdg_decoration_manager_v1 *xdg_decoration_mgr;
struct wl_listener new_xdg_decoration;
struct wlr_xdg_decoration_manager_v1 *xdg_deco_mgr;
struct wl_listener new_xdg_deco;
struct wlr_layer_shell *layer_shell;
struct wl_listener new_layer_surface;
struct wlr_scene_tree *layers[LAYERS_COUNT];
#ifdef XWAYLAND
struct wlr_xwayland *xwayland;
struct wl_listener xwayland_new_surface;
struct wl_listener xwayland_ready;
struct wl_listener xw_new_surface;
struct wl_listener xw_ready;
#endif
struct wlr_cursor *cursor;
struct wlr_xcursor_manager *cursor_mgr;
struct wl_listener cursor_motion;
struct wl_listener cursor_motion_absolute;
struct wl_listener cursor_motion_abs;
struct wl_listener cursor_button;
struct wl_listener cursor_axis;
struct wl_listener cursor_frame;
@@ -94,10 +103,10 @@ struct absinthe_server {
struct wl_listener request_set_selection;
struct wl_list keyboards;
enum absinthe_cursor_mode cursor_mode;
struct wlr_box grabbed_geometry;
int cursor_mode;
int resize_corner;
struct wlr_box grab_geom;
int32_t grab_x, grab_y;
enum absinthe_cursor_resize_corner cursor_resize_corner;
struct wl_list toplevels;
struct wl_list focus_stack;
@@ -107,49 +116,68 @@ struct absinthe_server {
struct wl_list outputs;
struct wl_listener new_output;
struct wlr_output_layout *output_layout;
struct wl_listener output_layout_change;
struct wl_listener layout_change;
struct wlr_output_manager_v1 *output_mgr;
struct wl_listener output_mgr_apply;
struct wl_listener output_mgr_test;
struct wl_listener mgr_apply;
struct wl_listener mgr_test;
};
struct absinthe_output {
struct wl_list link;
struct absinthe_server *server;
struct wlr_box geometry;
struct wlr_output *wlr_output;
struct wlr_box geom;
struct wlr_box usable_area;
struct wlr_output *wlr;
struct wl_listener frame;
struct wl_listener request_state;
struct wl_listener destroy;
float main_stack_width;
float main_stack_size;
float mstack_width;
float mstack_size;
};
struct absinthe_layer_surface {
struct absinthe_server *server;
struct absinthe_output *output;
struct wlr_scene_tree *scene_tree;
struct wlr_scene_tree *scene_layer;
struct wlr_scene_tree *popups;
struct wlr_layer_surface_v1 *wlr;
struct wl_listener map;
struct wl_listener unmap;
struct wl_listener commit;
struct wl_listener destroy;
};
struct absinthe_toplevel {
enum absinthe_toplevel_type type;
int type;
struct wl_list link;
struct wl_list flink;
struct absinthe_server *server;
struct absinthe_output *output;
struct wlr_scene_tree *scene_tree;
struct wlr_scene_tree *scene_surface;
int32_t border_width;
int32_t bw;
struct wlr_scene_rect *border[4];
struct wlr_xdg_toplevel_decoration_v1 *decoration;
struct wlr_xdg_toplevel_decoration_v1 *deco;
bool tiled, floating, fullscreen, maximized;
bool urgent;
uint32_t resizing;
struct wlr_box geometry;
struct wlr_box prev_geometry;
struct wlr_box geom;
struct wlr_box prev_geom;
union {
struct wlr_xdg_toplevel *xdg_toplevel;
struct wlr_xwayland_surface *xwayland_surface;
struct wlr_xdg_toplevel *xdg;
struct wlr_xwayland_surface *xw;
};
struct wl_listener map;
struct wl_listener unmap;
@@ -159,20 +187,20 @@ struct absinthe_toplevel {
struct wl_listener request_resize;
struct wl_listener request_maximize;
struct wl_listener request_fullscreen;
struct wl_listener decoration_request_mode;
struct wl_listener decoration_destroy;
struct wl_listener deco_request_mode;
struct wl_listener deco_destroy;
#ifdef XWAYLAND
struct wl_listener xwayland_activate;
struct wl_listener xwayland_associate;
struct wl_listener xwayland_dissociate;
struct wl_listener xwayland_configure;
struct wl_listener xwayland_set_hints;
struct wl_listener xw_activate;
struct wl_listener xw_associate;
struct wl_listener xw_dissociate;
struct wl_listener xw_configure;
struct wl_listener xw_set_hints;
#endif
};
struct absinthe_popup {
struct wlr_xdg_popup *xdg_popup;
struct wlr_xdg_popup *wlr;
struct wl_listener commit;
struct wl_listener destroy;
};
@@ -180,8 +208,10 @@ struct absinthe_popup {
struct absinthe_keyboard {
struct wl_list link;
struct absinthe_server *server;
struct wlr_keyboard *wlr_keyboard;
struct wlr_keyboard *wlr;
struct wl_listener modifiers;
struct wl_listener key;
struct wl_listener destroy;
};
#endif /* __TYPES_H_ */
+6 -3
View File
@@ -1,6 +1,9 @@
#pragma once
#ifndef __XDG_DECORATION_H_
#define __XDG_DECORATION_H_
#include <wayland-server-core.h>
void xdg_decoration_request_mode(struct wl_listener *listener, void *data);
void xdg_decoration_destroy(struct wl_listener *listener, void *data);
void deco_request_mode(struct wl_listener *listener, void *data);
void deco_destroy(struct wl_listener *listener, void *data);
#endif
+4 -1
View File
@@ -1,6 +1,9 @@
#pragma once
#ifndef __XDG_POPUP_H_
#define __XDG_POPUP_H_
#include <wayland-server-core.h>
void xdg_popup_commit(struct wl_listener *listener, void *data);
void xdg_popup_destroy(struct wl_listener *listener, void *data);
#endif
+5 -2
View File
@@ -1,5 +1,8 @@
#pragma once
#ifndef __XDG_TOPLEVEL_H_
#define __XDG_TOPLEVEL_H_
#include <wayland-server-core.h>
void xdg_toplevel_commit(struct wl_listener *listener, void *data);
void toplevel_commit(struct wl_listener *listener, void *data);
#endif
+5 -2
View File
@@ -1,9 +1,12 @@
#pragma once
#ifndef __XWAYLAND_H_
#define __XWAYLAND_H_
#include <wayland-server.h>
#include <wayland-server-core.h>
void xwayland_activate(struct wl_listener *listener, void *data);
void xwayland_associate(struct wl_listener *listener, void *data);
void xwayland_dissociate(struct wl_listener *listener, void *data);
void xwayland_configure(struct wl_listener *listener, void *data);
void xwayland_set_hints(struct wl_listener *listener, void *data);
#endif