From 40d8fa84919c6d0e9fcb1536f4bc09710d4c031c Mon Sep 17 00:00:00 2001 From: Nikolai Nechaev Date: Wed, 26 Nov 2025 07:44:26 +0900 Subject: compositor: Configurable behavior when window to be focused conflicts with fullscreen (#12033) Renames `misc:new_window_takes_over_fullscreen` into `misc:on_focus_under_fullscreen` and implements the following behavior: - By default, when a tiling window is being focused on a workspace where a fullscreen/maximized window exists, respect the `misc:on_focus_under_fullscreen` config variable. --- src/config/ConfigDescriptions.hpp | 14 ++++---------- src/config/ConfigManager.cpp | 4 ++-- 2 files changed, 6 insertions(+), 12 deletions(-) (limited to 'src/config') diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 78e86e17..6ef7c263 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -1279,11 +1279,11 @@ inline static const std::vector CONFIG_OPTIONS = { .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "misc:new_window_takes_over_fullscreen", - .description = "if there is a fullscreen or maximized window, decide whether a new tiled window opened should replace it, stay behind or disable the fullscreen/maximized " - "state. 0 - behind, 1 - takes over, 2 - unfullscreen/unmaxize [0/1/2]", + .value = "misc:on_focus_under_fullscreen", + .description = "if there is a fullscreen or maximized window, decide whether a tiled window requested to focus should replace it, stay behind or disable the " + "fullscreen/maximized state. 0 - ignore focus request (keep focus on fullscreen window), 1 - takes over, 2 - unfullscreen/unmaximize [0/1/2]", .type = CONFIG_OPTION_INT, - .data = SConfigOptionDescription::SRangeData{0, 0, 2}, + .data = SConfigOptionDescription::SRangeData{2, 0, 2}, }, SConfigOptionDescription{ .value = "misc:exit_window_retains_fullscreen", @@ -1946,12 +1946,6 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_STRING_SHORT, .data = SConfigOptionDescription::SStringData{"left"}, }, - SConfigOptionDescription{ - .value = "master:inherit_fullscreen", - .description = "inherit fullscreen status when cycling/swapping to another window (e.g. monocle layout)", - .type = CONFIG_OPTION_BOOL, - .data = SConfigOptionDescription::SBoolData{true}, - }, SConfigOptionDescription{ .value = "master:slave_count_for_center_master", .description = "when using orientation=center, make the master window centered only when at least this many slave windows are open. (Set 0 to always_center_master)", diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index fc020d7a..b077988b 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -17,6 +17,7 @@ #include "../desktop/rule/windowRule/WindowRule.hpp" #include "../desktop/rule/layerRule/LayerRule.hpp" #include "../debug/HyprCtl.hpp" +#include "../desktop/state/FocusState.hpp" #include "defaultConfig.hpp" #include "../render/Renderer.hpp" @@ -490,7 +491,7 @@ CConfigManager::CConfigManager() { registerConfigVar("misc:session_lock_xray", Hyprlang::INT{0}); registerConfigVar("misc:close_special_on_empty", Hyprlang::INT{1}); registerConfigVar("misc:background_color", Hyprlang::INT{0xff111111}); - registerConfigVar("misc:new_window_takes_over_fullscreen", Hyprlang::INT{0}); + registerConfigVar("misc:on_focus_under_fullscreen", Hyprlang::INT{2}); registerConfigVar("misc:exit_window_retains_fullscreen", Hyprlang::INT{0}); registerConfigVar("misc:initial_workspace_tracking", Hyprlang::INT{1}); registerConfigVar("misc:middle_click_paste", Hyprlang::INT{1}); @@ -619,7 +620,6 @@ CConfigManager::CConfigManager() { registerConfigVar("master:new_on_active", {"none"}); registerConfigVar("master:new_on_top", Hyprlang::INT{0}); registerConfigVar("master:orientation", {"left"}); - registerConfigVar("master:inherit_fullscreen", Hyprlang::INT{1}); registerConfigVar("master:allow_small_split", Hyprlang::INT{0}); registerConfigVar("master:smart_resizing", Hyprlang::INT{1}); registerConfigVar("master:drop_at_cursor", Hyprlang::INT{1}); -- cgit v1.2.3