4#include "XineramaModule.h"
10 std::vector<Cogs::Monitor> monitors;
13void Cogs::Monitor::enumerate() {
16 X11Module& x11 = X11Module::instance();
17 ::Display* display = x11.XOpenDisplay(
nullptr);
19 XineramaScreenInfo* screens = XineramaModule::instance().XineramaQueryScreens(display, &screenCount);
21 monitors.resize(screenCount);
22 for (
int idx = 0; idx < screenCount; ++idx) {
23 const XineramaScreenInfo* screen = screens + idx;
24 Monitor& monitor = monitors[idx];
26 monitor.identifier =
reinterpret_cast<void*
>(screen->screen_number);
27 monitor.name = std::to_string(screen->screen_number);
28 monitor.position = glm::ivec2(screen->x_org, screen->y_org);
29 monitor.size = glm::ivec2(screen->width, screen->height);
32 if ((screen->x_org == 0) && (screen->y_org == 0)) {
33 monitor.primary =
true;
37 x11.XCloseDisplay(display);