From 9d90d461441cd193d1381dbc08c9d0f0197ee502 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Tue, 25 Mar 2025 20:52:49 +0800 Subject: [PATCH 1/3] fix: reset client foreign toplevel in updatemon --- maomao.c | 4 +++- preset_config.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/maomao.c b/maomao.c index 98bff527..5ccd5dea 100644 --- a/maomao.c +++ b/maomao.c @@ -6337,8 +6337,10 @@ updatemons(struct wl_listener *listener, void *data) if (selmon && selmon->wlr_output->enabled) { wl_list_for_each(c, &clients, link) { - if (!c->mon && client_surface(c)->mapped) + if (!c->mon && client_surface(c)->mapped) { setmon(c, selmon, c->tags); + reset_foreign_tolevel(c); + } } focusclient(focustop(selmon), 1); if (selmon->lock_surface) { diff --git a/preset_config.h b/preset_config.h index 9073eac6..535655cd 100644 --- a/preset_config.h +++ b/preset_config.h @@ -29,7 +29,7 @@ double default_mfact = 0.55f; // master 窗口比例 double default_smfact = 0.5f; // 第一个stack窗口比例 unsigned int default_nmaster = 1; // 默认master数量 /* logging */ -int log_level = WLR_DEBUG; +int log_level = WLR_ERROR; unsigned int numlockon = 1; // 是否打开右边小键盘 unsigned int capslock = 0; // 是否启用快捷键 From 20bc31d3c9b747a5dfd78979aa6d0107b77c8802 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Tue, 25 Mar 2025 21:05:26 +0800 Subject: [PATCH 2/3] opt: optimize selmon judge --- maomao.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/maomao.c b/maomao.c index 5ccd5dea..40affcb2 100644 --- a/maomao.c +++ b/maomao.c @@ -3487,7 +3487,7 @@ keypress(struct wl_listener *listener, void *data) event->state == WL_KEYBOARD_KEY_STATE_RELEASED && (keycode == 133 || keycode == 37 || keycode == 64 || keycode == 50 || keycode == 134 || keycode == 105 || keycode == 108 || keycode == 62) && - selmon->sel) { + selmon && selmon->sel) { if (selmon->isoverview && selmon->sel) { toggleoverview(&(Arg){.i = -1}); } @@ -3497,7 +3497,7 @@ keypress(struct wl_listener *listener, void *data) if (!locked && event->state == WL_KEYBOARD_KEY_STATE_RELEASED && (keycode == 133 || keycode == 37 || keycode == 64 || keycode == 50 || keycode == 134 || keycode == 105 || keycode == 108 || keycode == 62) && - selmon->sel) { + selmon && selmon->sel) { dwl_input_method_relay_set_focus(input_relay, client_surface(selmon->sel)); } #endif @@ -4904,27 +4904,27 @@ void setsmfact(const Arg *arg) { arrange(selmon, false); } -void setmon(Client *c, Monitor *m, uint32_t newtags) { - Monitor *oldmon = c->mon; +void +setmon(Client *c, Monitor *m, uint32_t newtags) +{ + Monitor *oldmon = c->mon; - if (oldmon == m) - return; - c->mon = m; - c->prev = c->geom; + if (oldmon == m) + return; + c->mon = m; + c->prev = c->geom; - /* Scene graph sends surface leave/enter events on move and resize */ - if (oldmon) - arrange(oldmon, false); - if (m) { - /* Make sure window actually overlaps with the monitor */ - resize(c, c->geom, 0); - c->tags = newtags - ? newtags - : m->tagset[m->seltags]; /* assign tags of target monitor */ - setfullscreen(c, c->isfullscreen); /* This will call arrange(c->mon) */ - setfloating(c, c->isfloating); - } - focusclient(focustop(selmon), 1); + /* Scene graph sends surface leave/enter events on move and resize */ + if (oldmon) + arrange(oldmon,false); + if (m) { + /* Make sure window actually overlaps with the monitor */ + resize(c, c->geom, 0); + c->tags = newtags ? newtags : m->tagset[m->seltags]; /* assign tags of target monitor */ + setfullscreen(c, c->isfullscreen); /* This will call arrange(c->mon) */ + setfloating(c, c->isfloating); + } + focusclient(focustop(selmon), 1); } void From 948eb7bb320a77a897818fff31d19c9d3b099760 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Tue, 25 Mar 2025 21:26:10 +0800 Subject: [PATCH 3/3] opt: optimize selmon update --- maomao.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/maomao.c b/maomao.c index 40affcb2..985cacff 100644 --- a/maomao.c +++ b/maomao.c @@ -3131,10 +3131,6 @@ void focusclient(Client *c, int lift) { if (c && client_surface(c) == old_keyboard_focus_surface) return; - if (c && c->mon && c->mon != selmon) { - selmon = c->mon; - } - if (selmon && selmon->sel && selmon->sel->foreign_toplevel) { wlr_foreign_toplevel_handle_v1_set_activated(selmon->sel->foreign_toplevel, false);