hyprland/window: Correct application of .solo class

This commit is contained in:
gardenapple 2023-06-20 03:23:03 +03:00
parent fd7c2a2012
commit 30c4f08773
No known key found for this signature in database
GPG Key ID: 30A642B65B1529FE
2 changed files with 13 additions and 5 deletions

View File

@ -38,8 +38,9 @@ class Window : public waybar::ALabel, public EventHandler {
Workspace workspace_;
std::string solo_class_;
std::string last_solo_class_;
bool fullscreen_;
bool solo_;
bool all_floating_;
bool fullscreen_;
};
} // namespace waybar::modules::hyprland

View File

@ -4,6 +4,7 @@
#include <algorithm>
#include <regex>
#include <vector>
#include "modules/hyprland/backend.hpp"
#include "util/json.hpp"
@ -64,7 +65,7 @@ auto Window::update() -> void {
setClass("empty", workspace_.windows == 0);
setClass("solo", workspace_.windows == 1);
setClass("solo", solo_);
setClass("fullscreen", fullscreen_);
setClass("floating", all_floating_);
@ -149,12 +150,18 @@ void Window::queryActiveWorkspace() {
} else {
solo_class_ = "";
}
all_floating_ = std::all_of(json.begin(), json.end(),
[&](Json::Value window) { return window["floating"].asBool() ||
window["workspace"]["id"] != workspace_.id; });
std::vector<Json::Value> workspace_windows;
std::copy_if(json.begin(), json.end(), std::back_inserter(workspace_windows),
[&](Json::Value window) { return window["workspace"]["id"] == workspace_.id &&
window["mapped"].asBool(); });
solo_ = 1 == std::count_if(workspace_windows.begin(), workspace_windows.end(),
[&](Json::Value window) { return !window["floating"].asBool(); });
all_floating_ = std::all_of(workspace_windows.begin(), workspace_windows.end(),
[&](Json::Value window) { return window["floating"].asBool(); });
fullscreen_ = (*active_window)["fullscreen"].asBool();
} else {
solo_class_ = "";
solo_ = false;
all_floating_ = false;
fullscreen_ = false;
}