summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile7
-rw-r--r--xinerama-resolution.c46
3 files changed, 54 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f4089d5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+xinerama-resolution
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..758c559
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+TARGETS:= xinerama-resolution
+LDFLAGS:=-lX11 -lXinerama
+
+all: $(TARGETS)
+
+clean:
+ $(RM) $(TARGETS)
diff --git a/xinerama-resolution.c b/xinerama-resolution.c
new file mode 100644
index 0000000..adbd38a
--- /dev/null
+++ b/xinerama-resolution.c
@@ -0,0 +1,46 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+
+#include <X11/Xlib.h>
+#include <X11/extensions/Xinerama.h>
+
+int main(int argc, char **argv)
+{
+ Display *dpy;
+ XineramaScreenInfo *xsi;
+ int i, nscreens;
+
+ dpy = XOpenDisplay(NULL);
+ if (dpy == NULL) {
+ fputs("ERROR: Could not open display!\n", stderr);
+ return EXIT_FAILURE;
+ }
+
+ /* Is xinerama extension available? */
+ if (!XineramaIsActive(dpy)) {
+ fputs("ERROR: Xinerama extension unavailable on current screen!\n", stderr);
+ return EXIT_FAILURE;
+ }
+ else {
+ xsi = XineramaQueryScreens(dpy, &nscreens);
+
+ if (argc <= 1) {
+ for (i = 0; i < nscreens; i++) {
+ printf("screen %d: %dx%d\n", i, xsi[i].width, xsi[i].height);
+ }
+ }
+ else {
+ i = atoi(argv[1]);
+ if (i <= 0 || i > nscreens) {
+ fprintf(stderr, "ERROR: Screen %d not available!\n", i);
+ return EXIT_FAILURE;
+ }
+ else
+ printf("%dx%d\n", xsi[i-1].width, xsi[i-1].height);
+ }
+ }
+
+ return EXIT_SUCCESS;
+}
+