From d3412dd91e83b67ccb7331a56f94359ac459156e Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Wed, 16 Apr 2025 23:15:58 +0800 Subject: [PATCH] opt:The minimization and activation request logic is more robust --- maomao.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/maomao.c b/maomao.c index 8321687..a9f86bf 100644 --- a/maomao.c +++ b/maomao.c @@ -219,7 +219,7 @@ struct Client { struct wl_listener set_hints; #endif unsigned int bw; - unsigned int tags, oldtags; + unsigned int tags, oldtags, mini_restore_tag; bool dirty; uint32_t configure_serial; struct wlr_foreign_toplevel_handle_v1 *foreign_toplevel; @@ -4166,6 +4166,7 @@ void set_minized(Client *c) { } c->is_scratchpad_show = 0; c->oldtags = c->mon->sel->tags; + c->mini_restore_tag = c->tags; c->tags = 0; c->isminied = 1; c->is_in_scratchpad = 1; @@ -4195,7 +4196,7 @@ minimizenotify(struct wl_listener *listener, void *data) { // togglemaxmizescreen(&(Arg){0}); Client *c = wl_container_of(listener, c, minimize); - if (!c || !c->mon || c->iskilling) + if (!c || !c->mon || c->iskilling || c->isminied) return; set_minized(c); @@ -7305,6 +7306,15 @@ void activatex11(struct wl_listener *listener, void *data) { return; if (focus_on_activate && c != selmon->sel) { + if(c->isminied) { + c->isminied = 0; + c->tags = c->mini_restore_tag; + c->is_scratchpad_show = 0; + c->is_in_scratchpad = 0; + wlr_foreign_toplevel_handle_v1_set_minimized(c->foreign_toplevel, false); + wlr_foreign_toplevel_handle_v1_set_activated(c->foreign_toplevel, true); + setborder_color(c); + } view(&(Arg){.ui = c->tags}, true); focusclient(c, 1); } else if (c != focustop(selmon)) {