typedefs and comments

This commit is contained in:
2026-05-06 21:24:08 +07:00
parent 9d3528599a
commit 2b7353248d
20 changed files with 238 additions and 225 deletions
+5 -5
View File
@@ -23,7 +23,7 @@
#include "types.h"
static int
setup(struct absinthe_server *server)
setup(absn_server *server)
{
wlr_log_init(WLR_DEBUG, NULL);
server->display = wl_display_create();
@@ -182,7 +182,7 @@ setup(struct absinthe_server *server)
}
static void
cleanup(struct absinthe_server *server)
cleanup(absn_server *server)
{
wl_display_destroy_clients(server->display);
@@ -215,9 +215,9 @@ cleanup(struct absinthe_server *server)
int
main(void)
{
struct absinthe_server server = { 0 };
int error = setup(&server);
if (error)
absn_server server = { 0 };
int err = setup(&server);
if (err)
return EXIT_FAILURE;
wl_display_run(server.display);
cleanup(&server);
+16 -17
View File
@@ -6,7 +6,7 @@
#include "types.h"
void
reset_cursor_mode(struct absinthe_server *server)
reset_cursor_mode(absn_server *server)
{
server->cursor_mode = CURSOR_PASSTHROUGH;
wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "default");
@@ -17,9 +17,9 @@ reset_cursor_mode(struct absinthe_server *server)
}
static void
process_cursor_move(struct absinthe_server *server)
process_cursor_move(absn_server *server)
{
struct absinthe_toplevel *toplevel = server->focused_toplevel;
struct absn_toplevel *toplevel = server->focused_toplevel;
if (!toplevel)
return;
@@ -41,7 +41,7 @@ process_cursor_move(struct absinthe_server *server)
}
static void
apply_resize(struct absinthe_toplevel *toplevel, struct wlr_box *new_geometry)
apply_resize(absn_toplevel *toplevel, struct wlr_box *new_geom)
{
if (toplevel->type == TOPLEVEL_XDG) {
int32_t min_width = toplevel->xdg->current.min_width;
@@ -56,27 +56,26 @@ apply_resize(struct absinthe_toplevel *toplevel, struct wlr_box *new_geometry)
if (max_height == 0)
max_height = 10000;
if (!(new_geometry->width >= min_width &&
new_geometry->width <= max_width)) {
new_geometry->width = toplevel->geom.width;
new_geometry->x = toplevel->geom.x;
if (!(new_geom->width >= min_width &&
new_geom->width <= max_width)) {
new_geom->width = toplevel->geom.width;
new_geom->x = toplevel->geom.x;
}
if (!(new_geometry->height >= min_height &&
new_geometry->height <= max_height)) {
new_geometry->height = toplevel->geom.height;
new_geometry->y = toplevel->geom.y;
if (!(new_geom->height >= min_height &&
new_geom->height <= max_height)) {
new_geom->height = toplevel->geom.height;
new_geom->y = toplevel->geom.y;
}
}
toplevel_set_size(toplevel, new_geometry->width, new_geometry->height);
toplevel_set_pos(toplevel, new_geometry->x, new_geometry->y);
toplevel_set_geom(toplevel, new_geom);
}
static void
process_cursor_resize(struct absinthe_server *server)
process_cursor_resize(absn_server *server)
{
struct absinthe_toplevel *toplevel = server->focused_toplevel;
struct absn_toplevel *toplevel = server->focused_toplevel;
if (!toplevel)
return;
@@ -142,7 +141,7 @@ process_cursor_resize(struct absinthe_server *server)
}
void
process_cursor_motion(struct absinthe_server *server, uint32_t time)
process_cursor_motion(absn_server *server, uint32_t time)
{
double sx, sy;
struct wlr_surface *surface = NULL;
+15 -11
View File
@@ -7,12 +7,12 @@
#include "types.h"
void
focus_toplevel(struct absinthe_toplevel *toplevel)
focus_toplevel(absn_toplevel *toplevel)
{
if (!toplevel)
return;
struct absinthe_server *server = toplevel->server;
absn_server *server = toplevel->server;
struct wlr_seat *seat = server->seat;
struct wlr_surface *prev_surface = seat->keyboard_state.focused_surface;
struct wlr_surface *surface;
@@ -60,10 +60,14 @@ focus_toplevel(struct absinthe_toplevel *toplevel)
&keyboard->modifiers);
}
struct absinthe_toplevel *
focus_get_topmost(struct absinthe_server *server)
/*
* get first toplevel on monitor
* (last focused toplevel)
*/
absn_toplevel *
focus_get_topmost(absn_server *server)
{
struct absinthe_toplevel *toplevel;
absn_toplevel *toplevel;
wl_list_for_each(toplevel, &server->focus_stack, flink)
{
if (toplevel)
@@ -73,13 +77,13 @@ focus_get_topmost(struct absinthe_server *server)
}
void
focus_next(struct absinthe_server *server)
focus_next(absn_server *server)
{
struct absinthe_toplevel *toplevel = focus_get_topmost(server);
absn_toplevel *toplevel = focus_get_topmost(server);
if (!toplevel)
return;
struct absinthe_toplevel *next;
absn_toplevel *next;
wl_list_for_each(next, &toplevel->link, link)
{
if (&next->link == &toplevel->server->toplevels)
@@ -90,13 +94,13 @@ focus_next(struct absinthe_server *server)
}
void
focus_prev(struct absinthe_server *server)
focus_prev(absn_server *server)
{
struct absinthe_toplevel *toplevel = focus_get_topmost(server);
absn_toplevel *toplevel = focus_get_topmost(server);
if (!toplevel)
return;
struct absinthe_toplevel *prev;
absn_toplevel *prev;
wl_list_for_each_reverse(prev, &toplevel->link, link)
{
if (&prev->link == &toplevel->server->toplevels)
+13 -13
View File
@@ -14,7 +14,7 @@ void
handle_modifiers(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_keyboard *keyboard = wl_container_of(listener, keyboard,
absn_keyboard *keyboard = wl_container_of(listener, keyboard,
modifiers);
wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr);
@@ -23,7 +23,7 @@ handle_modifiers(struct wl_listener *listener, void *data)
}
static bool
handle_keybind(struct absinthe_server *server, xkb_keysym_t keysym)
handle_keybind(absn_server *server, xkb_keysym_t keysym)
{
switch (keysym) {
case XKB_KEY_Escape:
@@ -64,14 +64,14 @@ handle_keybind(struct absinthe_server *server, xkb_keysym_t keysym)
break;
case XKB_KEY_H:
if (server->focused_output) {
server->focused_output->mstack_size += 1;
server->focused_output->mstack_count += 1;
layout_arrange(server->focused_output);
}
break;
case XKB_KEY_L:
if (server->focused_output &&
server->focused_output->mstack_size > 1) {
server->focused_output->mstack_size -= 1;
server->focused_output->mstack_count > 1) {
server->focused_output->mstack_count -= 1;
layout_arrange(server->focused_output);
}
break;
@@ -84,8 +84,7 @@ handle_keybind(struct absinthe_server *server, xkb_keysym_t keysym)
void
handle_key(struct wl_listener *listener, void *data)
{
struct absinthe_keyboard *keyboard = wl_container_of(listener, keyboard,
key);
absn_keyboard *keyboard = wl_container_of(listener, keyboard, key);
struct wlr_keyboard_key_event *event = data;
uint32_t keycode = event->keycode + 8;
@@ -102,18 +101,19 @@ handle_key(struct wl_listener *listener, void *data)
}
}
if (!handled) {
wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr);
wlr_seat_keyboard_notify_key(keyboard->server->seat,
event->time_msec, event->keycode, event->state);
}
if (handled)
return;
wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr);
wlr_seat_keyboard_notify_key(keyboard->server->seat, event->time_msec,
event->keycode, event->state);
}
void
handle_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_keyboard *keyboard = wl_container_of(listener, keyboard,
absn_keyboard *keyboard = wl_container_of(listener, keyboard,
modifiers);
wl_list_remove(&keyboard->modifiers.link);
+56 -42
View File
@@ -1,16 +1,15 @@
#include "config.h"
#include "focus.h"
#include "toplevel.h"
#include "types.h"
void
layout_arrange(struct absinthe_output *output)
layout_arrange(struct absn_output *output)
{
if (!output)
return;
struct absinthe_toplevel *toplevel;
size_t toplevels_count = 0;
struct absn_toplevel *toplevel;
int toplevels_count = 0;
wl_list_for_each(toplevel, &output->server->toplevels, link)
{
if (toplevel->output == output && toplevel->tiled) {
@@ -23,7 +22,8 @@ layout_arrange(struct absinthe_output *output)
if (toplevels_count < 1)
return;
int32_t output_gap = OUTPUT_GAP;
int32_t og = OUTPUT_GAP;
struct wlr_box new_geom;
if (toplevels_count == 1) {
wl_list_for_each(toplevel, &output->server->toplevels, link)
@@ -31,37 +31,41 @@ layout_arrange(struct absinthe_output *output)
if (toplevel->output == output && toplevel->tiled)
break;
}
int32_t new_x = output->geom.x + output_gap;
int32_t new_y = output->geom.y + output_gap;
toplevel_set_size(toplevel, output->geom.width - 2 * output_gap,
output->geom.height - 2 * output_gap);
toplevel_set_pos(toplevel, new_x, new_y);
new_geom.x = output->geom.x + og,
new_geom.y = output->geom.y + og,
new_geom.width = output->geom.width - 2 * og,
new_geom.height = output->geom.height - 2 * og,
toplevel_set_geom(toplevel, &new_geom);
return;
}
int32_t layout_gap = LAYOUT_GAP;
int32_t main_stack_width = (toplevels_count <= output->mstack_size) ?
output->geom.width - 2 * output_gap :
output->mstack_width * (output->geom.width - 2 * output_gap);
int32_t width = output->geom.width - main_stack_width - 2 * output_gap -
layout_gap;
int32_t height;
int32_t dy = output_gap;
size_t i = 0;
int32_t lg = LAYOUT_GAP;
int32_t main_stack_width = (toplevels_count <= output->mstack_count) ?
output->geom.width - 2 * og :
output->mstack_width * (output->geom.width - 2 * og);
int32_t w = output->geom.width - main_stack_width - 2 * og - lg;
int32_t h;
int32_t dy = og;
int i = 0;
if (toplevels_count <= output->mstack_size) {
if (toplevels_count <= output->mstack_count) {
wl_list_for_each(toplevel, &output->server->toplevels, link)
{
if (toplevel->output != output || !toplevel->tiled)
continue;
height = (output->geom.height - dy - output_gap) /
h = (output->geom.height - dy - og) /
(toplevels_count - i);
int32_t new_x = output->geom.x + output_gap;
int32_t new_y = output->geom.y + dy;
toplevel_set_pos(toplevel, new_x, new_y);
toplevel_set_size(toplevel, main_stack_width, height);
dy += height + layout_gap;
new_geom.x = output->geom.x + og;
new_geom.y = output->geom.y + dy;
new_geom.width = main_stack_width;
new_geom.height = h;
toplevel_set_geom(toplevel, &new_geom);
dy += h + lg;
i++;
}
@@ -73,24 +77,34 @@ layout_arrange(struct absinthe_output *output)
if (toplevel->output != output || !toplevel->tiled)
continue;
if (i < output->mstack_size) {
height = (output->geom.height - dy - output_gap) /
(output->mstack_size - i);
int32_t new_x = output->geom.x + output_gap;
int32_t new_y = output->geom.y + dy;
toplevel_set_pos(toplevel, new_x, new_y);
toplevel_set_size(toplevel, main_stack_width, height);
dy += height + layout_gap;
if (i < output->mstack_count) {
h = (output->geom.height - dy - og) /
(output->mstack_count - i);
new_geom.x = output->geom.x + og;
new_geom.y = output->geom.y + dy;
new_geom.width = main_stack_width;
new_geom.height = h;
toplevel_set_geom(toplevel, &new_geom);
dy += h + lg;
} else {
if (i == output->mstack_size)
dy = output_gap;
height = (output->geom.height - dy - output_gap) /
if (i == output->mstack_count)
dy = og;
h = (output->geom.height - dy - og) /
(toplevels_count - i);
toplevel->geom.x = output->geom.x + main_stack_width +
layout_gap + output_gap;
toplevel->geom.y = output->geom.y + dy;
toplevel_set_size(toplevel, width, height);
dy += height + layout_gap;
new_geom.x = output->geom.x + main_stack_width + lg +
og;
new_geom.y = output->geom.y + dy;
new_geom.width = w;
new_geom.height = h;
toplevel_set_geom(toplevel, &new_geom);
dy += h + lg;
}
i++;
+9 -11
View File
@@ -11,13 +11,12 @@ output_frame(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct timespec now;
struct absinthe_output *output = wl_container_of(listener, output,
frame);
absn_output *output = wl_container_of(listener, output, frame);
struct wlr_scene *scene = output->server->scene;
struct wlr_scene_output *scene_output =
wlr_scene_get_scene_output(scene, output->wlr);
struct absinthe_toplevel *toplevel;
absn_toplevel *toplevel;
wl_list_for_each(toplevel, &output->server->toplevels, link)
{
if (toplevel->resizing && toplevel->output == output)
@@ -34,7 +33,7 @@ skip:
void
output_request_state(struct wl_listener *listener, void *data)
{
struct absinthe_output *output = wl_container_of(listener, output,
struct absn_output *output = wl_container_of(listener, output,
request_state);
const struct wlr_output_event_request_state *event = data;
wlr_output_commit_state(output->wlr, event->state);
@@ -44,7 +43,7 @@ void
output_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_output *output = wl_container_of(listener, output,
struct absn_output *output = wl_container_of(listener, output,
request_state);
wl_list_remove(&output->frame.link);
@@ -58,13 +57,12 @@ void
output_layout_change(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_server *server = wl_container_of(listener, server,
layout_change);
absn_server *server = wl_container_of(listener, server, layout_change);
struct wlr_output_configuration_v1 *config =
wlr_output_configuration_v1_create();
struct absinthe_toplevel *toplevel = NULL;
struct absinthe_output *output;
absn_toplevel *toplevel = NULL;
absn_output *output;
struct wlr_output_configuration_head_v1 *config_head;
wl_list_for_each(output, &server->outputs, link)
@@ -126,9 +124,9 @@ output_layout_change(struct wl_listener *listener, void *data)
}
void
update_focused_output(struct absinthe_server *server)
update_focused_output(absn_server *server)
{
struct absinthe_output *output;
absn_output *output;
int32_t cursor_x = server->cursor->x;
int32_t cursor_y = server->cursor->y;
wl_list_for_each(output, &server->outputs, link)
+3 -4
View File
@@ -6,8 +6,7 @@
void
request_cursor(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
request_cursor);
absn_server *server = wl_container_of(listener, server, request_cursor);
struct wlr_seat_pointer_request_set_cursor_event *event = data;
struct wlr_seat_client *client =
server->seat->pointer_state.focused_client;
@@ -20,7 +19,7 @@ request_cursor(struct wl_listener *listener, void *data)
void
pointer_focus_change(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
absn_server *server = wl_container_of(listener, server,
pointer_focus_change);
struct wlr_seat_pointer_focus_change_event *event = data;
@@ -32,7 +31,7 @@ pointer_focus_change(struct wl_listener *listener, void *data)
void
request_set_selection(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
absn_server *server = wl_container_of(listener, server,
request_set_selection);
struct wlr_seat_request_set_selection_event *event = data;
+25 -34
View File
@@ -26,8 +26,7 @@
void
new_output(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
new_output);
absn_server *server = wl_container_of(listener, server, new_output);
struct wlr_output *wlr_output = data;
wlr_output_init_render(wlr_output, server->allocator, server->renderer);
@@ -43,7 +42,7 @@ new_output(struct wl_listener *listener, void *data)
wlr_output_commit_state(wlr_output, &state);
wlr_output_state_finish(&state);
struct absinthe_output *output = calloc(1, sizeof(*output));
struct absn_output *output = calloc(1, sizeof(*output));
output->wlr = wlr_output;
output->server = server;
@@ -63,18 +62,18 @@ new_output(struct wl_listener *listener, void *data)
wlr_output_layout_get_box(server->output_layout, output->wlr,
&output->geom);
output->mstack_size = MSTACK_SIZE;
output->mstack_count = MSTACK_SIZE;
output->mstack_width = MSTACK_WIDTH;
}
void
new_xdg_toplevel(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
absn_server *server = wl_container_of(listener, server,
new_xdg_toplevel);
struct wlr_xdg_toplevel *xdg_toplevel = data;
struct absinthe_toplevel *toplevel = calloc(1, sizeof(*toplevel));
absn_toplevel *toplevel = calloc(1, sizeof(*toplevel));
toplevel->type = TOPLEVEL_XDG;
toplevel->server = server;
toplevel->xdg = xdg_toplevel;
@@ -103,16 +102,15 @@ new_xdg_toplevel(struct wl_listener *listener, void *data)
void
new_xdg_popup(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
new_xdg_popup);
absn_server *server = wl_container_of(listener, server, new_xdg_popup);
struct wlr_xdg_popup *xdg_popup = data;
struct absinthe_popup *popup = calloc(1, sizeof(*popup));
absn_popup *popup = calloc(1, sizeof(*popup));
popup->wlr = xdg_popup;
struct wlr_xdg_surface *parent = wlr_xdg_surface_try_from_wlr_surface(
xdg_popup->parent);
struct absinthe_toplevel *parent_toplevel = parent->data;
absn_toplevel *parent_toplevel = parent->data;
struct wlr_scene_tree *parent_tree = parent_toplevel->scene_tree;
xdg_popup->base->data = wlr_scene_xdg_surface_create(parent_tree,
xdg_popup->base);
@@ -128,7 +126,7 @@ new_xdg_decoration(struct wl_listener *listener, void *data)
{
UNUSED(listener);
struct wlr_xdg_toplevel_decoration_v1 *deco = data;
struct absinthe_toplevel *toplevel = deco->toplevel->base->data;
absn_toplevel *toplevel = deco->toplevel->base->data;
toplevel->deco = deco;
LISTEN(toplevel->deco_request_mode, deco_request_mode,
@@ -142,7 +140,7 @@ new_xdg_decoration(struct wl_listener *listener, void *data)
void
new_layer_surface(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
absn_server *server = wl_container_of(listener, server,
new_layer_surface);
struct wlr_layer_surface_v1 *layer_surface = data;
@@ -152,7 +150,7 @@ new_layer_surface(struct wl_listener *listener, void *data)
return;
}
struct absinthe_layer_surface *layer = calloc(1, sizeof(*layer));
absn_layer_surface *layer = calloc(1, sizeof(*layer));
LISTEN(layer->commit, layer_surface_commit,
layer_surface->surface->events.commit);
LISTEN(layer->unmap, layer_surface_unmap,
@@ -166,8 +164,7 @@ void
xwayland_ready(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_server *server = wl_container_of(listener, server,
xw_ready);
absn_server *server = wl_container_of(listener, server, xw_ready);
wlr_xwayland_set_seat(server->xwayland, server->seat);
@@ -185,10 +182,9 @@ xwayland_ready(struct wl_listener *listener, void *data)
void
xwayland_new_surface(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
xw_new_surface);
absn_server *server = wl_container_of(listener, server, xw_new_surface);
struct wlr_xwayland_surface *surface = data;
struct absinthe_toplevel *toplevel = calloc(1, sizeof(*toplevel));
absn_toplevel *toplevel = calloc(1, sizeof(*toplevel));
toplevel->type = TOPLEVEL_X11;
toplevel->server = server;
@@ -218,8 +214,7 @@ xwayland_new_surface(struct wl_listener *listener, void *data)
void
cursor_motion(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
cursor_motion);
absn_server *server = wl_container_of(listener, server, cursor_motion);
struct wlr_pointer_motion_event *event = data;
update_focused_output(server);
wlr_cursor_move(server->cursor, &event->pointer->base, event->delta_x,
@@ -230,7 +225,7 @@ cursor_motion(struct wl_listener *listener, void *data)
void
cursor_motion_abs(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
absn_server *server = wl_container_of(listener, server,
cursor_motion_abs);
struct wlr_pointer_motion_absolute_event *event = data;
update_focused_output(server);
@@ -242,8 +237,7 @@ cursor_motion_abs(struct wl_listener *listener, void *data)
void
cursor_button(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
cursor_button);
absn_server *server = wl_container_of(listener, server, cursor_button);
struct wlr_pointer_button_event *event = data;
bool handled = false;
@@ -252,8 +246,8 @@ cursor_button(struct wl_listener *listener, void *data)
} else {
double sx, sy;
struct wlr_surface *surface = NULL;
struct absinthe_toplevel *toplevel = toplevel_at(server,
server->cursor->x, server->cursor->y, &surface, &sx, &sy);
absn_toplevel *toplevel = toplevel_at(server, server->cursor->x,
server->cursor->y, &surface, &sx, &sy);
if (!toplevel)
goto handle;
@@ -324,8 +318,7 @@ handle:
void
cursor_axis(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
cursor_axis);
absn_server *server = wl_container_of(listener, server, cursor_axis);
struct wlr_pointer_axis_event *event = data;
wlr_seat_pointer_notify_axis(server->seat, event->time_msec,
event->orientation, event->delta, event->delta_discrete,
@@ -336,17 +329,16 @@ void
cursor_frame(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_server *server = wl_container_of(listener, server,
cursor_frame);
absn_server *server = wl_container_of(listener, server, cursor_frame);
wlr_seat_pointer_notify_frame(server->seat);
}
static void
new_keyboard(struct absinthe_server *server, struct wlr_input_device *device)
new_keyboard(absn_server *server, struct wlr_input_device *device)
{
struct wlr_keyboard *wlr_keyboard = wlr_keyboard_from_input_device(
device);
struct absinthe_keyboard *keyboard = calloc(1, sizeof(*keyboard));
absn_keyboard *keyboard = calloc(1, sizeof(*keyboard));
keyboard->server = server;
keyboard->wlr = wlr_keyboard;
@@ -371,7 +363,7 @@ new_keyboard(struct absinthe_server *server, struct wlr_input_device *device)
}
static void
new_pointer(struct absinthe_server *server, struct wlr_input_device *device)
new_pointer(absn_server *server, struct wlr_input_device *device)
{
wlr_cursor_attach_input_device(server->cursor, device);
}
@@ -379,8 +371,7 @@ new_pointer(struct absinthe_server *server, struct wlr_input_device *device)
void
new_input(struct wl_listener *listener, void *data)
{
struct absinthe_server *server = wl_container_of(listener, server,
new_input);
absn_server *server = wl_container_of(listener, server, new_input);
struct wlr_input_device *device = data;
switch (device->type) {
case WLR_INPUT_DEVICE_KEYBOARD:
+8 -11
View File
@@ -11,8 +11,7 @@ void
toplevel_map(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
map);
absn_toplevel *toplevel = wl_container_of(listener, toplevel, map);
toplevel->scene_tree = wlr_scene_tree_create(
&toplevel->server->scene->tree);
@@ -46,7 +45,7 @@ toplevel_map(struct wl_listener *listener, void *data)
}
toplevel->scene_surface->node.data = toplevel;
toplevel_update_geom(toplevel);
toplevel_get_geom(toplevel);
toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW;
for (int i = 0; i < 4; ++i) {
@@ -70,8 +69,7 @@ void
toplevel_unmap(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
unmap);
absn_toplevel *toplevel = wl_container_of(listener, toplevel, unmap);
if (toplevel == toplevel->server->focused_toplevel) {
toplevel->server->focused_toplevel = NULL;
@@ -91,8 +89,7 @@ void
toplevel_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
destroy);
absn_toplevel *toplevel = wl_container_of(listener, toplevel, destroy);
#ifdef XWAYLAND
if (toplevel->type == TOPLEVEL_X11) {
@@ -122,7 +119,7 @@ void
toplevel_request_move(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
request_move);
if (toplevel->xdg->base->initialized)
wlr_xdg_surface_schedule_configure(toplevel->xdg->base);
@@ -132,7 +129,7 @@ void
toplevel_request_resize(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
request_resize);
if (toplevel->xdg->base->initialized)
wlr_xdg_surface_schedule_configure(toplevel->xdg->base);
@@ -142,7 +139,7 @@ void
toplevel_request_maximize(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
request_maximize);
if (toplevel->xdg->base->initialized)
wlr_xdg_surface_schedule_configure(toplevel->xdg->base);
@@ -152,7 +149,7 @@ void
toplevel_request_fullscreen(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
request_fullscreen);
toplevel_set_fullscreen(toplevel, toplevel->xdg->requested.fullscreen);
}
+31 -22
View File
@@ -6,8 +6,13 @@
#include "types.h"
#include "xdg-shell-protocol.h"
struct absinthe_toplevel *
toplevel_at(struct absinthe_server *server, double lx, double ly,
/*
* returns toplevel at given cursor coordinates,
* its surface and coordinates inside of it
* to process input event
*/
absn_toplevel *
toplevel_at(absn_server *server, double lx, double ly,
struct wlr_surface **surface, double *sx, double *sy)
{
struct wlr_scene_node *node =
@@ -41,8 +46,13 @@ toplevel_at(struct absinthe_server *server, double lx, double ly,
}
}
/*
* if toplevel is unmanaged we should not
* move or resize it and just draw it
* where it wants
*/
bool
toplevel_is_unmanaged(struct absinthe_toplevel *toplevel)
toplevel_is_unmanaged(absn_toplevel *toplevel)
{
#ifdef XWAYLAND
if (toplevel->type == TOPLEVEL_X11)
@@ -51,8 +61,9 @@ toplevel_is_unmanaged(struct absinthe_toplevel *toplevel)
return false;
}
/* used only to get initial window size */
void
toplevel_update_geom(struct absinthe_toplevel *toplevel)
toplevel_get_geom(absn_toplevel *toplevel)
{
#ifdef XWAYLAND
if (toplevel->type == TOPLEVEL_X11) {
@@ -67,8 +78,8 @@ toplevel_update_geom(struct absinthe_toplevel *toplevel)
}
}
void
toplevel_update_borders_geom(struct absinthe_toplevel *toplevel)
static void
toplevel_update_borders_geom(absn_toplevel *toplevel)
{
int32_t bw = toplevel->bw;
@@ -96,7 +107,7 @@ toplevel_update_borders_geom(struct absinthe_toplevel *toplevel)
}
void
toplevel_set_pos(struct absinthe_toplevel *toplevel, int32_t x, int32_t y)
toplevel_set_pos(absn_toplevel *toplevel, int32_t x, int32_t y)
{
toplevel->geom.x = x;
toplevel->geom.y = y;
@@ -104,8 +115,7 @@ 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)
toplevel_set_size(absn_toplevel *toplevel, int32_t width, int32_t height)
{
if (width <= 2 * toplevel->bw || height <= 2 * toplevel->bw ||
(width == toplevel->geom.width && height == toplevel->geom.height))
@@ -129,8 +139,6 @@ toplevel_set_size(struct absinthe_toplevel *toplevel, int32_t width,
height);
toplevel->resizing = wlr_xdg_toplevel_set_size(toplevel->xdg,
width - 2 * toplevel->bw, height - 2 * toplevel->bw);
// clip.x = toplevel->xdg->base->geometry.x;
// clip.y = toplevel->xdg->base->geometry.y;
}
#ifdef XWAYLAND
else if (toplevel->type == TOPLEVEL_X11) {
@@ -147,36 +155,37 @@ toplevel_set_size(struct absinthe_toplevel *toplevel, int32_t width,
}
void
toplevel_set_fullscreen(struct absinthe_toplevel *toplevel, bool fullscreen)
toplevel_set_geom(absn_toplevel *toplevel, struct wlr_box *geom)
{
toplevel_set_pos(toplevel, geom->x, geom->y);
toplevel_set_size(toplevel, geom->width, geom->height);
}
void
toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen)
{
if (!toplevel || toplevel->fullscreen == fullscreen)
return;
struct absinthe_output *output = toplevel->server->focused_output;
absn_output *output = toplevel->server->focused_output;
toplevel->fullscreen = fullscreen;
wlr_xdg_toplevel_set_fullscreen(toplevel->xdg, fullscreen);
if (fullscreen) {
toplevel->prev_geom = toplevel->geom;
toplevel->bw = 0;
toplevel_set_size(toplevel, output->geom.width,
output->geom.height);
toplevel_set_pos(toplevel, output->geom.x, output->geom.y);
toplevel_set_geom(toplevel, &output->geom);
} else {
toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 :
TOPLEVEL_BW;
toplevel_set_size(toplevel, toplevel->prev_geom.width,
toplevel->prev_geom.height);
toplevel_set_pos(toplevel, toplevel->prev_geom.x,
toplevel->prev_geom.y);
toplevel_set_geom(toplevel, &toplevel->prev_geom);
}
toplevel_update_borders_geom(toplevel);
}
void
toplevel_set_border_color(struct absinthe_toplevel *toplevel,
const float color[4])
toplevel_set_border_color(absn_toplevel *toplevel, const float color[4])
{
if (!toplevel)
return;
+2 -2
View File
@@ -6,7 +6,7 @@ void
deco_request_mode(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
deco_request_mode);
if (toplevel->xdg->base->initialized)
wlr_xdg_toplevel_decoration_v1_set_mode(toplevel->deco,
@@ -17,7 +17,7 @@ void
deco_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
deco_destroy);
wl_list_remove(&toplevel->deco_request_mode.link);
+2 -3
View File
@@ -7,7 +7,7 @@ void
xdg_popup_commit(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_popup *popup = wl_container_of(listener, popup, commit);
absn_popup *popup = wl_container_of(listener, popup, commit);
if (popup->wlr->base->initial_commit)
wlr_xdg_surface_schedule_configure(popup->wlr->base);
@@ -17,8 +17,7 @@ void
xdg_popup_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_popup *popup = wl_container_of(listener, popup,
destroy);
absn_popup *popup = wl_container_of(listener, popup, destroy);
wl_list_remove(&popup->commit.link);
wl_list_remove(&popup->destroy.link);
+1 -2
View File
@@ -9,8 +9,7 @@ void
toplevel_commit(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
commit);
absn_toplevel *toplevel = wl_container_of(listener, toplevel, commit);
if (toplevel->xdg->base->initial_commit) {
wlr_xdg_toplevel_set_activated(toplevel->xdg, false);
+4 -4
View File
@@ -9,7 +9,7 @@ void
xwayland_activate(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
xw_activate);
if (!toplevel_is_unmanaged(toplevel))
@@ -20,7 +20,7 @@ void
xwayland_associate(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
xw_associate);
LISTEN(toplevel->map, toplevel_map, toplevel->xw->surface->events.map);
@@ -32,7 +32,7 @@ void
xwayland_dissociate(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
xw_dissociate);
wl_list_remove(&toplevel->map.link);
@@ -43,7 +43,7 @@ void
xwayland_configure(struct wl_listener *listener, void *data)
{
UNUSED(data);
struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel,
absn_toplevel *toplevel = wl_container_of(listener, toplevel,
xw_configure);
struct wlr_xwayland_surface_configure_event *event = data;