fix: dwindle refuse arrange when restore from tty in non-selmon

dwindle relies on sel window cutting, but the sel window has been
cleared when the display is destroyed and was not set when the display
is created
This commit is contained in:
DreamMaoMao 2026-06-16 13:30:52 +08:00
parent 405e8dbc1a
commit 87f00ab5e9

View file

@ -565,6 +565,7 @@ void dwindle(Monitor *m) {
break; break;
} }
// 清理树中已不存在的客户端
{ {
DwindleNode *leaves[512]; DwindleNode *leaves[512];
int32_t lc = 0; int32_t lc = 0;
@ -602,9 +603,14 @@ void dwindle(Monitor *m) {
} }
} }
// 获得焦点客户端,若为空则用第一个可见平铺客户端兜底
Client *focused = focustop(m); Client *focused = focustop(m);
if (focused && !dwindle_find_leaf(*root, focused)) if (focused && !dwindle_find_leaf(*root, focused))
focused = m->sel; focused = m->sel;
if (!focused && count > 0)
focused = vis[0];
for (int32_t i = 0; i < count; i++) { for (int32_t i = 0; i < count; i++) {
if (!dwindle_find_leaf(*root, vis[i])) if (!dwindle_find_leaf(*root, vis[i]))
dwindle_insert_with_config(root, vis[i], focused, ratio); dwindle_insert_with_config(root, vis[i], focused, ratio);