#pragma once #include #include #include "modules/sway/ipc/client.hpp" #include "util/SafeSignal.hpp" #include "util/json.hpp" namespace waybar { class Bar; namespace modules::sway { /* * Supported subset of i3/sway IPC barconfig object */ struct swaybar_config { std::string id; std::string mode; std::string hidden_state; }; /** * swaybar IPC client */ class BarIpcClient { public: BarIpcClient(waybar::Bar& bar); private: void onInitialConfig(const struct Ipc::ipc_response& res); void onIpcEvent(const struct Ipc::ipc_response&); void onCmd(const struct Ipc::ipc_response&); void onConfigUpdate(const swaybar_config& config); void onVisibilityUpdate(bool visible_by_modifier); void onModeUpdate(bool visible_by_modifier); void onUrgencyUpdate(bool visible_by_urgency); void update(); bool isModuleEnabled(std::string name); Bar& bar_; util::JsonParser parser_; Ipc ipc_; swaybar_config bar_config_; std::string modifier_reset_; bool visible_by_mode_ = false; bool visible_by_modifier_ = false; bool visible_by_urgency_ = false; std::atomic modifier_no_action_ = false; SafeSignal signal_mode_; SafeSignal signal_visible_; SafeSignal signal_urgency_; SafeSignal signal_config_; }; } // namespace modules::sway } // namespace waybar