#include #include "utils/factory.hpp" #include "x11/xlib.hpp" POLYBAR_NS namespace xlib { namespace detail { display_lock::display_lock(Display* display) : m_display(forward(display)) { XLockDisplay(m_display); } display_lock::~display_lock() { XUnlockDisplay(m_display); } } Display* get_display() { static Display* display{XOpenDisplay(nullptr)}; return display; } Visual* get_visual(int screen, uint8_t depth) { static shared_ptr visual; if (!visual) { XVisualInfo info{}; if (XMatchVisualInfo(get_display(), screen, depth, TrueColor, &info)) { visual = shared_ptr(info.visual, [=](Visual* v) { XFree(v); }); } } return &*visual; } Colormap create_colormap(int screen) { return XDefaultColormap(get_display(), screen); } inline auto make_display_lock() { return make_unique(get_display()); } } POLYBAR_NS_END