Skip to content

Commit

Permalink
sway/workspaces: Correct behavior when "current-only" is set
Browse files Browse the repository at this point in the history
The `current-only` workspace setting should display only the active
workspace name as determined by its `focused` attribute.  However,
according to the `get_tree` output, workspaces that contain a focused
window will report `"focused": false` and the window will report
`"focused": true.` In this case, Waybar will not display a workspace
name at all.

This change updates the logic for determining if a workspace is
focused by also looking for a focused window.
  • Loading branch information
pjones committed Jun 6, 2024
1 parent 365e77a commit 637b220
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/modules/sway/workspaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,16 @@ std::string Workspaces::trimWorkspaceName(std::string name) {

void Workspaces::onButtonReady(const Json::Value &node, Gtk::Button &button) {
if (config_["current-only"].asBool()) {
if (node["focused"].asBool()) {
// If a workspace has a focused container then get_tree will say
// that the workspace itself isn't focused. Therefore we need to
// check if any of its nodes are focused as well.
bool focused = node["focused"].asBool() ||
std::any_of(node["nodes"].begin(), node["nodes"].end(),
[](const auto &child) {
return child["focused"].asBool();
});

if (focused) {
button.show();
} else {
button.hide();
Expand Down

0 comments on commit 637b220

Please sign in to comment.