opt: optimize layer cover

This commit is contained in:
DreamMaoMao 2026-06-21 19:36:38 +08:00
parent 90c50e664d
commit e05bea855e
2 changed files with 28 additions and 3 deletions

View file

@ -181,7 +181,8 @@ void client_set_tab_node_visible(Client *c) {
while (cur) { while (cur) {
if (!c->mon->isoverview && cur->tab_bar_node && if (!c->mon->isoverview && cur->tab_bar_node &&
(cur->group_next || cur->group_prev) && VISIBLEON(c, c->mon) && (cur->group_next || cur->group_prev) && VISIBLEON(c, c->mon) &&
ISSCROLLTILED(c) && !c->isfullscreen) { ISSCROLLTILED(c) && !c->isfullscreen &&
(!is_monocle_layout(c->mon) || c == c->mon->sel)) {
wlr_scene_node_set_enabled(&cur->tab_bar_node->scene_buffer->node, wlr_scene_node_set_enabled(&cur->tab_bar_node->scene_buffer->node,
true); true);
} else { } else {
@ -190,4 +191,24 @@ void client_set_tab_node_visible(Client *c) {
} }
cur = cur->group_next; cur = cur->group_next;
} }
}
void client_raise_group_tab_bar(Client *c) {
if (!c || !c->mon)
return;
if (!c->group_prev && !c->group_next)
return;
Client *head = c;
while (head->group_prev)
head = head->group_prev;
Client *cur = head;
while (cur) {
if (cur->tab_bar_node) {
wlr_scene_node_raise_to_top(&cur->tab_bar_node->scene_buffer->node);
}
cur = cur->group_next;
}
} }

View file

@ -170,8 +170,9 @@ enum {
LyrBg, LyrBg,
LyrBlur, LyrBlur,
LyrBottom, LyrBottom,
LyrDecorate,
LyrTile, LyrTile,
LyrDecorate,
LyrMaximize,
LyrTop, LyrTop,
LyrFadeOut, LyrFadeOut,
LyrOverlay, LyrOverlay,
@ -5761,6 +5762,7 @@ void setmaximizescreen(Client *c, int32_t maximizescreen, bool rearrange) {
} }
wlr_scene_node_raise_to_top(&c->scene->node); wlr_scene_node_raise_to_top(&c->scene->node);
client_raise_group_tab_bar(c);
if (!is_scroller_layout(c->mon) || c->isfloating) if (!is_scroller_layout(c->mon) || c->isfloating)
resize(c, maximizescreen_box, 0); resize(c, maximizescreen_box, 0);
} else { } else {
@ -5770,7 +5772,9 @@ void setmaximizescreen(Client *c, int32_t maximizescreen, bool rearrange) {
} }
wlr_scene_node_reparent(&c->scene->node, wlr_scene_node_reparent(&c->scene->node,
layers[c->isfloating ? LyrTop : LyrTile]); layers[c->ismaximizescreen ? LyrMaximize
: c->isfloating ? LyrTop
: LyrTile]);
if (!c->force_fakemaximize && !c->ismaximizescreen) { if (!c->force_fakemaximize && !c->ismaximizescreen) {
client_set_maximized(c, false); client_set_maximized(c, false);