diff --git a/src/client/client.h b/src/client/client.h index 45abbab..2436bd9 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -93,6 +93,8 @@ static inline void client_activate_surface(struct wlr_surface *s, #ifdef XWAYLAND struct wlr_xwayland_surface *xsurface; if ((xsurface = wlr_xwayland_surface_try_from_wlr_surface(s))) { + if (activated && xsurface->minimized) + wlr_xwayland_surface_set_minimized(xsurface, false); wlr_xwayland_surface_activate(xsurface, activated); return; } diff --git a/src/mango.c b/src/mango.c index 2860d53..6377604 100644 --- a/src/mango.c +++ b/src/mango.c @@ -3450,7 +3450,6 @@ void set_minized(Client *c) { wlr_foreign_toplevel_handle_v1_set_minimized(c->foreign_toplevel, true); wl_list_remove(&c->link); // 从原来位置移除 wl_list_insert(clients.prev, &c->link); // 插入尾部 - client_set_minimized(c, true); } void // 0.5 custom @@ -3474,8 +3473,12 @@ minimizenotify(struct wl_listener *listener, void *data) { if (!c || !c->mon || c->iskilling || c->isminied) return; - if (!c->ignore_minimize && client_request_minimize(c, data)) { - set_minized(c); + if (client_request_minimize(c, data)) { + if (!c->ignore_minimize) + set_minized(c); + client_set_minimized(c, true); + } else { + client_set_minimized(c, false); } } @@ -4340,7 +4343,6 @@ void show_hide_client(Client *c) { tag_client(&(Arg){.ui = target}, c); // c->tags = c->oldtags; c->isminied = 0; - client_set_minimized(c, false); wlr_foreign_toplevel_handle_v1_set_minimized(c->foreign_toplevel, false); focusclient(c, 1); wlr_foreign_toplevel_handle_v1_set_activated(c->foreign_toplevel, true);