aboutsummaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-03-30 01:19:50 +0200
committerdec05eba <dec05eba@protonmail.com>2022-03-30 01:19:50 +0200
commit44b986c762815874ccfb636152ae452ecba48764 (patch)
tree5b5412a7c9ef6ccc5283af56121aae5596b13253 /main.cpp
wip
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..ee58e4d
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <X11/Xlib.h>
+#include <X11/cursorfont.h>
+#include <unistd.h>
+
+static int x11_error_handler(Display *dpy, XErrorEvent *ev) {
+ return 0;
+}
+
+static void usage() {
+ fprintf(stderr, "usage: window-overlay <window>\n");
+ exit(1);
+}
+
+static bool string_to_i64(const char *str, int64_t *result) {
+ errno = 0;
+ char *endptr = nullptr;
+ int64_t res = strtoll(str, &endptr, 0);
+ if(endptr == str || errno != 0)
+ return false;
+
+ *result = res;
+ return true;
+}
+
+int main(int argc, char **argv) {
+ if(argc != 2)
+ usage();
+
+ int64_t target_window;
+ if(!string_to_i64(argv[1], &target_window)) {
+ fprintf(stderr, "Error: invalid number '%s' was specific for window argument\n", argv[1]);
+ return 1;
+ }
+
+ XSetErrorHandler(x11_error_handler);
+
+ Display *display = XOpenDisplay(NULL);
+ if(!display) {
+ fprintf(stderr, "Error: XOpenDisplay failed\n");
+ return 1;
+ }
+
+ //const Window root_window = DefaultRootWindow(display);
+ const int screen = DefaultScreen(display);
+
+ XSetWindowAttributes attr;
+ attr.background_pixel = XWhitePixel(display, screen);
+ attr.override_redirect = True;
+
+ Window overlay_window = XCreateWindow(display, target_window, 0, 0, 256, 256, 0, DefaultDepth(display, screen), InputOutput, XDefaultVisual(display, screen), CWBackPixel|CWOverrideRedirect, &attr);
+ if(!overlay_window) {
+ fprintf(stderr, "Error: failed to create overlay window\n");
+ return 1;
+ }
+
+ Cursor default_cursor = XCreateFontCursor(display, XC_arrow);
+
+ XMapWindow(display, overlay_window);
+ XGrabPointer(display, overlay_window, True, ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeSync, None, default_cursor, CurrentTime);
+ sleep(3);
+
+ /*XEvent xev;
+ for(;;) {
+ XNextEvent(display, &xev);
+ }*/
+
+ return 0;
+}