polybar/src/x11/xutils.cpp

51 lines
1.6 KiB
C++
Raw Normal View History

2016-11-02 19:22:45 +00:00
#include "x11/xutils.hpp"
2016-11-04 17:54:33 +00:00
#include "x11/connection.hpp"
2016-11-02 19:22:45 +00:00
#include "x11/xlib.hpp"
2016-06-15 03:32:35 +00:00
LEMONBUDDY_NS
namespace xutils {
2016-11-02 19:22:45 +00:00
xcb_connection_t* g_connection_ptr = nullptr;
xcb_connection_t* get_connection() {
2016-06-15 03:32:35 +00:00
if (g_connection_ptr == nullptr) {
Display* dsp;
if ((dsp = xlib::get_display()) == nullptr)
return nullptr;
XSetEventQueueOwner(dsp, XCBOwnsEventQueue);
g_connection_ptr = XGetXCBConnection(dsp);
}
return g_connection_ptr;
}
2016-11-02 19:22:45 +00:00
void pack_values(uint32_t mask, const uint32_t* src, uint32_t* dest) {
2016-11-04 17:54:33 +00:00
for (; mask; mask >>= 1, src++) {
if (mask & 1) {
2016-06-15 03:32:35 +00:00
*dest++ = *src;
2016-11-04 17:54:33 +00:00
}
}
2016-06-15 03:32:35 +00:00
}
2016-11-02 19:22:45 +00:00
void pack_values(uint32_t mask, const xcb_params_cw_t* src, uint32_t* dest) {
xutils::pack_values(mask, reinterpret_cast<const uint32_t*>(src), dest);
}
void pack_values(uint32_t mask, const xcb_params_gc_t* src, uint32_t* dest) {
2016-06-15 03:32:35 +00:00
xutils::pack_values(mask, reinterpret_cast<const uint32_t*>(src), dest);
}
2016-11-04 17:54:33 +00:00
void pack_values(uint32_t mask, const xcb_params_configure_window_t* src, uint32_t* dest) {
2016-06-15 03:32:35 +00:00
xutils::pack_values(mask, reinterpret_cast<const uint32_t*>(src), dest);
}
2016-11-04 17:54:33 +00:00
void visibility_notify(connection& conn, const xcb_window_t& win, xcb_visibility_t state) {
auto notify = memory_util::make_malloc_ptr<xcb_visibility_notify_event_t>(32);
notify->response_type = XCB_VISIBILITY_NOTIFY;
notify->window = win;
notify->state = state;
const char* data = reinterpret_cast<const char*>(notify.get());
conn.send_event(true, win, XCB_EVENT_MASK_NO_EVENT, data);
}
2016-06-15 03:32:35 +00:00
}
LEMONBUDDY_NS_END