hyprland/window: rename .hidden to .swallowing (and fix grouped windows)

This commit is contained in:
gardenapple 2023-07-12 19:01:45 +03:00
parent 14c6550593
commit daca57129f
No known key found for this signature in database
GPG Key ID: 30A642B65B1529FE
3 changed files with 20 additions and 11 deletions

View File

@ -31,6 +31,8 @@ class Window : public waybar::AAppIconLabel, public EventHandler {
std::string initial_class_name; std::string initial_class_name;
std::string title; std::string title;
std::string initial_title; std::string initial_title;
bool fullscreen;
bool grouped;
static auto parse(const Json::Value&) -> WindowData; static auto parse(const Json::Value&) -> WindowData;
}; };
@ -51,7 +53,7 @@ class Window : public waybar::AAppIconLabel, public EventHandler {
std::string last_solo_class_; std::string last_solo_class_;
bool solo_; bool solo_;
bool all_floating_; bool all_floating_;
bool hidden_; bool swallowing_;
bool fullscreen_; bool fullscreen_;
}; };

View File

@ -76,5 +76,4 @@ window widget:
- *window#waybar.floating* When there are only floating windows in the workspace - *window#waybar.floating* When there are only floating windows in the workspace
- *window#waybar.fullscreen* When there is a fullscreen window in the workspace; - *window#waybar.fullscreen* When there is a fullscreen window in the workspace;
useful with Hyprland's *fullscreen, 1* mode useful with Hyprland's *fullscreen, 1* mode
- *window#waybar.hidden-window* When there are hidden windows in the workspace; - *window#waybar.swallowing* When there is a swallowed window in the workspace
can occur due to window swallowing, *fullscreen, 1* mode, or grouped windows

View File

@ -72,7 +72,7 @@ auto Window::update() -> void {
setClass("empty", workspace_.windows == 0); setClass("empty", workspace_.windows == 0);
setClass("solo", solo_); setClass("solo", solo_);
setClass("floating", all_floating_); setClass("floating", all_floating_);
setClass("hidden-window", hidden_); setClass("swallowing", swallowing_);
setClass("fullscreen", fullscreen_); setClass("fullscreen", fullscreen_);
if (!last_solo_class_.empty() && solo_class_ != last_solo_class_) { if (!last_solo_class_.empty() && solo_class_ != last_solo_class_) {
@ -125,9 +125,10 @@ auto Window::Workspace::parse(const Json::Value& value) -> Window::Workspace {
} }
auto Window::WindowData::parse(const Json::Value& value) -> Window::WindowData { auto Window::WindowData::parse(const Json::Value& value) -> Window::WindowData {
return WindowData{value["floating"].asBool(), value["monitor"].asInt(), return WindowData{value["floating"].asBool(), value["monitor"].asInt(),
value["class"].asString(), value["initialClass"].asString(), value["class"].asString(), value["initialClass"].asString(),
value["title"].asString(), value["initialTitle"].asString()}; value["title"].asString(), value["initialTitle"].asString(),
value["fullscreen"].asBool(), !value["grouped"].empty()};
} }
void Window::queryActiveWorkspace() { void Window::queryActiveWorkspace() {
@ -156,8 +157,8 @@ void Window::queryActiveWorkspace() {
[&](Json::Value window) { [&](Json::Value window) {
return window["workspace"]["id"] == workspace_.id && window["mapped"].asBool(); return window["workspace"]["id"] == workspace_.id && window["mapped"].asBool();
}); });
hidden_ = std::any_of(workspace_windows.begin(), workspace_windows.end(), swallowing_ = std::any_of(workspace_windows.begin(), workspace_windows.end(),
[&](Json::Value window) { return window["hidden"].asBool(); }); [&](Json::Value window) { return !window["swallowing"].isNull(); });
std::vector<Json::Value> visible_windows; std::vector<Json::Value> visible_windows;
std::copy_if(workspace_windows.begin(), workspace_windows.end(), std::copy_if(workspace_windows.begin(), workspace_windows.end(),
std::back_inserter(visible_windows), std::back_inserter(visible_windows),
@ -166,12 +167,19 @@ void Window::queryActiveWorkspace() {
[&](Json::Value window) { return !window["floating"].asBool(); }); [&](Json::Value window) { return !window["floating"].asBool(); });
all_floating_ = std::all_of(visible_windows.begin(), visible_windows.end(), all_floating_ = std::all_of(visible_windows.begin(), visible_windows.end(),
[&](Json::Value window) { return window["floating"].asBool(); }); [&](Json::Value window) { return window["floating"].asBool(); });
fullscreen_ = (*active_window)["fullscreen"].asBool(); fullscreen_ = window_data_.fullscreen;
// Fullscreen windows look like they are solo
if (fullscreen_) { if (fullscreen_) {
solo_ = true; solo_ = true;
} }
// Grouped windows have a tab bar and therefore don't look fullscreen or solo
if (window_data_.grouped) {
fullscreen_ = false;
solo_ = false;
}
if (solo_) { if (solo_) {
solo_class_ = window_data_.class_name; solo_class_ = window_data_.class_name;
} else { } else {
@ -180,7 +188,7 @@ void Window::queryActiveWorkspace() {
} else { } else {
window_data_ = WindowData{}; window_data_ = WindowData{};
all_floating_ = false; all_floating_ = false;
hidden_ = false; swallowing_ = false;
fullscreen_ = false; fullscreen_ = false;
solo_ = false; solo_ = false;
solo_class_ = ""; solo_class_ = "";