feat: add global option center_master_overspread

This commit is contained in:
DreamMaoMao 2025-09-27 09:17:13 +08:00
parent 03eee2f4f1
commit d2b3e3a70b
3 changed files with 19 additions and 4 deletions

View file

@ -460,23 +460,31 @@ void center_tile(Monitor *m) {
my = gappov;
tw = mw;
if (n > nmasters) {
// 计算主区域宽度
// 判断是否需要主区域铺满
int should_overspread = center_master_overspread && (n <= nmasters);
if (n > nmasters || !should_overspread) {
// 计算主区域宽度(居中模式)
mw = nmasters ? (m->w.width - 2 * gappoh - gappih) * mfact : 0;
if (n - nmasters > 1) {
// 多个堆叠窗口:主区域居中,左右两侧各有一个堆叠区域
tw = (m->w.width - mw - 2 * gappoh - gappih) / 2;
mx = gappoh + tw + gappih;
} else {
} else if (n - nmasters == 1) {
// 单个堆叠窗口:主区域居中,堆叠窗口在左,右边空着
tw = (m->w.width - mw - 2 * gappoh - gappih) / 2;
mx = gappoh + tw + gappih;
} else {
// 只有主区域窗口:居中显示
tw = (m->w.width - mw - 2 * gappoh - gappih) / 2;
mx = gappoh + tw + gappih;
}
} else {
// 所有窗口都在主区域
// 主区域铺满模式(只有主区域窗口时)
mw = m->w.width - 2 * gappoh;
mx = gappoh;
tw = 0; // 堆叠区域宽度为0
}
oty = gappov;