fix: fix border color change when swithc mon focus

This commit is contained in:
DreamMaoMao
2025-11-14 12:15:34 +08:00
parent 16296898ce
commit d85f4375c8
4 changed files with 13 additions and 5 deletions

View File

@@ -1060,7 +1060,7 @@ void client_set_focused_opacity_animation(Client *c) {
c->opacity_animation.running = true;
}
void cleint_set_unfocused_opacity_animation(Client *c) {
void client_set_unfocused_opacity_animation(Client *c) {
// Start border color animation to unfocused
float *border_color = get_border_color(c);

View File

@@ -202,7 +202,7 @@ int focusmon(const Arg *arg) {
focusclient(c, 1);
if (old_selmon_sel) {
setborder_color(old_selmon_sel);
client_set_unfocused_opacity_animation(old_selmon_sel);
}
return 0;
}

View File

@@ -374,7 +374,10 @@ Client *get_next_stack_client(Client *c, bool reverse) {
}
float *get_border_color(Client *c) {
if (c->isurgent) {
if (c->mon != selmon) {
return bordercolor;
} else if (c->isurgent) {
return urgentcolor;
} else if (c->is_in_scratchpad && selmon && c == selmon->sel) {
return scratchpadcolor;

View File

@@ -3092,6 +3092,9 @@ void destroykeyboardgroup(struct wl_listener *listener, void *data) {
}
void focusclient(Client *c, int lift) {
Client *last_focus_client = NULL;
struct wlr_surface *old_keyboard_focus_surface =
seat->keyboard_state.focused_surface;
@@ -3126,12 +3129,14 @@ void focusclient(Client *c, int lift) {
if (c && !c->iskilling && !client_is_unmanaged(c) && c->mon) {
last_focus_client = selmon->sel;
selmon = c->mon;
selmon->prevsel = selmon->sel;
selmon->sel = c;
if (selmon->prevsel && !selmon->prevsel->iskilling) {
cleint_set_unfocused_opacity_animation(selmon->prevsel);
if (last_focus_client && !last_focus_client->iskilling &&
last_focus_client != c) {
client_set_unfocused_opacity_animation(last_focus_client);
}
client_set_focused_opacity_animation(c);