fix(sway/window): check output recursively

pull/385/head
Alex 2019-06-14 10:57:22 +02:00
parent 11bbc3b24d
commit 486b5a5d38
2 changed files with 9 additions and 5 deletions

View File

@ -21,7 +21,7 @@ class Window : public ALabel, public sigc::trackable {
void onEvent(const struct Ipc::ipc_response&); void onEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&); void onCmd(const struct Ipc::ipc_response&);
void worker(); void worker();
std::tuple<std::size_t, int, std::string, std::string> getFocusedNode(const Json::Value& nodes); std::tuple<std::size_t, int, std::string, std::string> getFocusedNode(const Json::Value& nodes, std::string output);
void getTree(); void getTree();
const Bar& bar_; const Bar& bar_;

View File

@ -23,7 +23,8 @@ void Window::onCmd(const struct Ipc::ipc_response& res) {
try { try {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
auto payload = parser_.parse(res.payload); auto payload = parser_.parse(res.payload);
std::tie(app_nb_, windowId_, window_, app_id_) = getFocusedNode(payload); auto output = payload["ouput"].isString() ? payload["output"].asString() : "";
std::tie(app_nb_, windowId_, window_, app_id_) = getFocusedNode(payload, output);
dp.emit(); dp.emit();
} catch (const std::exception& e) { } catch (const std::exception& e) {
spdlog::error("Window: {}", e.what()); spdlog::error("Window: {}", e.what());
@ -69,10 +70,13 @@ auto Window::update() -> void {
} }
std::tuple<std::size_t, int, std::string, std::string> Window::getFocusedNode( std::tuple<std::size_t, int, std::string, std::string> Window::getFocusedNode(
const Json::Value& nodes) { const Json::Value& nodes, std::string output) {
for (auto const& node : nodes["nodes"]) { for (auto const& node : nodes["nodes"]) {
if (node["output"].isString()) {
output = node["output"].asString();
}
if (node["focused"].asBool() && node["type"] == "con") { if (node["focused"].asBool() && node["type"] == "con") {
if ((!config_["all-outputs"].asBool() && nodes["output"] == bar_.output->name) || if ((!config_["all-outputs"].asBool() && output == bar_.output->name) ||
config_["all-outputs"].asBool()) { config_["all-outputs"].asBool()) {
auto app_id = node["app_id"].isString() ? node["app_id"].asString() auto app_id = node["app_id"].isString() ? node["app_id"].asString()
: node["window_properties"]["instance"].asString(); : node["window_properties"]["instance"].asString();
@ -82,7 +86,7 @@ std::tuple<std::size_t, int, std::string, std::string> Window::getFocusedNode(
app_id}; app_id};
} }
} }
auto [nb, id, name, app_id] = getFocusedNode(node); auto [nb, id, name, app_id] = getFocusedNode(node, output);
if (id > -1 && !name.empty()) { if (id > -1 && !name.empty()) {
return {nb, id, name, app_id}; return {nb, id, name, app_id};
} }