opt: simplified group code

This commit is contained in:
DreamMaoMao 2026-07-01 07:45:33 +08:00
parent 3aa2206821
commit 4ddc713881
3 changed files with 33 additions and 68 deletions

View file

@ -277,4 +277,33 @@ void client_set_group_config(Client *c) {
mango_group_bar_apply_config(cur->group_bar, &config.groupbardata);
cur = cur->group_next;
}
}
void client_group_detach(Client *c) {
if (c->group_prev)
c->group_prev->group_next = c->group_next;
if (c->group_next)
c->group_next->group_prev = c->group_prev;
c->group_prev = NULL;
c->group_next = NULL;
c->isgroupfocusing = false;
}
void client_group_replace(Client *old, Client *new) {
client_group_detach(new);
new->group_prev = old->group_prev;
new->group_next = old->group_next;
if (old->group_prev)
old->group_prev->group_next = new;
if (old->group_next)
old->group_next->group_prev = new;
old->group_prev = NULL;
old->group_next = NULL;
if (old->is_logic_hide || (!new->group_prev && !new->group_next)) {
new->isgroupfocusing = false;
} else {
new->isgroupfocusing = old->isgroupfocusing;
}
}

View file

@ -230,17 +230,8 @@ int32_t groupleave(const Arg *arg) {
Client *rc = tc->group_next ? tc->group_next : tc->group_prev;
client_focus_group_member(rc);
client_group_detach(tc);
if (tc->group_prev) {
tc->group_prev->group_next = tc->group_next;
}
if (tc->group_next) {
tc->group_next->group_prev = tc->group_prev;
}
tc->group_prev = NULL;
tc->group_next = NULL;
tc->isgroupfocusing = false;
tc->is_logic_hide = false;

View file

@ -1328,54 +1328,8 @@ void client_replace(Client *c, Client *w, bool is_group_change_member,
c->stack_proportion = w->stack_proportion;
c->is_logic_hide = w->is_logic_hide;
if (is_swallow) {
c->group_prev = w->group_prev;
c->group_next = w->group_next;
if (w->group_prev) {
w->group_prev->group_next = c;
}
if (w->group_next) {
w->group_next->group_prev = c;
}
w->group_next = NULL;
w->group_prev = NULL;
if (!w->is_logic_hide) {
c->isgroupfocusing = w->isgroupfocusing;
} else {
c->isgroupfocusing = false;
}
} else {
if (!is_group_change_member) {
if (w->group_prev == c) {
c->group_next = w->group_next;
if (w->group_next) {
w->group_next->group_prev = c;
}
} else if (w->group_next == c) {
c->group_prev = w->group_prev;
if (w->group_prev) {
w->group_prev->group_next = c;
}
} else {
c->group_prev = w->group_prev;
c->group_next = w->group_next;
if (w->group_prev) {
w->group_prev->group_next = c;
}
if (w->group_next) {
w->group_next->group_prev = c;
}
}
if (!c->group_prev && !c->group_next) {
c->isgroupfocusing = false;
} else {
c->isgroupfocusing = w->isgroupfocusing;
}
}
if (is_swallow || !is_group_change_member) {
client_group_replace(w, c);
}
w->is_logic_hide = true;
@ -6899,16 +6853,7 @@ void unmapnotify(struct wl_listener *listener, void *data) {
focusclient(focustop(selmon), 1);
} else {
if (c->group_next && !c->isgroupfocusing) {
c->group_next->group_prev = c->group_prev;
}
if (c->group_prev && !c->isgroupfocusing) {
c->group_prev->group_next = c->group_next;
}
c->group_next = NULL;
c->group_prev = NULL;
client_group_detach(c);
wl_list_remove(&c->link);
setmon(c, NULL, 0, true);