aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorAleksandrs Stier <aleks.stier@icloud.com>2024-04-03 00:12:11 +0200
committerAleksandrs Stier <aleks.stier@icloud.com>2024-04-03 16:32:38 +0200
commit4633c1e57389e49324302246a611766aa043ecf4 (patch)
tree52b2f5d8c3c74f127a1c1bee3261f79a5a96bb7f /main.c
Publish xhidecursor
Diffstat (limited to 'main.c')
-rw-r--r--main.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..d80e968
--- /dev/null
+++ b/main.c
@@ -0,0 +1,45 @@
+#include <X11/extensions/XInput2.h>
+
+#include <stdio.h>
+
+static void xi_select_events(int);
+
+static Display *d;
+static Window r; // root-window
+
+void xi_select_events(const int event) {
+ unsigned char mask[3] = {None};
+ XISetMask(mask, event);
+ XIEventMask event_mask;
+ event_mask.deviceid = XIAllMasterDevices;
+ event_mask.mask_len = sizeof(mask);
+ event_mask.mask = mask;
+ XISelectEvents(d, r, &event_mask, 1);
+}
+
+int main(void) {
+ if (!(d = XOpenDisplay(NULL))) {
+ printf("Couldn't open Display.\n");
+ return 1;
+ }
+ r = XDefaultRootWindow(d);
+ xi_select_events(XI_RawKeyPress);
+ XEvent e;
+ XGenericEventCookie *c;
+ while (!XNextEvent(d, &e)) {
+ if (!XGetEventData(d, (c = &e.xcookie)))
+ continue;
+ switch (c->evtype) {
+ case XI_RawKeyPress:
+ xi_select_events(XI_RawMotion);
+ XFixesHideCursor(d, r);
+ break;
+ case XI_RawMotion:
+ xi_select_events(XI_RawKeyPress);
+ XFixesShowCursor(d, r);
+ break;
+ }
+ XFreeEventData(d, c);
+ }
+ XCloseDisplay(d);
+}