hyprland/window: Correct application of .solo class

pull/2245/head
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_; Workspace workspace_;
std::string solo_class_; std::string solo_class_;
std::string last_solo_class_; std::string last_solo_class_;
bool fullscreen_; bool solo_;
bool all_floating_; bool all_floating_;
bool fullscreen_;
}; };
} // namespace waybar::modules::hyprland } // namespace waybar::modules::hyprland

View File

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