From 17dafb33a29a359e99411f5f93ad4e88611a0685 Mon Sep 17 00:00:00 2001 From: ArchSav <96357545+ArchSav@users.noreply.github.com> Date: Wed, 6 May 2026 17:11:06 +1000 Subject: [PATCH] layouts/master: impl of focus_master_on_close --- meta/hl.meta.lua | 2 ++ src/config/values/ConfigValues.cpp | 1 + src/layout/algorithm/tiled/master/MasterAlgorithm.cpp | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/meta/hl.meta.lua b/meta/hl.meta.lua index 6ea875aee..356fb73b1 100644 --- a/meta/hl.meta.lua +++ b/meta/hl.meta.lua @@ -293,6 +293,7 @@ ---| "master.center_ignores_reserved" ---| "master.center_master_fallback" ---| "master.drop_at_cursor" +---| "master.focus_master_on_close" ---| "master.mfact" ---| "master.new_on_active" ---| "master.new_on_top" @@ -1129,6 +1130,7 @@ hl = {} ---@field ['master.center_ignores_reserved'] boolean ---@field ['master.center_master_fallback'] string ---@field ['master.drop_at_cursor'] boolean +---@field ['master.focus_master_on_close'] boolean ---@field ['master.mfact'] number|boolean ---@field ['master.new_on_active'] string ---@field ['master.new_on_top'] boolean diff --git a/src/config/values/ConfigValues.cpp b/src/config/values/ConfigValues.cpp index 2c44b1722..371223158 100644 --- a/src/config/values/ConfigValues.cpp +++ b/src/config/values/ConfigValues.cpp @@ -651,6 +651,7 @@ std::vector> Values::getConfigValues() { MS("master:drop_at_cursor", "when enabled, dragging and dropping windows will put them at the cursor position.", true), MS("master:always_keep_position", "whether to keep the master window in its configured position when there are no slave windows", false, {.refresh = Supplementary::REFRESH_LAYOUTS}), + MS("master:focus_master_on_close", "when enabled, closing a window focuses the master window", false), /* * scrolling: diff --git a/src/layout/algorithm/tiled/master/MasterAlgorithm.cpp b/src/layout/algorithm/tiled/master/MasterAlgorithm.cpp index c57a3639f..09a98ea2c 100644 --- a/src/layout/algorithm/tiled/master/MasterAlgorithm.cpp +++ b/src/layout/algorithm/tiled/master/MasterAlgorithm.cpp @@ -1247,7 +1247,11 @@ void CMasterAlgorithm::calculateWorkspace() { } SP CMasterAlgorithm::getNextCandidate(SP old) { - const auto MIDDLE = old->position().middle(); + const auto FOCUS_MASTER = CConfigValue("master:focus_master_on_close"); + const auto MIDDLE = old->position().middle(); + + if (const auto NODE = getMasterNode(); *FOCUS_MASTER && NODE) + return NODE->pTarget.lock(); if (const auto NODE = getClosestNode(MIDDLE); NODE) return NODE->pTarget.lock();