#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, state state_, label_t&& label) : index(index), state(state_), label(forward(label)) {} operator bool(); int index; 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{"i3"}; static constexpr const char* EVENT_CLICK{"i3-wsfocus-"}; static constexpr const char* EVENT_SCROLL_UP{"i3-wsnext"}; static constexpr const char* EVENT_SCROLL_DOWN{"i3-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_indexsort = false; bool m_pinworkspaces = false; bool m_strip_wsnumbers = false; size_t m_wsname_maxlen = 0; unique_ptr m_ipc; }; } POLYBAR_NS_END