aboutsummaryrefslogtreecommitdiff
path: root/src/WindowUtils.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-04-20 01:14:03 +0200
committerdec05eba <dec05eba@protonmail.com>2025-04-20 01:14:03 +0200
commit28481db82ce6ff9a4b674ae23c6150805ef5888d (patch)
tree4b74ec287538df0957e694bde5da8569abfacb6e /src/WindowUtils.cpp
parent4d8328a8d5c3f92d938e92865193e3dd73d7a6ed (diff)
Update to latest mglpp
Diffstat (limited to 'src/WindowUtils.cpp')
-rw-r--r--src/WindowUtils.cpp20
1 files changed, 14 insertions, 6 deletions
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 <X11/extensions/XInput2.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/shapeconst.h>
+#include <X11/extensions/Xrandr.h>
#include <mglpp/system/Utf8.hpp>
@@ -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<Monitor> *monitors = (std::vector<Monitor>*)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<Monitor> get_monitors(Display *dpy) {
std::vector<Monitor> 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;
}