opt: allow floating window show on fullscreen window

This commit is contained in:
DreamMaoMao 2025-10-05 11:15:00 +08:00
parent 38917d9f96
commit e4f594ecde
2 changed files with 13 additions and 13 deletions

View file

@ -1165,12 +1165,11 @@ void toggleoverlay(const Arg *arg) {
wlr_scene_node_reparent(&selmon->sel->scene->node, layers[LyrOverlay]);
wlr_scene_node_raise_to_top(&selmon->sel->scene->node);
} else if (client_should_overtop(selmon->sel) && selmon->sel->isfloating) {
wlr_scene_node_reparent(&selmon->sel->scene->node,
layers[LyrFSorOverTop]);
wlr_scene_node_reparent(&selmon->sel->scene->node, layers[LyrTop]);
} else {
wlr_scene_node_reparent(
&selmon->sel->scene->node,
layers[selmon->sel->isfloating ? LyrFloat : LyrTile]);
layers[selmon->sel->isfloating ? LyrTop : LyrTile]);
}
setborder_color(selmon->sel);
}

View file

@ -143,10 +143,8 @@ enum {
LyrBlur,
LyrBottom,
LyrTile,
LyrFloat,
LyrTop,
LyrFadeOut,
LyrFSorOverTop,
LyrOverlay,
LyrIMPopup, // text-input layer
LyrBlock,
@ -2310,6 +2308,9 @@ void commitpopup(struct wl_listener *listener, void *data) {
type = toplevel_from_wlr_surface(popup->base->surface, &c, &l);
if (!popup->parent || type < 0)
return;
wlr_scene_node_raise_to_top(popup->parent->data);
popup->base->surface->data =
wlr_scene_xdg_surface_create(popup->parent->data, popup->base);
if ((l && !l->mon) || (c && !c->mon)) {
@ -2320,6 +2321,7 @@ void commitpopup(struct wl_listener *listener, void *data) {
box.x -= (type == LayerShell ? l->scene->node.x : c->geom.x);
box.y -= (type == LayerShell ? l->scene->node.y : c->geom.y);
wlr_xdg_popup_unconstrain_from_box(popup, &box);
wl_list_remove(&listener->link);
free(listener);
}
@ -4336,10 +4338,10 @@ setfloating(Client *c, int floating) {
if (c->isoverlay) {
wlr_scene_node_reparent(&c->scene->node, layers[LyrOverlay]);
} else if (client_should_overtop(c) && c->isfloating) {
wlr_scene_node_reparent(&c->scene->node, layers[LyrFSorOverTop]);
wlr_scene_node_reparent(&c->scene->node, layers[LyrTop]);
} else {
wlr_scene_node_reparent(&c->scene->node,
layers[c->isfloating ? LyrFloat : LyrTile]);
layers[c->isfloating ? LyrTop : LyrTile]);
}
arrange(c->mon, false);
@ -4390,7 +4392,7 @@ void setmaxmizescreen(Client *c, int maxmizescreen) {
}
wlr_scene_node_reparent(&c->scene->node, layers[maxmizescreen ? LyrTile
: c->isfloating ? LyrFloat
: c->isfloating ? LyrTop
: LyrTile]);
}
@ -4440,12 +4442,11 @@ void setfullscreen(Client *c, int fullscreen) // 用自定义全屏代理自带
if (c->isoverlay) {
wlr_scene_node_reparent(&c->scene->node, layers[LyrOverlay]);
} else if (client_should_overtop(c) && c->isfloating) {
wlr_scene_node_reparent(&c->scene->node, layers[LyrFSorOverTop]);
wlr_scene_node_reparent(&c->scene->node, layers[LyrTop]);
} else {
wlr_scene_node_reparent(&c->scene->node,
layers[fullscreen ? LyrFSorOverTop
: c->isfloating ? LyrFloat
: LyrTile]);
wlr_scene_node_reparent(
&c->scene->node,
layers[fullscreen || c->isfloating ? LyrTop : LyrTile]);
}
arrange(c->mon, false);