1 #pragma once 2 3 #include "common.hpp" 4 #include "components/types.hpp" 5 #include "events/signal_emitter.hpp" 6 #include "events/signal_fwd.hpp" 7 #include "x11/extensions/randr.hpp" 8 #include "x11/types.hpp" 9 #include "x11/window.hpp" 10 11 POLYBAR_NS 12 13 // fwd 14 class config; 15 class logger; 16 class connection; 17 class signal_emitter; 18 19 class screen : public xpp::event::sink<evt::randr_screen_change_notify> { 20 public: 21 using make_type = unique_ptr<screen>; 22 static make_type make(); 23 24 explicit screen(connection& conn, signal_emitter& emitter, const logger& logger, const config& conf); 25 ~screen(); 26 size() const27 struct size size() const { 28 return m_size; 29 } 30 root() const31 xcb_window_t root() const { 32 return m_root; 33 } 34 35 protected: 36 void handle(const evt::randr_screen_change_notify& evt); 37 38 private: 39 connection& m_connection; 40 signal_emitter& m_sig; 41 const logger& m_log; 42 const config& m_conf; 43 44 xcb_window_t m_root; 45 xcb_window_t m_proxy{XCB_NONE}; 46 47 vector<monitor_t> m_monitors; 48 struct size m_size {0U, 0U}; 49 bool m_sigraised{false}; 50 51 bool have_monitors_changed() const; 52 }; 53 54 POLYBAR_NS_END 55