#pragma once #include #include #include #include "IModule.hpp" #include "bar.hpp" #include "client.hpp" #include "modules/sway/ipc/client.hpp" #include "util/sleeper_thread.hpp" #include "util/json.hpp" namespace waybar::modules::sway { class Workspaces : public IModule, public sigc::trackable { public: Workspaces(const std::string&, const waybar::Bar&, const Json::Value&); ~Workspaces() = default; auto update() -> void; operator Gtk::Widget&(); private: void onCmd(const struct Ipc::ipc_response&); void onEvent(const struct Ipc::ipc_response&); void worker(); bool filterButtons(); Gtk::Button& addButton(const Json::Value&); void onButtonReady(const Json::Value&, Gtk::Button&); std::string getIcon(const std::string&, const Json::Value&); bool handleScroll(GdkEventScroll*); const std::string getCycleWorkspace(std::vector::iterator, bool prev) const; uint16_t getWorkspaceIndex(const std::string& name) const; std::string trimWorkspaceName(std::string); const Bar& bar_; const Json::Value& config_; std::vector workspaces_; waybar::util::SleeperThread thread_; std::mutex mutex_; Gtk::Box box_; Ipc ipc_; util::JsonParser parser_; bool scrolling_; std::unordered_map buttons_; }; } // namespace waybar::modules::sway