Merge pull request #4001 from hansp27/niri-workspaces-display-preference

feat: add display-condition configuration option
This commit is contained in:
Alexis Rouillard
2026-07-04 01:02:19 +02:00
committed by GitHub
2 changed files with 33 additions and 14 deletions
+10
View File
@@ -68,6 +68,16 @@ If none of the sorting options are enabled, workspaces keep their output/index o
default: false ++ default: false ++
If set to true, only the active or focused workspace will be shown. If set to true, only the active or focused workspace will be shown.
*display-condition*: ++
typeof: string ++
oneof: "show-all", "keep-named", "only-populated" ++
default: "show-all" ++
Specifies the conditions for showing workspace widgets. ++
++
*show-all*: displays widgets for all workspaces. ++
*keep-named*: always displays named workspaces, irrespective of whether they contain windows or not. ++
*only-populated*: only displays widgets for workspaces that have windows.
*hide-empty*: ++ *hide-empty*: ++
typeof: bool ++ typeof: bool ++
default: false ++ default: false ++
+23 -14
View File
@@ -81,23 +81,32 @@ void Workspaces::doUpdate() {
auto ipcLock = gIPC->lockData(); auto ipcLock = gIPC->lockData();
const auto alloutputs = config_["all-outputs"].asBool(); const auto alloutputs = config_["all-outputs"].asBool();
const auto display_cond = config_["display-condition"].asString();
std::vector<Json::Value> my_workspaces; std::vector<Json::Value> my_workspaces;
const auto& workspaces = gIPC->workspaces(); const auto& workspaces = gIPC->workspaces();
std::copy_if(workspaces.cbegin(), workspaces.cend(), std::back_inserter(my_workspaces), std::copy_if(
[&](const auto& ws) { workspaces.cbegin(), workspaces.cend(), std::back_inserter(my_workspaces),
std::string name; [&](const auto& ws) {
if (ws["name"]) { std::string name;
name = ws["name"].asString(); if (ws["name"]) {
} else { name = ws["name"].asString();
name = std::to_string(ws["idx"].asUInt()); } else {
} name = std::to_string(ws["idx"].asUInt());
if (isWorkspaceIgnored(name)) { }
return false; if (isWorkspaceIgnored(name)) {
} return false;
}
if (alloutputs) return true; if (display_cond == "only-populated") {
return ws["output"].asString() == bar_.output->name; if (ws["active_window_id"].isNull() && !ws["is_active"].asBool()) return false;
}); } else if (display_cond == "keep-named") {
if (ws["name"].isNull() && ws["active_window_id"].isNull() && !ws["is_active"].asBool())
return false;
}
if (alloutputs) return true;
return ws["output"].asString() == bar_.output->name;
});
sortWorkspaces(my_workspaces); sortWorkspaces(my_workspaces);