diff --git a/src/dispatch/bind_define.h b/src/dispatch/bind_define.h index da81af6..eda771d 100644 --- a/src/dispatch/bind_define.h +++ b/src/dispatch/bind_define.h @@ -1167,12 +1167,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 2c9ddcf..3e12b8f 100644 --- a/src/mango.c +++ b/src/mango.c @@ -139,10 +139,8 @@ enum { LyrBg, LyrBottom, LyrTile, - LyrFloat, LyrTop, LyrFadeOut, - LyrFSorOverTop, LyrOverlay, LyrIMPopup, // text-input layer LyrBlock, @@ -2266,6 +2264,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)) { @@ -2276,6 +2277,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); } @@ -4278,10 +4280,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); @@ -4332,7 +4334,7 @@ void setmaxmizescreen(Client *c, int maxmizescreen) { } wlr_scene_node_reparent(&c->scene->node, layers[maxmizescreen ? LyrTile - : c->isfloating ? LyrFloat + : c->isfloating ? LyrTop : LyrTile]); } @@ -4382,12 +4384,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);