From e4f594ecdeb1d4f1fdee5d0f7148c00677f7ff3b Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Sun, 5 Oct 2025 11:15:00 +0800 Subject: [PATCH] opt: allow floating window show on fullscreen window --- src/dispatch/bind_define.h | 5 ++--- src/mango.c | 21 +++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/dispatch/bind_define.h b/src/dispatch/bind_define.h index b2b6551..cf67fc4 100644 --- a/src/dispatch/bind_define.h +++ b/src/dispatch/bind_define.h @@ -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); } diff --git a/src/mango.c b/src/mango.c index ba92911..b6d7d39 100644 --- a/src/mango.c +++ b/src/mango.c @@ -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);