From eaa25853816cfe59ea413e947df4c0605152a925 Mon Sep 17 00:00:00 2001 From: speckitor Date: Sun, 11 Jan 2026 03:22:05 +0700 Subject: [PATCH] focus border color --- include/types.h | 3 ++- src/absinthe-toplevel.c | 1 - src/focus.c | 7 ++++++- src/xdg-toplevel.c | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/types.h b/include/types.h index 74ffb5b..4d538a5 100644 --- a/include/types.h +++ b/include/types.h @@ -24,7 +24,8 @@ #define ABSINTHE_WINDOW_BORDER_WIDTH 2 -static const float bordercolor[4] = {0.88, 0.18, 0.18, 1.0}; +static const float focused_border_color[4] = {0.88, 0.18, 0.18, 1.0}; +static const float unfocused_border_color[4] = {0.18, 0.18, 0.18, 1.0}; enum absinthe_cursor_mode { ABSINTHE_CURSOR_PASSTHROUGH, diff --git a/src/absinthe-toplevel.c b/src/absinthe-toplevel.c index 6f1d43d..aa90d5f 100644 --- a/src/absinthe-toplevel.c +++ b/src/absinthe-toplevel.c @@ -75,7 +75,6 @@ void absinthe_toplevel_update_borders_geometry(struct absinthe_toplevel *topleve if (toplevel->geometry.width - 2 * bw < 0 || toplevel->geometry.height - 2 * bw < 0) return; - wlr_scene_node_set_position(&toplevel->scene_tree->node, toplevel->geometry.x, toplevel->geometry.y); wlr_scene_node_set_position(&toplevel->scene_surface->node, bw, bw); diff --git a/src/focus.c b/src/focus.c index 6dcfaab..2292bae 100644 --- a/src/focus.c +++ b/src/focus.c @@ -1,6 +1,7 @@ #include #include "types.h" +#include "absinthe-toplevel.h" void focus_toplevel(struct absinthe_toplevel *toplevel) { @@ -17,7 +18,10 @@ void focus_toplevel(struct absinthe_toplevel *toplevel) if (prev_surface) { struct wlr_xdg_toplevel *prev_toplevel = wlr_xdg_toplevel_try_from_wlr_surface(prev_surface); - if (prev_toplevel) wlr_xdg_toplevel_set_activated(prev_toplevel, false); + if (prev_toplevel) { + wlr_xdg_toplevel_set_activated(prev_toplevel, false); + absinthe_toplevel_set_border_color(prev_toplevel->base->data, unfocused_border_color); + } } struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(seat); @@ -25,6 +29,7 @@ void focus_toplevel(struct absinthe_toplevel *toplevel) wl_list_remove(&toplevel->link); wl_list_insert(&server->toplevels, &toplevel->link); wlr_xdg_toplevel_set_activated(toplevel->xdg_toplevel, true); + absinthe_toplevel_set_border_color(toplevel, focused_border_color); if (keyboard) wlr_seat_keyboard_notify_enter(seat, surface, keyboard->keycodes, keyboard->num_keycodes, &keyboard->modifiers); diff --git a/src/xdg-toplevel.c b/src/xdg-toplevel.c index e483875..f7f44fa 100644 --- a/src/xdg-toplevel.c +++ b/src/xdg-toplevel.c @@ -37,13 +37,13 @@ void xdg_toplevel_map(struct wl_listener *listener, void *data) struct absinthe_toplevel *toplevel = wl_container_of(listener, toplevel, map); for (int i = 0; i < 4; ++i) { - toplevel->border[i] = wlr_scene_rect_create(toplevel->scene_tree, 0, 0, bordercolor); + toplevel->border[i] = wlr_scene_rect_create(toplevel->scene_tree, 0, 0, unfocused_border_color); toplevel->border[i]->node.data = toplevel; } toplevel->border_width = ABSINTHE_WINDOW_BORDER_WIDTH; - absinthe_toplevel_set_border_color(toplevel, bordercolor); + absinthe_toplevel_set_border_color(toplevel, unfocused_border_color); absinthe_toplevel_update_borders_geometry(toplevel); toplevel->output = toplevel->server->focused_output;