#pragma once #include #include "components/config.hpp" #include "config.hpp" #include "modules/meta/event_module.hpp" #include "utils/i3.hpp" #include "utils/io.hpp" POLYBAR_NS namespace modules { class i3_module : public event_module { public: enum class state { NONE, FOCUSED, UNFOCUSED, VISIBLE, URGENT, }; struct workspace { explicit workspace(int index, enum state state_, label_t&& label) : index(index), state(state_), label(forward(label)) {} operator bool(); int index; enum state state; label_t label; }; using event_module::event_module; void setup(); void stop(); bool has_event(); bool update(); bool build(builder* builder, const string& tag) const; bool handle_event(string cmd); bool receive_events() const { return true; } private: static constexpr const char* DEFAULT_TAGS{" "}; static constexpr const char* DEFAULT_MODE{"default"}; static constexpr const char* DEFAULT_WS_ICON{"ws-icon-default"}; static constexpr const char* DEFAULT_WS_LABEL{"%icon% %name%"}; static constexpr const char* TAG_LABEL_STATE{""}; static constexpr const char* TAG_LABEL_MODE{""}; static constexpr const char* EVENT_PREFIX{"i3wm"}; static constexpr const char* EVENT_CLICK{"i3wm-wsfocus-"}; static constexpr const char* EVENT_SCROLL_UP{"i3wm-wsnext"}; static constexpr const char* EVENT_SCROLL_DOWN{"i3wm-wsprev"}; map m_statelabels; vector> m_workspaces; iconset_t m_icons; label_t m_modelabel; bool m_modeactive{false}; bool m_click{true}; bool m_scroll{true}; bool m_wrap{true}; bool m_indexsort{false}; bool m_pinworkspaces{false}; bool m_strip_wsnumbers{false}; size_t m_wsname_maxlen{0}; unique_ptr m_ipc; }; } POLYBAR_NS_END