From 73295c26fc2432837486234b541b61c3af8c7fcf Mon Sep 17 00:00:00 2001 From: speckitor Date: Mon, 18 May 2026 23:25:05 +0700 Subject: [PATCH] layer shell --- .clang-format | 1 + include/config.h | 73 ++++++++++--------- include/toplevel.h | 4 +- include/types.h | 11 ++- src/absinthe.c | 63 ++++++---------- src/cursor.c | 6 +- src/focus.c | 7 +- src/keybinds.c | 13 +--- src/keyboard.c | 16 ++-- src/layer-surface.c | 35 +++------ src/layers.c | 31 ++------ src/layout.c | 47 ++++-------- src/output.c | 45 ++++-------- src/seat.c | 9 +-- src/server.c | 157 +++++++++++++--------------------------- src/toplevel-handlers.c | 29 +++----- src/toplevel.c | 54 +++++--------- src/xdg-decoration.c | 6 +- src/xwayland.c | 15 ++-- 19 files changed, 213 insertions(+), 409 deletions(-) diff --git a/.clang-format b/.clang-format index 5c79c02..efe0be2 100644 --- a/.clang-format +++ b/.clang-format @@ -2,6 +2,7 @@ BasedOnStyle: LLVM IndentWidth: 4 TabWidth: 4 UseTab: Never +ColumnLimit: 200 AllowShortFunctionsOnASingleLine: false SortIncludes: true InsertBraces: true diff --git a/include/config.h b/include/config.h index 2ef0a1d..8e981c1 100644 --- a/include/config.h +++ b/include/config.h @@ -32,51 +32,52 @@ static const char *workspaces[] = { }; static const absn_keybind keybinds[] = { - {ALT, XKB_KEY_Escape, quit, {0}}, + {LOGO, XKB_KEY_Escape, quit, {0}}, - {ALT, XKB_KEY_Return, &run, {.v = "alacritty"}}, - {ALT, XKB_KEY_q, kill_focus, {0}}, + {LOGO, XKB_KEY_Return, &run, {.v = "alacritty"}}, + {LOGO, XKB_KEY_d, &run, {.v = "wofi --show drun"}}, + {LOGO, XKB_KEY_q, kill_focus, {0}}, - {ALT, XKB_KEY_j, cycle_focus, {.i = +1}}, - {ALT, XKB_KEY_k, cycle_focus, {.i = -1}}, + {LOGO, XKB_KEY_j, cycle_focus, {.i = +1}}, + {LOGO, XKB_KEY_k, cycle_focus, {.i = -1}}, - {ALT | SHIFT, XKB_KEY_j, swap_focus, {.i = +1}}, - {ALT | SHIFT, XKB_KEY_k, swap_focus, {.i = -1}}, + {LOGO | SHIFT, XKB_KEY_j, swap_focus, {.i = +1}}, + {LOGO | SHIFT, XKB_KEY_k, swap_focus, {.i = -1}}, - {ALT, XKB_KEY_f, toggle_fullscreen, {0}}, - {ALT, XKB_KEY_v, toggle_floating, {0}}, + {LOGO, XKB_KEY_f, toggle_fullscreen, {0}}, + {LOGO, XKB_KEY_v, toggle_floating, {0}}, - {ALT, XKB_KEY_h, increase_master_count, {.i = +1}}, - {ALT, XKB_KEY_l, increase_master_count, {.i = -1}}, + {LOGO, XKB_KEY_h, increase_master_count, {.i = +1}}, + {LOGO, XKB_KEY_l, increase_master_count, {.i = -1}}, - {ALT | SHIFT, XKB_KEY_h, increase_master_width, {.f = -0.05}}, - {ALT | SHIFT, XKB_KEY_l, increase_master_width, {.f = +0.05}}, + {LOGO | SHIFT, XKB_KEY_h, increase_master_width, {.f = -0.05}}, + {LOGO | SHIFT, XKB_KEY_l, increase_master_width, {.f = +0.05}}, - {ALT, XKB_KEY_t, set_layout, {.i = LAYOUT_TILE}}, - {ALT, XKB_KEY_r, set_layout, {.i = LAYOUT_TILELEFT}}, - {ALT, XKB_KEY_m, set_layout, {.i = LAYOUT_MONOCLE}}, + {LOGO, XKB_KEY_t, set_layout, {.i = LAYOUT_TILE}}, + {LOGO, XKB_KEY_r, set_layout, {.i = LAYOUT_TILELEFT}}, + {LOGO, XKB_KEY_m, set_layout, {.i = LAYOUT_MONOCLE}}, - {ALT, XKB_KEY_1, switch_workspace, {.v = "1"}}, - {ALT, XKB_KEY_2, switch_workspace, {.v = "2"}}, - {ALT, XKB_KEY_3, switch_workspace, {.v = "3"}}, - {ALT, XKB_KEY_4, switch_workspace, {.v = "4"}}, - {ALT, XKB_KEY_5, switch_workspace, {.v = "5"}}, - {ALT, XKB_KEY_6, switch_workspace, {.v = "6"}}, - {ALT, XKB_KEY_7, switch_workspace, {.v = "7"}}, - {ALT, XKB_KEY_8, switch_workspace, {.v = "8"}}, - {ALT, XKB_KEY_9, switch_workspace, {.v = "9"}}, - {ALT, XKB_KEY_0, switch_workspace, {.v = "10"}}, + {LOGO, XKB_KEY_1, switch_workspace, {.v = "1"}}, + {LOGO, XKB_KEY_2, switch_workspace, {.v = "2"}}, + {LOGO, XKB_KEY_3, switch_workspace, {.v = "3"}}, + {LOGO, XKB_KEY_4, switch_workspace, {.v = "4"}}, + {LOGO, XKB_KEY_5, switch_workspace, {.v = "5"}}, + {LOGO, XKB_KEY_6, switch_workspace, {.v = "6"}}, + {LOGO, XKB_KEY_7, switch_workspace, {.v = "7"}}, + {LOGO, XKB_KEY_8, switch_workspace, {.v = "8"}}, + {LOGO, XKB_KEY_9, switch_workspace, {.v = "9"}}, + {LOGO, XKB_KEY_0, switch_workspace, {.v = "10"}}, - {ALT | SHIFT, XKB_KEY_exclam, move_focus_to_workspace, {.v = "1"}}, - {ALT | SHIFT, XKB_KEY_at, move_focus_to_workspace, {.v = "2"}}, - {ALT | SHIFT, XKB_KEY_numbersign, move_focus_to_workspace, {.v = "3"}}, - {ALT | SHIFT, XKB_KEY_dollar, move_focus_to_workspace, {.v = "4"}}, - {ALT | SHIFT, XKB_KEY_percent, move_focus_to_workspace, {.v = "5"}}, - {ALT | SHIFT, XKB_KEY_asciicircum, move_focus_to_workspace, {.v = "6"}}, - {ALT | SHIFT, XKB_KEY_ampersand, move_focus_to_workspace, {.v = "7"}}, - {ALT | SHIFT, XKB_KEY_asterisk, move_focus_to_workspace, {.v = "8"}}, - {ALT | SHIFT, XKB_KEY_parenleft, move_focus_to_workspace, {.v = "9"}}, - {ALT | SHIFT, XKB_KEY_parenright, move_focus_to_workspace, {.v = "10"}}, + {LOGO | SHIFT, XKB_KEY_exclam, move_focus_to_workspace, {.v = "1"}}, + {LOGO | SHIFT, XKB_KEY_at, move_focus_to_workspace, {.v = "2"}}, + {LOGO | SHIFT, XKB_KEY_numbersign, move_focus_to_workspace, {.v = "3"}}, + {LOGO | SHIFT, XKB_KEY_dollar, move_focus_to_workspace, {.v = "4"}}, + {LOGO | SHIFT, XKB_KEY_percent, move_focus_to_workspace, {.v = "5"}}, + {LOGO | SHIFT, XKB_KEY_asciicircum, move_focus_to_workspace, {.v = "6"}}, + {LOGO | SHIFT, XKB_KEY_ampersand, move_focus_to_workspace, {.v = "7"}}, + {LOGO | SHIFT, XKB_KEY_asterisk, move_focus_to_workspace, {.v = "8"}}, + {LOGO | SHIFT, XKB_KEY_parenleft, move_focus_to_workspace, {.v = "9"}}, + {LOGO | SHIFT, XKB_KEY_parenright, move_focus_to_workspace, {.v = "10"}}, }; #endif diff --git a/include/toplevel.h b/include/toplevel.h index f595fa7..fa07b36 100644 --- a/include/toplevel.h +++ b/include/toplevel.h @@ -3,9 +3,7 @@ #include "types.h" -absn_toplevel *toplevel_at(absn_server *server, double lx, double ly, - struct wlr_surface **surface, double *sx, - double *sy); +absn_toplevel *toplevel_at(absn_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy); bool toplevel_is_unmanaged(absn_toplevel *toplevel); diff --git a/include/types.h b/include/types.h index 7ca4985..7ed2ed1 100644 --- a/include/types.h +++ b/include/types.h @@ -28,10 +28,10 @@ #define MAX(A, B) (A) > (B) ? (A) : (B) #define MIN(A, B) (A) < (B) ? (A) : (B) /* macro for adding listener for event */ -#define LISTEN(L, C, E) \ - do { \ - (L).notify = (C); \ - wl_signal_add(&(E), &(L)); \ +#define LISTEN(L, C, E) \ + do { \ + (L).notify = (C); \ + wl_signal_add(&(E), &(L)); \ } while (0); #define UNUSED(X) (void)(X) #define CLEANMASK(M) (M & ~WLR_MODIFIER_CAPS) @@ -117,8 +117,8 @@ typedef struct { struct wl_listener new_xdg_deco; struct wlr_layer_shell_v1 *layer_shell; - struct wl_listener new_layer_surface; struct wlr_scene_tree *layers[LAYERS_COUNT]; + struct wl_listener new_layer_surface; #ifdef XWAYLAND struct wlr_xwayland *xwayland; @@ -194,7 +194,6 @@ typedef struct { 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 new_popup; diff --git a/src/absinthe.c b/src/absinthe.c index 32c368b..aa69d57 100644 --- a/src/absinthe.c +++ b/src/absinthe.c @@ -33,8 +33,7 @@ static int setup(absn_server *server) return 1; } - server->backend = wlr_backend_autocreate( - wl_display_get_event_loop(server->display), NULL); + server->backend = wlr_backend_autocreate(wl_display_get_event_loop(server->display), NULL); if (!server->backend) { wlr_log(WLR_ERROR, "Failed to create wlr_backend"); return 1; @@ -49,25 +48,20 @@ static int setup(absn_server *server) wlr_renderer_init_wl_shm(server->renderer, server->display); server->scene = wlr_scene_create(); - if (wlr_renderer_get_texture_formats(server->renderer, - WLR_BUFFER_CAP_DMABUF)) { + if (wlr_renderer_get_texture_formats(server->renderer, WLR_BUFFER_CAP_DMABUF)) { wlr_drm_create(server->display, server->renderer); - wlr_scene_set_linux_dmabuf_v1( - server->scene, wlr_linux_dmabuf_v1_create_with_renderer( - server->display, 5, server->renderer)); + wlr_scene_set_linux_dmabuf_v1(server->scene, wlr_linux_dmabuf_v1_create_with_renderer(server->display, 5, server->renderer)); } server->bg = wlr_scene_rect_create(&server->scene->tree, 0, 0, bgcolor); - server->allocator = - wlr_allocator_autocreate(server->backend, server->renderer); + server->allocator = wlr_allocator_autocreate(server->backend, server->renderer); if (!server->allocator) { wlr_log(WLR_ERROR, "Failed to create wlr_allocator"); return 1; } /* wlroots managers */ - server->compositor = - wlr_compositor_create(server->display, 6, server->renderer); + server->compositor = wlr_compositor_create(server->display, 6, server->renderer); wlr_subcompositor_create(server->display); wlr_data_device_manager_create(server->display); wlr_screencopy_manager_v1_create(server->display); @@ -80,13 +74,9 @@ static int setup(absn_server *server) wlr_export_dmabuf_manager_v1_create(server->display); wlr_ext_foreign_toplevel_list_v1_create(server->display, 1); - wlr_server_decoration_manager_set_default_mode( - wlr_server_decoration_manager_create(server->display), - WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); - server->xdg_deco_mgr = - wlr_xdg_decoration_manager_v1_create(server->display); - LISTEN(server->new_xdg_deco, new_xdg_decoration, - server->xdg_deco_mgr->events.new_toplevel_decoration); + wlr_server_decoration_manager_set_default_mode(wlr_server_decoration_manager_create(server->display), WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); + server->xdg_deco_mgr = wlr_xdg_decoration_manager_v1_create(server->display); + LISTEN(server->new_xdg_deco, new_xdg_decoration, server->xdg_deco_mgr->events.new_toplevel_decoration); /* toplevels lists */ wl_list_init(&server->toplevels); @@ -97,22 +87,18 @@ static int setup(absn_server *server) LISTEN(server->new_output, new_output, server->backend->events.new_output); server->output_layout = wlr_output_layout_create(server->display); - LISTEN(server->layout_change, output_layout_change, - server->output_layout->events.change); + LISTEN(server->layout_change, output_layout_change, server->output_layout->events.change); server->output_mgr = wlr_output_manager_v1_create(server->display); wlr_xdg_output_manager_v1_create(server->display, server->output_layout); - server->scene_layout = - wlr_scene_attach_output_layout(server->scene, server->output_layout); + server->scene_layout = wlr_scene_attach_output_layout(server->scene, server->output_layout); /* xdg_shell */ server->xdg_shell = wlr_xdg_shell_create(server->display, 6); - LISTEN(server->new_xdg_toplevel, new_xdg_toplevel, - server->xdg_shell->events.new_toplevel); - LISTEN(server->new_xdg_popup, new_xdg_popup, - server->xdg_shell->events.new_popup); + LISTEN(server->new_xdg_toplevel, new_xdg_toplevel, server->xdg_shell->events.new_toplevel); + LISTEN(server->new_xdg_popup, new_xdg_popup, server->xdg_shell->events.new_popup); /* cursor */ server->cursor = wlr_cursor_create(); @@ -122,8 +108,7 @@ static int setup(absn_server *server) server->cursor_mode = CURSOR_PASSTHROUGH; LISTEN(server->cursor_motion, cursor_motion, server->cursor->events.motion); - LISTEN(server->cursor_motion_abs, cursor_motion_abs, - server->cursor->events.motion_absolute); + LISTEN(server->cursor_motion_abs, cursor_motion_abs, server->cursor->events.motion_absolute); LISTEN(server->cursor_button, cursor_button, server->cursor->events.button); LISTEN(server->cursor_axis, cursor_axis, server->cursor->events.axis); LISTEN(server->cursor_frame, cursor_frame, server->cursor->events.frame); @@ -132,18 +117,16 @@ static int setup(absn_server *server) wl_list_init(&server->keyboards); server->seat = wlr_seat_create(server->display, "seat0"); LISTEN(server->new_input, new_input, server->backend->events.new_input); - LISTEN(server->request_cursor, request_cursor, - server->seat->events.request_set_cursor); - LISTEN(server->pointer_focus_change, pointer_focus_change, - server->seat->pointer_state.events.focus_change); - LISTEN(server->request_set_selection, request_cursor, - server->seat->events.request_set_selection); + LISTEN(server->request_cursor, request_cursor, server->seat->events.request_set_cursor); + LISTEN(server->pointer_focus_change, pointer_focus_change, server->seat->pointer_state.events.focus_change); + LISTEN(server->request_set_selection, request_cursor, server->seat->events.request_set_selection); /* layer shell */ server->layer_shell = wlr_layer_shell_v1_create(server->display, 5); for (int i = 0; i < LAYERS_COUNT; ++i) { server->layers[i] = wlr_scene_tree_create(&server->scene->tree); } + LISTEN(server->new_layer_surface, new_layer_surface, server->layer_shell->events.new_surface); /* workspaces */ int workspaces_count = sizeof(workspaces) / sizeof(workspaces[0]); @@ -159,16 +142,12 @@ static int setup(absn_server *server) unsetenv("DISPLAY"); #ifdef XWAYLAND - if ((server->xwayland = - wlr_xwayland_create(server->display, server->compositor, 1))) { - LISTEN(server->xw_ready, xwayland_ready, - server->xwayland->events.ready); - LISTEN(server->xw_new_surface, xwayland_new_surface, - server->xwayland->events.new_surface); + if ((server->xwayland = wlr_xwayland_create(server->display, server->compositor, 1))) { + LISTEN(server->xw_ready, xwayland_ready, server->xwayland->events.ready); + LISTEN(server->xw_new_surface, xwayland_new_surface, server->xwayland->events.new_surface); setenv("DISPLAY", server->xwayland->display_name, 1); - wlr_log(WLR_INFO, "Running XWayland, DISPLAY=%s", - server->xwayland->display_name); + wlr_log(WLR_INFO, "Running XWayland, DISPLAY=%s", server->xwayland->display_name); } else { wlr_log(WLR_ERROR, "Failed to setup XWayland, continuing without it"); } diff --git a/src/cursor.c b/src/cursor.c index 8605051..bb801fb 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -59,8 +59,7 @@ static void apply_resize(absn_toplevel *toplevel, struct wlr_box *new_geom) new_geom->x = toplevel->geom.x; } - if (!(new_geom->height >= min_height && - new_geom->height <= max_height)) { + if (!(new_geom->height >= min_height && new_geom->height <= max_height)) { new_geom->height = toplevel->geom.height; new_geom->y = toplevel->geom.y; } @@ -143,8 +142,7 @@ void process_cursor_motion(absn_server *server, uint32_t time) { double sx, sy; struct wlr_surface *surface = NULL; - toplevel_at(server, server->cursor->x, server->cursor->y, &surface, &sx, - &sy); + toplevel_at(server, server->cursor->x, server->cursor->y, &surface, &sx, &sy); struct wlr_seat *seat = server->seat; if (server->cursor_mode == CURSOR_MOVE) { diff --git a/src/focus.c b/src/focus.c index 5dd8e77..abe75f3 100644 --- a/src/focus.c +++ b/src/focus.c @@ -55,9 +55,7 @@ void focus_toplevel(absn_toplevel *toplevel) toplevel_set_border_color(toplevel, focused_bc); if (keyboard) { - wlr_seat_keyboard_notify_enter(seat, surface, keyboard->keycodes, - keyboard->num_keycodes, - &keyboard->modifiers); + wlr_seat_keyboard_notify_enter(seat, surface, keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers); } } @@ -70,8 +68,7 @@ absn_toplevel *focus_get_topmost(absn_server *server) absn_toplevel *toplevel; wl_list_for_each(toplevel, &server->focus_stack, flink) { - if (toplevel && - toplevel->workspace == server->focused_output->workspace) { + if (toplevel && toplevel->workspace == server->focused_output->workspace) { return toplevel; } } diff --git a/src/keybinds.c b/src/keybinds.c index 09004d5..b898a96 100644 --- a/src/keybinds.c +++ b/src/keybinds.c @@ -150,11 +150,8 @@ void toggle_floating(absn_server *server, const absn_arg *arg) toplevel_set_floating(focus, !focus->floating); if (focus->floating) { - int32_t new_x = focus->output->geom.x + - (focus->output->geom.width / 2 - focus->geom.width / 2); - int32_t new_y = - focus->output->geom.y + - (focus->output->geom.height / 2 - focus->geom.height / 2); + int32_t new_x = focus->output->geom.x + (focus->output->geom.width / 2 - focus->geom.width / 2); + int32_t new_y = focus->output->geom.y + (focus->output->geom.height / 2 - focus->geom.height / 2); toplevel_set_pos(focus, new_x, new_y); } } @@ -228,13 +225,11 @@ void switch_workspace(absn_server *server, const absn_arg *arg) absn_toplevel *focus = NULL; wl_list_for_each(toplevel, &server->toplevels, link) { - if (!focus && toplevel && - toplevel->workspace == &server->workspaces[i]) { + if (!focus && toplevel && toplevel->workspace == &server->workspaces[i]) { focus = toplevel; /* found it */ } - if (toplevel && toplevel->workspace == &server->workspaces[i] && - toplevel->fullscreen) { + if (toplevel && toplevel->workspace == &server->workspaces[i] && toplevel->fullscreen) { /* overwrite if there is a fullscreen window */ focus = toplevel; break; diff --git a/src/keyboard.c b/src/keyboard.c index b1dde12..ee3a3c1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -14,18 +14,14 @@ void handle_modifiers(struct wl_listener *listener, void *data) absn_keyboard *keyboard = wl_container_of(listener, keyboard, modifiers); wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr); - wlr_seat_keyboard_notify_modifiers(keyboard->server->seat, - &keyboard->wlr->modifiers); + wlr_seat_keyboard_notify_modifiers(keyboard->server->seat, &keyboard->wlr->modifiers); } -static bool handle_keybind(absn_server *server, uint32_t mods, - xkb_keysym_t keysym) +static bool handle_keybind(absn_server *server, uint32_t mods, xkb_keysym_t keysym) { int nkeyb = sizeof(keybinds) / sizeof(keybinds[0]); for (int i = 0; i < nkeyb; ++i) { - if (CLEANMASK(keybinds[i].mods) == CLEANMASK(mods) && - xkb_keysym_to_lower(keybinds[i].keysym) == - xkb_keysym_to_lower(keysym)) { + if (CLEANMASK(keybinds[i].mods) == CLEANMASK(mods) && xkb_keysym_to_lower(keybinds[i].keysym) == xkb_keysym_to_lower(keysym)) { keybinds[i].cb(server, &keybinds[i].arg); return true; } @@ -47,8 +43,7 @@ void handle_key(struct wl_listener *listener, void *data) bool handled = false; if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { for (int i = 0; i < nsyms; ++i) { - handled = - handle_keybind(keyboard->server, mods, syms[i]) || handled; + handled = handle_keybind(keyboard->server, mods, syms[i]) || handled; } } @@ -57,8 +52,7 @@ void handle_key(struct wl_listener *listener, void *data) } wlr_seat_set_keyboard(keyboard->server->seat, keyboard->wlr); - wlr_seat_keyboard_notify_key(keyboard->server->seat, event->time_msec, - event->keycode, event->state); + wlr_seat_keyboard_notify_key(keyboard->server->seat, event->time_msec, event->keycode, event->state); } void handle_destroy(struct wl_listener *listener, void *data) diff --git a/src/layer-surface.c b/src/layer-surface.c index d67ad73..1fdfdd0 100644 --- a/src/layer-surface.c +++ b/src/layer-surface.c @@ -8,11 +8,9 @@ void layer_surface_unmap(struct wl_listener *listener, void *data) { UNUSED(data); - absn_layer_surface *layer_surface = - wl_container_of(listener, layer_surface, unmap); + absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, unmap); - if (layer_surface->wlr->surface == - layer_surface->server->seat->keyboard_state.focused_surface) { + if (layer_surface->wlr->surface == layer_surface->server->seat->keyboard_state.focused_surface) { focus_toplevel(focus_get_topmost(layer_surface->server)); } if (layer_surface == layer_surface->server->exclusive_focus) { @@ -25,11 +23,9 @@ void layer_surface_unmap(struct wl_listener *listener, void *data) void layer_surface_commit(struct wl_listener *listener, void *data) { UNUSED(data); - absn_layer_surface *layer_surface = - wl_container_of(listener, layer_surface, commit); + absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, commit); struct wlr_layer_surface_v1 *surface = layer_surface->wlr; - struct wlr_scene_tree *scene_layer = - layer_surface->server->layers[layermap[surface->current.layer]]; + struct wlr_scene_tree *scene_layer = layer_surface->server->layers[layermap[surface->current.layer]]; if (surface->initial_commit) { struct wlr_layer_surface_v1_state old_state = surface->current; @@ -39,8 +35,7 @@ void layer_surface_commit(struct wl_listener *listener, void *data) return; } - if (surface->current.committed == 0 || - layer_surface->mapped == surface->surface->mapped) { + if (surface->current.committed == 0 || layer_surface->mapped == surface->surface->mapped) { return; } layer_surface->mapped = surface->surface->mapped; @@ -48,14 +43,10 @@ void layer_surface_commit(struct wl_listener *listener, void *data) if (scene_layer != layer_surface->scene_tree->node.parent) { wlr_scene_node_reparent(&layer_surface->scene_tree->node, scene_layer); wl_list_remove(&layer_surface->link); - wl_list_insert(&layer_surface->output->layers[surface->current.layer], - &layer_surface->link); - bool on_top_layer = - surface->current.layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP; + wl_list_insert(&layer_surface->output->layers[surface->current.layer], &layer_surface->link); + bool on_top_layer = surface->current.layer == ZWLR_LAYER_SHELL_V1_LAYER_TOP; if (on_top_layer) { - wlr_scene_node_reparent( - &layer_surface->popups->node, - layer_surface->output->server->layers[LAYER_TOP]); + wlr_scene_node_reparent(&layer_surface->popups->node, layer_surface->output->server->layers[LAYER_TOP]); } else { wlr_scene_node_reparent(&layer_surface->popups->node, scene_layer); } @@ -67,8 +58,7 @@ void layer_surface_commit(struct wl_listener *listener, void *data) void layer_surface_new_popup(struct wl_listener *listener, void *data) { UNUSED(data); - absn_layer_surface *layer_surface = - wl_container_of(listener, layer_surface, new_popup); + absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, new_popup); struct wlr_xdg_popup *xdg_popup = data; wlr_scene_xdg_surface_create(layer_surface->popups, xdg_popup->base); @@ -78,18 +68,15 @@ void layer_surface_new_popup(struct wl_listener *listener, void *data) popup->parent_type = LAYER_SURFACE; popup->parent = layer_surface; - LISTEN(popup->commit, xdg_popup_commit, - xdg_popup->base->surface->events.commit); + LISTEN(popup->commit, xdg_popup_commit, xdg_popup->base->surface->events.commit); } void layer_surface_destroy(struct wl_listener *listener, void *data) { UNUSED(data); - absn_layer_surface *layer_surface = - wl_container_of(listener, layer_surface, destroy); + absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, destroy); wl_list_remove(&layer_surface->link); - wl_list_remove(&layer_surface->map.link); wl_list_remove(&layer_surface->unmap.link); wl_list_remove(&layer_surface->commit.link); wl_list_remove(&layer_surface->new_popup.link); diff --git a/src/layers.c b/src/layers.c index aabcf51..297ac8f 100644 --- a/src/layers.c +++ b/src/layers.c @@ -7,27 +7,19 @@ /* arrange layers logic from dwl */ -static void layer_arrange(absn_output *output, struct wl_list *list, - struct wlr_box *usable_area, int exclusive) +static void layer_arrange(absn_output *output, struct wl_list *list, struct wlr_box *usable_area, int exclusive) { absn_layer_surface *layer_surface; wl_list_for_each(layer_surface, list, link) { struct wlr_layer_surface_v1 *surface = layer_surface->wlr; - if (!surface->initialized) { - continue; - } - if (exclusive != (surface->current.exclusive_zone > 0)) { continue; } - wlr_scene_layer_surface_v1_configure(layer_surface->scene_layer, - &output->geom, usable_area); - wlr_scene_node_set_position(&layer_surface->popups->node, - layer_surface->scene_tree->node.x, - layer_surface->scene_tree->node.y); + wlr_scene_layer_surface_v1_configure(layer_surface->scene_layer, &output->geom, usable_area); + wlr_scene_node_set_position(&layer_surface->popups->node, layer_surface->scene_tree->node.x, layer_surface->scene_tree->node.y); } } @@ -59,27 +51,20 @@ void layers_arrange(absn_output *output) ZWLR_LAYER_SHELL_V1_LAYER_TOP, }; - int layers_above_shell_count = - sizeof(layers_above_shell) / sizeof(layers_above_shell[0]); + int layers_above_shell_count = sizeof(layers_above_shell) / sizeof(layers_above_shell[0]); absn_layer_surface *layer_surface; for (int i = 0; i < layers_above_shell_count; ++i) { - wl_list_for_each_reverse(layer_surface, - &output->layers[layers_above_shell[i]], link) + wl_list_for_each_reverse(layer_surface, &output->layers[layers_above_shell[i]], link) { - if (!layer_surface->wlr->current.keyboard_interactive || - !layer_surface->mapped) { + if (!layer_surface->wlr->current.keyboard_interactive || !layer_surface->mapped) { continue; } unfocus_toplevel(output->server->focused_toplevel); output->server->exclusive_focus = layer_surface; - struct wlr_keyboard *keyboard = - wlr_seat_get_keyboard(output->server->seat); + struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(output->server->seat); if (keyboard) { - wlr_seat_keyboard_notify_enter( - output->server->seat, layer_surface->wlr->surface, - keyboard->keycodes, keyboard->num_keycodes, - &keyboard->modifiers); + wlr_seat_keyboard_notify_enter(output->server->seat, layer_surface->wlr->surface, keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers); } return; } diff --git a/src/layout.c b/src/layout.c index de26cc4..6cfb5c1 100644 --- a/src/layout.c +++ b/src/layout.c @@ -17,8 +17,7 @@ static int prepare_output(struct absn_output *output) if (!toplevel->floating && !toplevel->fullscreen) { res++; } - } else if (toplevel->output == output && - toplevel->workspace != output->workspace) { + } else if (toplevel->output == output && toplevel->workspace != output->workspace) { wlr_scene_node_set_enabled(&toplevel->scene_tree->node, false); } } @@ -41,15 +40,11 @@ static void tile(struct absn_output *output) if (toplevels_count == 1) { wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace == output->workspace && - !toplevel->floating && !toplevel->fullscreen) { + if (toplevel->workspace == output->workspace && !toplevel->floating && !toplevel->fullscreen) { break; } } - new_geom.x = output->usable_area.x + og, - new_geom.y = output->usable_area.y + og, - new_geom.width = output->usable_area.width - 2 * og, - new_geom.height = output->usable_area.height - 2 * og, + new_geom.x = output->usable_area.x + og, new_geom.y = output->usable_area.y + og, new_geom.width = output->usable_area.width - 2 * og, new_geom.height = output->usable_area.height - 2 * og, toplevel_set_geom(toplevel, &new_geom); return; @@ -61,10 +56,7 @@ static void tile(struct absn_output *output) int mcount = output->workspace->count; float msize = output->workspace->size; - int32_t main_stack_width = - (toplevels_count <= mcount) - ? output->usable_area.width - 2 * og - : msize * (output->usable_area.width - 2 * og); + int32_t main_stack_width = (toplevels_count <= mcount) ? output->usable_area.width - 2 * og : msize * (output->usable_area.width - 2 * og); int32_t w = output->usable_area.width - main_stack_width - 2 * og - lg; int32_t pure_h; @@ -83,8 +75,7 @@ static void tile(struct absn_output *output) wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace != output->workspace || - toplevel->floating || toplevel->fullscreen) { + if (toplevel->workspace != output->workspace || toplevel->floating || toplevel->fullscreen) { continue; } @@ -106,8 +97,7 @@ static void tile(struct absn_output *output) wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace != output->workspace || toplevel->floating || - toplevel->fullscreen) { + if (toplevel->workspace != output->workspace || toplevel->floating || toplevel->fullscreen) { continue; } @@ -169,15 +159,11 @@ static void tile_left(struct absn_output *output) if (toplevels_count == 1) { wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace == output->workspace && - !toplevel->floating && !toplevel->fullscreen) { + if (toplevel->workspace == output->workspace && !toplevel->floating && !toplevel->fullscreen) { break; } } - new_geom.x = output->usable_area.x + og, - new_geom.y = output->usable_area.y + og, - new_geom.width = output->usable_area.width - 2 * og, - new_geom.height = output->usable_area.height - 2 * og, + new_geom.x = output->usable_area.x + og, new_geom.y = output->usable_area.y + og, new_geom.width = output->usable_area.width - 2 * og, new_geom.height = output->usable_area.height - 2 * og, toplevel_set_geom(toplevel, &new_geom); return; @@ -189,10 +175,7 @@ static void tile_left(struct absn_output *output) int mcount = output->workspace->count; float msize = output->workspace->size; - int32_t main_stack_width = - (toplevels_count <= mcount) - ? output->usable_area.width - 2 * og - : msize * (output->usable_area.width - 2 * og); + int32_t main_stack_width = (toplevels_count <= mcount) ? output->usable_area.width - 2 * og : msize * (output->usable_area.width - 2 * og); int32_t w = output->usable_area.width - main_stack_width - 2 * og - lg; int32_t pure_h; @@ -211,8 +194,7 @@ static void tile_left(struct absn_output *output) wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace != output->workspace || - toplevel->floating || toplevel->fullscreen) { + if (toplevel->workspace != output->workspace || toplevel->floating || toplevel->fullscreen) { continue; } @@ -234,8 +216,7 @@ static void tile_left(struct absn_output *output) wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace != output->workspace || toplevel->floating || - toplevel->fullscreen) { + if (toplevel->workspace != output->workspace || toplevel->floating || toplevel->fullscreen) { continue; } @@ -247,8 +228,7 @@ static void tile_left(struct absn_output *output) cur_h = h + (i < r ? 1 : 0); - new_geom.x = output->usable_area.x + output->usable_area.width - - og - main_stack_width; + new_geom.x = output->usable_area.x + output->usable_area.width - og - main_stack_width; new_geom.y = output->usable_area.y + dy; new_geom.width = main_stack_width; new_geom.height = cur_h; @@ -303,8 +283,7 @@ static void monocle(struct absn_output *output) absn_toplevel *toplevel; wl_list_for_each(toplevel, &output->server->toplevels, link) { - if (toplevel->workspace != output->workspace || toplevel->floating || - toplevel->fullscreen) { + if (toplevel->workspace != output->workspace || toplevel->floating || toplevel->fullscreen) { continue; } diff --git a/src/output.c b/src/output.c index d30039b..2452ba2 100644 --- a/src/output.c +++ b/src/output.c @@ -30,8 +30,7 @@ skip: void output_request_state(struct wl_listener *listener, void *data) { - struct absn_output *output = - wl_container_of(listener, output, request_state); + 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); } @@ -39,8 +38,7 @@ void output_request_state(struct wl_listener *listener, void *data) void output_destroy(struct wl_listener *listener, void *data) { UNUSED(data); - struct absn_output *output = - wl_container_of(listener, output, request_state); + struct absn_output *output = wl_container_of(listener, output, request_state); wl_list_remove(&output->frame.link); wl_list_remove(&output->request_state.link); @@ -53,8 +51,7 @@ void output_layout_change(struct wl_listener *listener, void *data) { UNUSED(data); absn_server *server = wl_container_of(listener, server, layout_change); - struct wlr_output_configuration_v1 *config = - wlr_output_configuration_v1_create(); + struct wlr_output_configuration_v1 *config = wlr_output_configuration_v1_create(); absn_toplevel *toplevel = NULL; absn_output *output; @@ -65,8 +62,7 @@ void output_layout_change(struct wl_listener *listener, void *data) if (output->wlr->enabled) { continue; } - config_head = - wlr_output_configuration_head_v1_create(config, output->wlr); + config_head = wlr_output_configuration_head_v1_create(config, output->wlr); config_head->state.enabled = 0; wlr_output_layout_remove(server->output_layout, output->wlr); @@ -76,18 +72,15 @@ void output_layout_change(struct wl_listener *listener, void *data) wl_list_for_each(output, &server->outputs, link) { - if (output->wlr->enabled && - !wlr_output_layout_get(server->output_layout, output->wlr)) { - wlr_output_layout_add_auto(server->output_layout, - toplevel->output->wlr); + if (output->wlr->enabled && !wlr_output_layout_get(server->output_layout, output->wlr)) { + wlr_output_layout_add_auto(server->output_layout, toplevel->output->wlr); } } struct wlr_box layout_geom; wlr_output_layout_get_box(server->output_layout, NULL, &layout_geom); - wlr_scene_node_set_position(&server->bg->node, layout_geom.x, - layout_geom.y); + wlr_scene_node_set_position(&server->bg->node, layout_geom.x, layout_geom.y); wlr_scene_rect_set_size(server->bg, layout_geom.width, layout_geom.height); wl_list_for_each(output, &server->outputs, link) @@ -95,16 +88,13 @@ void output_layout_change(struct wl_listener *listener, void *data) if (!output->wlr->enabled) { continue; } - config_head = - wlr_output_configuration_head_v1_create(config, output->wlr); + config_head = wlr_output_configuration_head_v1_create(config, output->wlr); - wlr_output_layout_get_box(server->output_layout, output->wlr, - &output->geom); + wlr_output_layout_get_box(server->output_layout, output->wlr, &output->geom); output->usable_area = output->geom; if ((toplevel = focus_get_topmost(server)) && toplevel->fullscreen) { - toplevel_set_size(toplevel, output->geom.width, - output->geom.height); + toplevel_set_size(toplevel, output->geom.width, output->geom.height); } config_head->state.x = output->geom.x; @@ -137,12 +127,8 @@ void update_focused_output(absn_server *server) int32_t cursor_y = server->cursor->y; wl_list_for_each(output, &server->outputs, link) { - bool cursor_in_output_x = - cursor_x >= output->geom.x && - cursor_x <= output->geom.x + output->geom.width; - bool cursor_in_output_y = - cursor_y >= output->geom.y && - cursor_y <= output->geom.y + output->geom.height; + bool cursor_in_output_x = cursor_x >= output->geom.x && cursor_x <= output->geom.x + output->geom.width; + bool cursor_in_output_y = cursor_y >= output->geom.y && cursor_y <= output->geom.y + output->geom.height; if (cursor_in_output_x && cursor_in_output_y) { server->focused_output = output; break; @@ -168,12 +154,9 @@ void output_arrange(absn_output *output) wl_list_for_each(toplevel, &server->toplevels, link) { - if (toplevel->output != output || - toplevel->scene_tree->node.parent == - server->layers[LAYER_FULLSCREEN]) { + if (toplevel->output != output || toplevel->scene_tree->node.parent == server->layers[LAYER_FULLSCREEN]) { continue; } - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->scene_tree->node.parent); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->scene_tree->node.parent); } } diff --git a/src/seat.c b/src/seat.c index ce7116d..77c93e7 100644 --- a/src/seat.c +++ b/src/seat.c @@ -10,15 +10,13 @@ void request_cursor(struct wl_listener *listener, void *data) struct wlr_seat_client *client = server->seat->pointer_state.focused_client; if (client == event->seat_client) { - wlr_cursor_set_surface(server->cursor, event->surface, event->hotspot_x, - event->hotspot_y); + wlr_cursor_set_surface(server->cursor, event->surface, event->hotspot_x, event->hotspot_y); } } void pointer_focus_change(struct wl_listener *listener, void *data) { - absn_server *server = - wl_container_of(listener, server, pointer_focus_change); + absn_server *server = wl_container_of(listener, server, pointer_focus_change); struct wlr_seat_pointer_focus_change_event *event = data; if (!event->new_surface) { @@ -28,8 +26,7 @@ void pointer_focus_change(struct wl_listener *listener, void *data) void request_set_selection(struct wl_listener *listener, void *data) { - absn_server *server = - wl_container_of(listener, server, request_set_selection); + absn_server *server = wl_container_of(listener, server, request_set_selection); struct wlr_seat_request_set_selection_event *event = data; wlr_seat_set_selection(server->seat, event->source, event->serial); diff --git a/src/server.c b/src/server.c index 3709326..c504676 100644 --- a/src/server.c +++ b/src/server.c @@ -46,6 +46,7 @@ void new_output(struct wl_listener *listener, void *data) struct absn_output *output = calloc(1, sizeof(*output)); output->wlr = wlr_output; output->server = server; + wlr_output->data = output; for (int i = 0; i < server->workspaces_count; ++i) { if (!server->workspaces[i].output) { @@ -56,8 +57,7 @@ void new_output(struct wl_listener *listener, void *data) } LISTEN(output->frame, output_frame, wlr_output->events.frame); - LISTEN(output->request_state, output_request_state, - wlr_output->events.request_state); + LISTEN(output->request_state, output_request_state, wlr_output->events.request_state); LISTEN(output->destroy, output_destroy, wlr_output->events.destroy); wl_list_insert(&server->outputs, &output->link); @@ -66,14 +66,10 @@ void new_output(struct wl_listener *listener, void *data) wl_list_init(&output->layers[i]); } - struct wlr_output_layout_output *l_layout = - wlr_output_layout_add_auto(server->output_layout, output->wlr); - struct wlr_scene_output *scene_output = - wlr_scene_output_create(server->scene, wlr_output); - wlr_scene_output_layout_add_output(server->scene_layout, l_layout, - scene_output); - wlr_output_layout_get_box(server->output_layout, output->wlr, - &output->geom); + struct wlr_output_layout_output *l_layout = wlr_output_layout_add_auto(server->output_layout, output->wlr); + struct wlr_scene_output *scene_output = wlr_scene_output_create(server->scene, wlr_output); + wlr_scene_output_layout_add_output(server->scene_layout, l_layout, scene_output); + wlr_output_layout_get_box(server->output_layout, output->wlr, &output->geom); output->usable_area = output->geom; } @@ -91,21 +87,14 @@ void new_xdg_toplevel(struct wl_listener *listener, void *data) wlr_surface_set_preferred_buffer_scale(toplevel->xdg->base->surface, 1); - LISTEN(toplevel->commit, toplevel_commit, - xdg_toplevel->base->surface->events.commit); - LISTEN(toplevel->map, toplevel_map, - xdg_toplevel->base->surface->events.map); - LISTEN(toplevel->unmap, toplevel_unmap, - xdg_toplevel->base->surface->events.unmap); + LISTEN(toplevel->commit, toplevel_commit, xdg_toplevel->base->surface->events.commit); + LISTEN(toplevel->map, toplevel_map, xdg_toplevel->base->surface->events.map); + LISTEN(toplevel->unmap, toplevel_unmap, xdg_toplevel->base->surface->events.unmap); LISTEN(toplevel->destroy, toplevel_destroy, xdg_toplevel->events.destroy); - LISTEN(toplevel->request_move, toplevel_request_move, - xdg_toplevel->events.request_move); - LISTEN(toplevel->request_resize, toplevel_request_resize, - xdg_toplevel->events.request_resize); - LISTEN(toplevel->request_maximize, toplevel_request_maximize, - xdg_toplevel->events.request_maximize); - LISTEN(toplevel->request_fullscreen, toplevel_request_fullscreen, - xdg_toplevel->events.request_fullscreen); + LISTEN(toplevel->request_move, toplevel_request_move, xdg_toplevel->events.request_move); + LISTEN(toplevel->request_resize, toplevel_request_resize, xdg_toplevel->events.request_resize); + LISTEN(toplevel->request_maximize, toplevel_request_maximize, xdg_toplevel->events.request_maximize); + LISTEN(toplevel->request_fullscreen, toplevel_request_fullscreen, xdg_toplevel->events.request_fullscreen); } void new_xdg_popup(struct wl_listener *listener, void *data) @@ -113,8 +102,7 @@ void new_xdg_popup(struct wl_listener *listener, void *data) absn_server *server = wl_container_of(listener, server, new_xdg_popup); struct wlr_xdg_popup *xdg_popup = data; - struct wlr_xdg_surface *parent = - wlr_xdg_surface_try_from_wlr_surface(xdg_popup->parent); + struct wlr_xdg_surface *parent = wlr_xdg_surface_try_from_wlr_surface(xdg_popup->parent); if (!parent) { return; } @@ -127,8 +115,7 @@ void new_xdg_popup(struct wl_listener *listener, void *data) popup->parent_type = TOPLEVEL_XDG; popup->parent = toplevel; - LISTEN(popup->commit, xdg_popup_commit, - xdg_popup->base->surface->events.commit); + LISTEN(popup->commit, xdg_popup_commit, xdg_popup->base->surface->events.commit); } void new_xdg_decoration(struct wl_listener *listener, void *data) @@ -138,8 +125,7 @@ void new_xdg_decoration(struct wl_listener *listener, void *data) absn_toplevel *toplevel = deco->toplevel->base->data; toplevel->deco = deco; - LISTEN(toplevel->deco_request_mode, deco_request_mode, - deco->events.request_mode); + LISTEN(toplevel->deco_request_mode, deco_request_mode, deco->events.request_mode); LISTEN(toplevel->deco_destroy, deco_destroy, deco->events.destroy); /* Forse server side decoration mode */ @@ -157,32 +143,21 @@ void new_layer_surface(struct wl_listener *listener, void *data) } absn_layer_surface *layer_surface = calloc(1, sizeof(*layer_surface)); - - LISTEN(layer_surface->unmap, layer_surface_unmap, - surface->surface->events.unmap); - LISTEN(layer_surface->commit, layer_surface_commit, - surface->surface->events.commit); - LISTEN(layer_surface->new_popup, layer_surface_new_popup, - surface->events.new_popup); - LISTEN(layer_surface->destroy, layer_surface_destroy, - surface->surface->events.destroy); - + layer_surface->server = server; layer_surface->wlr = surface; layer_surface->output = surface->output->data; - struct wlr_scene_tree *scene_layer = - server->layers[layermap[surface->pending.layer]]; - layer_surface->scene_layer = - wlr_scene_layer_surface_v1_create(scene_layer, surface); + LISTEN(layer_surface->unmap, layer_surface_unmap, surface->surface->events.unmap); + LISTEN(layer_surface->commit, layer_surface_commit, surface->surface->events.commit); + LISTEN(layer_surface->new_popup, layer_surface_new_popup, surface->events.new_popup); + LISTEN(layer_surface->destroy, layer_surface_destroy, surface->events.destroy); + + struct wlr_scene_tree *scene_layer = server->layers[layermap[surface->pending.layer]]; + layer_surface->scene_layer = wlr_scene_layer_surface_v1_create(scene_layer, surface); layer_surface->scene_tree = layer_surface->scene_layer->tree; + layer_surface->popups = wlr_scene_tree_create(surface->current.layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP ? server->layers[LAYER_TOP] : scene_layer); - layer_surface->popups = wlr_scene_tree_create( - surface->current.layer < ZWLR_LAYER_SHELL_V1_LAYER_TOP - ? server->layers[LAYER_TOP] - : scene_layer); - - wl_list_insert(&layer_surface->output->layers[surface->pending.layer], - &layer_surface->link); + wl_list_insert(&layer_surface->output->layers[surface->pending.layer], &layer_surface->link); wlr_surface_send_enter(surface->surface, surface->output); } @@ -195,13 +170,9 @@ void xwayland_ready(struct wl_listener *listener, void *data) wlr_xwayland_set_seat(server->xwayland, server->seat); struct wlr_xcursor *xcursor; - if ((xcursor = wlr_xcursor_manager_get_xcursor(server->cursor_mgr, - "default", 1))) { - struct wlr_buffer *buffer = - wlr_xcursor_image_get_buffer(xcursor->images[0]); - wlr_xwayland_set_cursor(server->xwayland, buffer, - xcursor->images[0]->hotspot_x, - xcursor->images[0]->hotspot_y); + if ((xcursor = wlr_xcursor_manager_get_xcursor(server->cursor_mgr, "default", 1))) { + struct wlr_buffer *buffer = wlr_xcursor_image_get_buffer(xcursor->images[0]); + wlr_xwayland_set_cursor(server->xwayland, buffer, xcursor->images[0]->hotspot_x, xcursor->images[0]->hotspot_y); } } @@ -218,21 +189,14 @@ void xwayland_new_surface(struct wl_listener *listener, void *data) surface->data = toplevel; LISTEN(toplevel->destroy, toplevel_destroy, surface->events.destroy); - LISTEN(toplevel->request_maximize, toplevel_request_maximize, - surface->events.request_maximize); - LISTEN(toplevel->request_fullscreen, toplevel_request_fullscreen, - surface->events.request_fullscreen); + LISTEN(toplevel->request_maximize, toplevel_request_maximize, surface->events.request_maximize); + LISTEN(toplevel->request_fullscreen, toplevel_request_fullscreen, surface->events.request_fullscreen); - LISTEN(toplevel->xw_activate, xwayland_activate, - surface->events.request_activate); - LISTEN(toplevel->xw_associate, xwayland_associate, - surface->events.associate); - LISTEN(toplevel->xw_dissociate, xwayland_dissociate, - surface->events.dissociate); - LISTEN(toplevel->xw_configure, xwayland_configure, - surface->events.request_configure); - LISTEN(toplevel->xw_set_hints, xwayland_set_hints, - surface->events.set_hints); + LISTEN(toplevel->xw_activate, xwayland_activate, surface->events.request_activate); + LISTEN(toplevel->xw_associate, xwayland_associate, surface->events.associate); + LISTEN(toplevel->xw_dissociate, xwayland_dissociate, surface->events.dissociate); + LISTEN(toplevel->xw_configure, xwayland_configure, surface->events.request_configure); + LISTEN(toplevel->xw_set_hints, xwayland_set_hints, surface->events.set_hints); } #endif @@ -241,8 +205,7 @@ void cursor_motion(struct wl_listener *listener, void *data) 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, - event->delta_y); + wlr_cursor_move(server->cursor, &event->pointer->base, event->delta_x, event->delta_y); process_cursor_motion(server, event->time_msec); } @@ -251,8 +214,7 @@ void cursor_motion_abs(struct wl_listener *listener, void *data) absn_server *server = wl_container_of(listener, server, cursor_motion_abs); struct wlr_pointer_motion_absolute_event *event = data; update_focused_output(server); - wlr_cursor_warp_absolute(server->cursor, &event->pointer->base, event->x, - event->y); + wlr_cursor_warp_absolute(server->cursor, &event->pointer->base, event->x, event->y); process_cursor_motion(server, event->time_msec); } @@ -267,8 +229,7 @@ void cursor_button(struct wl_listener *listener, void *data) } else { double sx, sy; struct wlr_surface *surface = NULL; - absn_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; @@ -279,8 +240,7 @@ void cursor_button(struct wl_listener *listener, void *data) if (mods & CURSOR_MOD) { if (event->button == CURSOR_MOVE_BUTTON) { server->cursor_mode = CURSOR_MOVE; - wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, - "all-scroll"); + wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "all-scroll"); handled = true; } else if (event->button == CURSOR_RESIZE_BUTTON) { server->cursor_mode = CURSOR_RESIZE; @@ -306,25 +266,18 @@ void cursor_button(struct wl_listener *listener, void *data) int32_t width = toplevel->xdg->base->geometry.width; int32_t height = toplevel->xdg->base->geometry.height; - if (server->grab_x > (lx + width / 2) && - server->grab_y > (ly + height / 2)) { + if (server->grab_x > (lx + width / 2) && server->grab_y > (ly + height / 2)) { server->resize_corner = BOTTOM_RIGHT; - wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, - "se-resize"); - } else if (server->grab_x < (lx + width / 2) && - server->grab_y > (ly + height / 2)) { + wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "se-resize"); + } else if (server->grab_x < (lx + width / 2) && server->grab_y > (ly + height / 2)) { server->resize_corner = BOTTOM_LEFT; - wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, - "sw-resize"); - } else if (server->grab_x > (lx + width / 2) && - server->grab_y < (ly + height / 2)) { + wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "sw-resize"); + } else if (server->grab_x > (lx + width / 2) && server->grab_y < (ly + height / 2)) { server->resize_corner = TOP_RIGHT; - wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, - "ne-resize"); + wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "ne-resize"); } else { server->resize_corner = TOP_LEFT; - wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, - "nw-resize"); + wlr_cursor_set_xcursor(server->cursor, server->cursor_mgr, "nw-resize"); } wlr_xdg_toplevel_set_resizing(toplevel->xdg, true); @@ -332,8 +285,7 @@ void cursor_button(struct wl_listener *listener, void *data) handle: if (!handled) { - wlr_seat_pointer_notify_button(server->seat, event->time_msec, - event->button, event->state); + wlr_seat_pointer_notify_button(server->seat, event->time_msec, event->button, event->state); } } @@ -341,9 +293,7 @@ void cursor_axis(struct wl_listener *listener, void *data) { 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, event->source, event->relative_direction); + wlr_seat_pointer_notify_axis(server->seat, event->time_msec, event->orientation, event->delta, event->delta_discrete, event->source, event->relative_direction); } void cursor_frame(struct wl_listener *listener, void *data) @@ -361,19 +311,16 @@ static void new_keyboard(absn_server *server, struct wlr_input_device *device) keyboard->wlr = wlr_keyboard; struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); - struct xkb_keymap *keymap = - xkb_keymap_new_from_names(context, NULL, XKB_KEYMAP_COMPILE_NO_FLAGS); + struct xkb_keymap *keymap = xkb_keymap_new_from_names(context, NULL, XKB_KEYMAP_COMPILE_NO_FLAGS); wlr_keyboard_set_keymap(wlr_keyboard, keymap); xkb_keymap_unref(keymap); xkb_context_unref(context); wlr_keyboard_set_repeat_info(wlr_keyboard, 25, 600); - LISTEN(keyboard->modifiers, handle_modifiers, - wlr_keyboard->events.modifiers); + LISTEN(keyboard->modifiers, handle_modifiers, wlr_keyboard->events.modifiers); LISTEN(keyboard->key, handle_key, wlr_keyboard->events.key); - LISTEN(keyboard->destroy, handle_destroy, - wlr_keyboard->base.events.destroy); + LISTEN(keyboard->destroy, handle_destroy, wlr_keyboard->base.events.destroy); wlr_seat_set_keyboard(server->seat, wlr_keyboard); diff --git a/src/toplevel-handlers.c b/src/toplevel-handlers.c index b669e81..4300b5c 100644 --- a/src/toplevel-handlers.c +++ b/src/toplevel-handlers.c @@ -15,15 +15,10 @@ void toplevel_map(struct wl_listener *listener, void *data) toplevel->scene_tree = wlr_scene_tree_create(server->layers[LAYER_TILE]); toplevel->scene_tree->node.data = toplevel; - wlr_scene_node_set_enabled(&toplevel->scene_tree->node, - toplevel_is_unmanaged(toplevel)); + wlr_scene_node_set_enabled(&toplevel->scene_tree->node, toplevel_is_unmanaged(toplevel)); - if (toplevel->type != TOPLEVEL_X11 && - wl_resource_get_version(toplevel->xdg->resource) >= - XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION) { - wlr_xdg_toplevel_set_tiled(toplevel->xdg, - WLR_EDGE_TOP | WLR_EDGE_BOTTOM | - WLR_EDGE_LEFT | WLR_EDGE_RIGHT); + if (toplevel->type != TOPLEVEL_X11 && wl_resource_get_version(toplevel->xdg->resource) >= XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION) { + wlr_xdg_toplevel_set_tiled(toplevel->xdg, WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT); } else { wlr_xdg_toplevel_set_maximized(toplevel->xdg, true); } @@ -32,13 +27,11 @@ void toplevel_map(struct wl_listener *listener, void *data) #ifdef XWAYLAND if (toplevel->type == TOPLEVEL_X11) { - toplevel->scene_surface = wlr_scene_subsurface_tree_create( - toplevel->scene_tree, toplevel->xw->surface); + toplevel->scene_surface = wlr_scene_subsurface_tree_create(toplevel->scene_tree, toplevel->xw->surface); } else #endif { - toplevel->scene_surface = wlr_scene_xdg_surface_create( - toplevel->scene_tree, toplevel->xdg->base); + toplevel->scene_surface = wlr_scene_xdg_surface_create(toplevel->scene_tree, toplevel->xdg->base); } toplevel->scene_surface->node.data = toplevel; @@ -46,8 +39,7 @@ void toplevel_map(struct wl_listener *listener, void *data) toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW; for (int i = 0; i < 4; ++i) { - toplevel->border[i] = - wlr_scene_rect_create(toplevel->scene_tree, 0, 0, unfocused_bc); + toplevel->border[i] = wlr_scene_rect_create(toplevel->scene_tree, 0, 0, unfocused_bc); toplevel->border[i]->node.data = toplevel; } @@ -127,8 +119,7 @@ void toplevel_request_move(struct wl_listener *listener, void *data) void toplevel_request_resize(struct wl_listener *listener, void *data) { UNUSED(data); - absn_toplevel *toplevel = - wl_container_of(listener, toplevel, request_resize); + absn_toplevel *toplevel = wl_container_of(listener, toplevel, request_resize); if (toplevel->xdg->base->initialized) { wlr_xdg_surface_schedule_configure(toplevel->xdg->base); } @@ -137,8 +128,7 @@ void toplevel_request_resize(struct wl_listener *listener, void *data) void toplevel_request_maximize(struct wl_listener *listener, void *data) { UNUSED(data); - absn_toplevel *toplevel = - wl_container_of(listener, toplevel, request_maximize); + absn_toplevel *toplevel = wl_container_of(listener, toplevel, request_maximize); if (toplevel->xdg->base->initialized) { wlr_xdg_surface_schedule_configure(toplevel->xdg->base); } @@ -147,7 +137,6 @@ void toplevel_request_maximize(struct wl_listener *listener, void *data) void toplevel_request_fullscreen(struct wl_listener *listener, void *data) { UNUSED(data); - absn_toplevel *toplevel = - wl_container_of(listener, toplevel, request_fullscreen); + absn_toplevel *toplevel = wl_container_of(listener, toplevel, request_fullscreen); toplevel_set_fullscreen(toplevel, toplevel->xdg->requested.fullscreen); } diff --git a/src/toplevel.c b/src/toplevel.c index 8cf8cb0..d294514 100644 --- a/src/toplevel.c +++ b/src/toplevel.c @@ -12,11 +12,9 @@ * 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) +absn_toplevel *toplevel_at(absn_server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy) { - struct wlr_scene_node *node = - wlr_scene_node_at(&server->scene->tree.node, lx, ly, sx, sy); + struct wlr_scene_node *node = wlr_scene_node_at(&server->scene->tree.node, lx, ly, sx, sy); if (!node) { return NULL; } @@ -34,7 +32,7 @@ absn_toplevel *toplevel_at(absn_server *server, double lx, double ly, *surface = scene_surface->surface; struct wlr_scene_tree *tree = node->parent; - while (tree != NULL && tree->node.data == NULL) { + while (tree && !tree->node.data) { tree = tree->node.parent; } return tree->node.data; @@ -82,28 +80,22 @@ static void toplevel_update_borders_geom(absn_toplevel *toplevel) { int32_t bw = toplevel->bw; - if (toplevel->geom.width - 2 * bw < 0 || - toplevel->geom.height - 2 * bw < 0) { + if (toplevel->geom.width - 2 * bw < 0 || toplevel->geom.height - 2 * bw < 0) { return; } - wlr_scene_node_set_position(&toplevel->scene_tree->node, toplevel->geom.x, - toplevel->geom.y); + wlr_scene_node_set_position(&toplevel->scene_tree->node, toplevel->geom.x, toplevel->geom.y); wlr_scene_node_set_position(&toplevel->scene_surface->node, bw, bw); - wlr_scene_rect_set_size(toplevel->border[0], toplevel->geom.width - 2 * bw, - bw); - wlr_scene_rect_set_size(toplevel->border[1], toplevel->geom.width - 2 * bw, - bw); + wlr_scene_rect_set_size(toplevel->border[0], toplevel->geom.width - 2 * bw, bw); + wlr_scene_rect_set_size(toplevel->border[1], toplevel->geom.width - 2 * bw, bw); wlr_scene_rect_set_size(toplevel->border[2], bw, toplevel->geom.height); wlr_scene_rect_set_size(toplevel->border[3], bw, toplevel->geom.height); wlr_scene_node_set_position(&toplevel->border[0]->node, bw, 0); - wlr_scene_node_set_position(&toplevel->border[1]->node, bw, - toplevel->geom.height - bw); + wlr_scene_node_set_position(&toplevel->border[1]->node, bw, toplevel->geom.height - bw); wlr_scene_node_set_position(&toplevel->border[2]->node, 0, 0); - wlr_scene_node_set_position(&toplevel->border[3]->node, - toplevel->geom.width - bw, 0); + wlr_scene_node_set_position(&toplevel->border[3]->node, toplevel->geom.width - bw, 0); } void toplevel_set_pos(absn_toplevel *toplevel, int32_t x, int32_t y) @@ -115,8 +107,7 @@ void toplevel_set_pos(absn_toplevel *toplevel, int32_t x, int32_t y) void 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)) { + if (width <= 2 * toplevel->bw || height <= 2 * toplevel->bw || (width == toplevel->geom.width && height == toplevel->geom.height)) { return; } toplevel->geom.width = width; @@ -134,18 +125,14 @@ void toplevel_set_size(absn_toplevel *toplevel, int32_t width, int32_t height) }; if (toplevel->type == TOPLEVEL_XDG) { - if (wl_resource_get_version(toplevel->xdg->resource) >= - XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION) { + if (wl_resource_get_version(toplevel->xdg->resource) >= XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION) { wlr_xdg_toplevel_set_bounds(toplevel->xdg, width, height); } - toplevel->resizing = wlr_xdg_toplevel_set_size( - toplevel->xdg, width - 2 * bw, height - 2 * bw); + toplevel->resizing = wlr_xdg_toplevel_set_size(toplevel->xdg, width - 2 * bw, height - 2 * bw); } #ifdef XWAYLAND else if (toplevel->type == TOPLEVEL_X11) { - wlr_xwayland_surface_configure(toplevel->xw, toplevel->geom.x, - toplevel->geom.y, width - 2 * bw, - height - 2 * toplevel->bw); + wlr_xwayland_surface_configure(toplevel->xw, toplevel->geom.x, toplevel->geom.y, width - 2 * bw, height - 2 * toplevel->bw); /* manually update position */ toplevel_set_pos(toplevel, toplevel->geom.x, toplevel->geom.y); } @@ -169,11 +156,9 @@ void toplevel_set_floating(absn_toplevel *toplevel, bool floating) toplevel->floating = floating; if (floating) { - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->server->layers[LAYER_FLOAT]); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->server->layers[LAYER_FLOAT]); } else { - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->server->layers[LAYER_TILE]); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->server->layers[LAYER_TILE]); } layout_arrange(toplevel->output); @@ -194,17 +179,14 @@ void toplevel_set_fullscreen(absn_toplevel *toplevel, bool fullscreen) toplevel->bw = 0; toplevel_set_geom(toplevel, &output->geom); - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->server->layers[LAYER_FULLSCREEN]); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->server->layers[LAYER_FULLSCREEN]); } else { toplevel->bw = toplevel_is_unmanaged(toplevel) ? 0 : TOPLEVEL_BW; toplevel_set_geom(toplevel, &toplevel->prev_geom); if (toplevel->floating) { - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->server->layers[LAYER_FLOAT]); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->server->layers[LAYER_FLOAT]); } else { - wlr_scene_node_reparent(&toplevel->scene_tree->node, - toplevel->server->layers[LAYER_TILE]); + wlr_scene_node_reparent(&toplevel->scene_tree->node, toplevel->server->layers[LAYER_TILE]); } } diff --git a/src/xdg-decoration.c b/src/xdg-decoration.c index 023b42f..729cfcc 100644 --- a/src/xdg-decoration.c +++ b/src/xdg-decoration.c @@ -5,11 +5,9 @@ void deco_request_mode(struct wl_listener *listener, void *data) { UNUSED(data); - absn_toplevel *toplevel = - wl_container_of(listener, toplevel, deco_request_mode); + 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, WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + wlr_xdg_toplevel_decoration_v1_set_mode(toplevel->deco, WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); } } diff --git a/src/xwayland.c b/src/xwayland.c index a2173de..6335422 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -21,15 +21,13 @@ void xwayland_associate(struct wl_listener *listener, void *data) absn_toplevel *toplevel = wl_container_of(listener, toplevel, xw_associate); LISTEN(toplevel->map, toplevel_map, toplevel->xw->surface->events.map); - LISTEN(toplevel->unmap, toplevel_unmap, - toplevel->xw->surface->events.unmap); + LISTEN(toplevel->unmap, toplevel_unmap, toplevel->xw->surface->events.unmap); } void xwayland_dissociate(struct wl_listener *listener, void *data) { UNUSED(data); - absn_toplevel *toplevel = - wl_container_of(listener, toplevel, xw_dissociate); + absn_toplevel *toplevel = wl_container_of(listener, toplevel, xw_dissociate); wl_list_remove(&toplevel->map.link); wl_list_remove(&toplevel->unmap.link); @@ -42,16 +40,13 @@ void xwayland_configure(struct wl_listener *listener, void *data) struct wlr_xwayland_surface_configure_event *event = data; if (!toplevel->xw->surface || !toplevel->xw->surface->mapped) { - wlr_xwayland_surface_configure(toplevel->xw, event->x, event->y, - event->width, event->height); + wlr_xwayland_surface_configure(toplevel->xw, event->x, event->y, event->width, event->height); return; } if (toplevel_is_unmanaged(toplevel)) { - wlr_scene_node_set_position(&toplevel->scene_tree->node, event->x, - event->y); - wlr_xwayland_surface_configure(toplevel->xw, event->x, event->y, - event->width, event->height); + wlr_scene_node_set_position(&toplevel->scene_tree->node, event->x, event->y); + wlr_xwayland_surface_configure(toplevel->xw, event->x, event->y, event->width, event->height); return; } }