From 28481db82ce6ff9a4b674ae23c6150805ef5888d Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 20 Apr 2025 01:14:03 +0200 Subject: Update to latest mglpp --- src/WindowUtils.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/WindowUtils.cpp') diff --git a/src/WindowUtils.cpp b/src/WindowUtils.cpp index cf983db..eb6080f 100644 --- a/src/WindowUtils.cpp +++ b/src/WindowUtils.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -518,14 +519,21 @@ namespace gsr { return XGetSelectionOwner(dpy, prop_atom) != None; } - static void get_monitors_callback(const mgl_monitor *monitor, void *userdata) { - std::vector *monitors = (std::vector*)userdata; - monitors->push_back({mgl::vec2i(monitor->pos.x, monitor->pos.y), mgl::vec2i(monitor->size.x, monitor->size.y), std::string(monitor->name)}); - } - std::vector get_monitors(Display *dpy) { std::vector monitors; - mgl_for_each_active_monitor_output(dpy, get_monitors_callback, &monitors); + int nmonitors = 0; + XRRMonitorInfo *monitor_info = XRRGetMonitors(dpy, DefaultRootWindow(dpy), True, &nmonitors); + if(monitor_info) { + for(int i = 0; i < nmonitors; ++i) { + char *monitor_name = XGetAtomName(dpy, monitor_info[i].name); + if(!monitor_name) + continue; + + monitors.push_back({mgl::vec2i(monitor_info[i].x, monitor_info[i].y), mgl::vec2i(monitor_info[i].width, monitor_info[i].height), std::string(monitor_name)}); + XFree(monitor_name); + } + XRRFreeMonitors(monitor_info); + } return monitors; } -- cgit v1.2.3-70-g09d2