#pragma once #include "common.hpp" #include "components/config.hpp" #include "components/types.hpp" #include "modules/meta/static_module.hpp" #include "x11/events.hpp" #include "x11/window.hpp" #include "x11/xkb.hpp" POLYBAR_NS class connection; namespace modules { /** * Keyboard module using the X keyboard extension */ class xkeyboard_module : public static_module, public xpp::event::sink { public: xkeyboard_module(const bar_settings& bar, const logger& logger, const config& config, string name); void setup(); void teardown(); void update(); bool build(builder* builder, const string& tag) const; protected: bool query_keyboard(); bool blacklisted(const string& indicator_name); void handle(const evt::xkb_new_keyboard_notify& evt); void handle(const evt::xkb_indicator_state_notify& evt); private: static constexpr const char* TAG_LABEL_LAYOUT{""}; static constexpr const char* TAG_LABEL_INDICATOR{""}; static constexpr const char* FORMAT_DEFAULT{" "}; connection& m_connection; event_timer m_xkbnotify{}; unique_ptr m_keyboard; label_t m_layout; label_t m_indicator; map m_indicators; vector m_blacklist; }; } POLYBAR_NS_END