diff options
author | davidovski <david@sendula.com> | 2021-04-12 22:16:16 +0100 |
---|---|---|
committer | davidovski <david@sendula.com> | 2021-04-12 22:16:16 +0100 |
commit | fc9fa1e4a2bf3ac0094eae7b40453631a9fae50e (patch) | |
tree | f17fdb026adb5a4def8bb067b425d8aec75a02d1 |
press, no release
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | anyscroll.c | 71 |
2 files changed, 78 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3bd1e01 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ + +PROG = anyscroll +FLAGS = -lX11 -lXtst + + +${PROG}: ${PROG}.o + gcc ${PROG}.c -o ${PROG} ${FLAGS} diff --git a/anyscroll.c b/anyscroll.c new file mode 100644 index 0000000..2dbd8b8 --- /dev/null +++ b/anyscroll.c @@ -0,0 +1,71 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <X11/Xlib.h> +#include <X11/extensions/XTest.h> +#include <unistd.h> + + +static Display *dpy; +static int scr, sw, sh; + +static Window root; + +static void pressButton(int btn) { + XTestFakeButtonEvent(dpy, btn, True, CurrentTime); + XFlush(dpy); +} +static void releaseButton(int btn) { + XTestFakeButtonEvent(dpy, btn, False, CurrentTime); + XFlush(dpy); +} + + +int main(int argc, const char **argv) { + + for (int i = 1; i < argc; i++) { + if (argv[i][1] == 'h') { + fprintf(stdout, "there is no help to be given\n"); + } + } + + if (!(dpy = XOpenDisplay(0x0))) return 1; + + scr = DefaultScreen(dpy); + root = XDefaultRootWindow(dpy); + sw = DisplayWidth(dpy, scr); + sh = DisplayHeight(dpy, scr); + + fprintf(stdout, "waiting for events\n"); + + const long mask = ButtonPressMask|ButtonReleaseMask; +// XGrabPointer(dpy, root, True, mask, GrabModeSync, GrabModeAsync, None, None, CurrentTime); + XGrabButton(dpy, 2, AnyModifier, root, True, mask, GrabModeSync, GrabModeAsync, None, None); + //XSelectInput(dpy, root, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask); + + XEvent ev; + XButtonEvent *eb; + + int grab = 0; + + for (;;) { + XNextEvent(dpy, &ev); + if (ev.type == ButtonPress) { + eb = &ev.xbutton; + printf("%d button pressed!\n", eb->button); +// XGrabPointer(dpy, root, True, PointerMotionMask|ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); + + } else if (ev.type == ButtonRelease) { + eb = &ev.xbutton; + printf("%d button released!\n", eb->button); + //releaseButton(2); + // XUngrabPointer(dpy, CurrentTime); + } + + XAllowEvents(dpy, ReplayPointer, CurrentTime); + XSync(dpy, 0); +// XFlush(dpy); + } + XCloseDisplay(dpy); + return 0; +} |