keycodes mod

This commit is contained in:
2022-11-03 11:58:55 +01:00
parent e6488ec4be
commit 0b4df537d1
10 changed files with 458 additions and 78 deletions

16
dwm.c
View File

@@ -31,7 +31,6 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/Xproto.h>
@@ -101,7 +100,7 @@ struct Client {
typedef struct {
unsigned int mod;
KeySym keysym;
KeySym keycode;
void (*func)(const Arg *);
const Arg arg;
} Key;
@@ -957,14 +956,13 @@ grabkeys(void)
{
unsigned int i, j;
unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
KeyCode code;
XUngrabKey(dpy, AnyKey, AnyModifier, root);
for (i = 0; i < LENGTH(keys); i++)
if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
for (j = 0; j < LENGTH(modifiers); j++)
XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
True, GrabModeAsync, GrabModeAsync);
for (j = 0; j < LENGTH(modifiers); ++j)
XGrabKey(dpy, keys[i].keycode,
keys[i].mod | modifiers[j], root, True,
GrabModeAsync, GrabModeAsync);
}
}
@@ -991,13 +989,11 @@ void
keypress(XEvent *e)
{
unsigned int i;
KeySym keysym;
XKeyEvent *ev;
ev = &e->xkey;
keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
for (i = 0; i < LENGTH(keys); i++)
if (keysym == keys[i].keysym
if (ev->keycode == keys[i].keycode
&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
&& keys[i].func)
keys[i].func(&(keys[i].arg));