diff --git a/include/modules/sway/ipc/client.hpp b/include/modules/sway/ipc/client.hpp index 640f0695..a3ef9456 100644 --- a/include/modules/sway/ipc/client.hpp +++ b/include/modules/sway/ipc/client.hpp @@ -42,7 +42,6 @@ class Ipc { int fd_; int fd_event_; std::mutex mutex_; - std::mutex mutex_event_; }; } // namespace waybar::modules::sway diff --git a/src/bar.cpp b/src/bar.cpp index dfe01ec2..2cb41644 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -111,15 +111,13 @@ void waybar::Bar::setupAltFormatKeyForModule(const std::string& module_name) { if (module.isMember("format-alt-click")) { Json::Value& click = module["format-alt-click"]; if (click.isString()) { - std::string str_click = click.asString(); - - if (str_click == "click-right") { + if (click == "click-right") { module["format-alt-click"] = 3U; - } else if (str_click == "click-middle") { + } else if (click == "click-middle") { module["format-alt-click"] = 2U; - } else if (str_click == "click-backward") { + } else if (click == "click-backward") { module["format-alt-click"] = 8U; - } else if (str_click == "click-forward") { + } else if (click == "click-forward") { module["format-alt-click"] = 9U; } else { module["format-alt-click"] = 1U; // default click-left diff --git a/src/modules/sway/ipc/client.cpp b/src/modules/sway/ipc/client.cpp index b959a8ee..28eb25fc 100644 --- a/src/modules/sway/ipc/client.cpp +++ b/src/modules/sway/ipc/client.cpp @@ -131,7 +131,6 @@ void Ipc::sendCmd(uint32_t type, const std::string& payload) { } void Ipc::subscribe(const std::string& payload) { - std::lock_guard lock(mutex_event_); auto res = Ipc::send(fd_event_, IPC_SUBSCRIBE, payload); if (res.payload != "{\"success\": true}") { throw std::runtime_error("Unable to subscribe ipc event"); @@ -139,7 +138,6 @@ void Ipc::subscribe(const std::string& payload) { } void Ipc::handleEvent() { - std::lock_guard lock(mutex_event_); const auto res = Ipc::recv(fd_event_); signal_event.emit(res); } diff --git a/src/modules/sway/mode.cpp b/src/modules/sway/mode.cpp index 6d4a226c..e908d708 100644 --- a/src/modules/sway/mode.cpp +++ b/src/modules/sway/mode.cpp @@ -15,13 +15,17 @@ Mode::Mode(const std::string& id, const Json::Value& config) : ALabel(config, "{ } void Mode::onEvent(const struct Ipc::ipc_response& res) { - auto payload = parser_.parse(res.payload); - if (payload["change"] != "default") { - mode_ = payload["change"].asString(); - } else { - mode_.clear(); + try { + auto payload = parser_.parse(res.payload); + if (payload["change"] != "default") { + mode_ = payload["change"].asString(); + } else { + mode_.clear(); + } + dp.emit(); + } catch (const std::exception& e) { + std::cerr << "Mode: " << e.what() << std::endl; } - dp.emit(); } void Mode::worker() { diff --git a/src/modules/sway/window.cpp b/src/modules/sway/window.cpp index 8d87093c..2f0287fd 100644 --- a/src/modules/sway/window.cpp +++ b/src/modules/sway/window.cpp @@ -24,27 +24,31 @@ Window::Window(const std::string& id, const Bar& bar, const Json::Value& config) void Window::onEvent(const struct Ipc::ipc_response& res) { getTree(); } void Window::onCmd(const struct Ipc::ipc_response& res) { - auto payload = parser_.parse(res.payload); - auto [nb, id, name, app_id] = getFocusedNode(payload); - if (!app_id_.empty()) { - bar_.window.get_style_context()->remove_class(app_id_); - } - if (nb == 0) { - bar_.window.get_style_context()->add_class("empty"); - } else if (nb == 1) { - bar_.window.get_style_context()->add_class("solo"); - if (!app_id.empty()) { - bar_.window.get_style_context()->add_class(app_id); + try { + auto payload = parser_.parse(res.payload); + auto [nb, id, name, app_id] = getFocusedNode(payload); + if (!app_id_.empty()) { + bar_.window.get_style_context()->remove_class(app_id_); } - } else { - bar_.window.get_style_context()->remove_class("solo"); - bar_.window.get_style_context()->remove_class("empty"); - } - app_id_ = app_id; - if (windowId_ != id || window_ != name) { - windowId_ = id; - window_ = name; - dp.emit(); + if (nb == 0) { + bar_.window.get_style_context()->add_class("empty"); + } else if (nb == 1) { + bar_.window.get_style_context()->add_class("solo"); + if (!app_id.empty()) { + bar_.window.get_style_context()->add_class(app_id); + } + } else { + bar_.window.get_style_context()->remove_class("solo"); + bar_.window.get_style_context()->remove_class("empty"); + } + app_id_ = app_id; + if (windowId_ != id || window_ != name) { + windowId_ = id; + window_ = name; + dp.emit(); + } + } catch (const std::exception& e) { + std::cerr << "Window: " << e.what() << std::endl; } } diff --git a/src/modules/sway/workspaces.cpp b/src/modules/sway/workspaces.cpp index f53255e9..50be8d94 100644 --- a/src/modules/sway/workspaces.cpp +++ b/src/modules/sway/workspaces.cpp @@ -23,19 +23,23 @@ void Workspaces::onEvent(const struct Ipc::ipc_response &res) { ipc_.sendCmd(IPC void Workspaces::onCmd(const struct Ipc::ipc_response &res) { if (res.type == IPC_GET_WORKSPACES) { - auto payload = parser_.parse(res.payload); - if (payload.isArray()) { - std::lock_guard lock(mutex_); - workspaces_.clear(); - std::copy_if(payload.begin(), - payload.end(), - std::back_inserter(workspaces_), - [&](const auto &workspace) { - return !config_["all-outputs"].asBool() - ? workspace["output"].asString() == bar_.output->name - : true; - }); - dp.emit(); + try { + auto payload = parser_.parse(res.payload); + if (payload.isArray()) { + std::lock_guard lock(mutex_); + workspaces_.clear(); + std::copy_if(payload.begin(), + payload.end(), + std::back_inserter(workspaces_), + [&](const auto &workspace) { + return !config_["all-outputs"].asBool() + ? workspace["output"].asString() == bar_.output->name + : true; + }); + dp.emit(); + } + } catch (const std::exception &e) { + std::cerr << "Workspaces: " << e.what() << std::endl; } } else { if (scrolling_) {