/* copyright Constantin Fürst 2021, licensed under GPLv3, a copy is provided in LICENSE */ /* non-major portions of the code were taken from DWM (https://dwm.suckless.org) */ /* inspired and named after keym by Chris Willcocks (https://github.com/cwkx/keym) */ #pragma once #include static const uint32_t KEY_RELEASE_MASK = 0b10000000000000000000000000000000; static const uint32_t sizeof_MOUSE_BUTTONS = 5; enum MOUSE_BUTTONS { MB_Left, MB_Right, MB_Middle, MB_Back, MB_Forward }; static const uint32_t sizeof_SCROLL_DIRECTION = 2; enum SCROLL_DIRECTION { SD_Up, SD_Down }; enum MOUSE_MOVEMENT { MM_Up, MM_Down, MM_Left, MM_Right }; enum CONTROL_ACTIONS { CA_SPEED_LOW, CA_SPEED_HIGH, CA_QUIT_APPLICATION }; typedef struct { unsigned int mod; KeySym keysym; void (*func)(const uint32_t*); const uint32_t arg; } Key; typedef struct { // X11 window access Display* display; Window window; int screen; fd_set in_fds; int x11_fd; // keym-settings unsigned int speed; int quit; // current movement int x; int y; } keym_state; static unsigned int numlockmask = 0; #define LENGTH(X) sizeof(X) / sizeof(X[0]) #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))