tabbed-keyrelease-20191216-b5f9ec6.diff - sites - public wiki contents of suckl… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
tabbed-keyrelease-20191216-b5f9ec6.diff (2749B) | |
--- | |
1 From 6c58b480b7b6ce6a28beafc60a096069fbd51532 Mon Sep 17 00:00:00 2001 | |
2 From: LeelaPakanati <LeelaPakanati.gmail.com> | |
3 Date: Fri, 13 Dec 2019 16:56:42 -0500 | |
4 Subject: [PATCH] Add function handling at keyrelease | |
5 | |
6 --- | |
7 config.def.h | 6 ++++++ | |
8 tabbed.c | 30 +++++++++++++++++++++++++++++- | |
9 2 files changed, 35 insertions(+), 1 deletion(-) | |
10 | |
11 diff --git a/config.def.h b/config.def.h | |
12 index defa426..7bfda30 100644 | |
13 --- a/config.def.h | |
14 +++ b/config.def.h | |
15 @@ -64,3 +64,9 @@ static Key keys[] = { | |
16 | |
17 { 0, XK_F11, fullscreen, { 0 } }, | |
18 }; | |
19 + | |
20 +static Key keyreleases[] = { | |
21 + /* modifier key function argument */ | |
22 + { 0, XK_Shift_L, NULL, { 0 } }, | |
23 + | |
24 +}; | |
25 diff --git a/tabbed.c b/tabbed.c | |
26 index ff3ada0..fe38b9d 100644 | |
27 --- a/tabbed.c | |
28 +++ b/tabbed.c | |
29 @@ -113,6 +113,7 @@ static Bool gettextprop(Window w, Atom atom, char *t… | |
30 static void initfont(const char *fontstr); | |
31 static Bool isprotodel(int c); | |
32 static void keypress(const XEvent *e); | |
33 +static void keyrelease(const XEvent *e); | |
34 static void killclient(const Arg *arg); | |
35 static void manage(Window win); | |
36 static void maprequest(const XEvent *e); | |
37 @@ -149,6 +150,7 @@ static void (*handler[LASTEvent]) (const XEvent *) =… | |
38 [Expose] = expose, | |
39 [FocusIn] = focusin, | |
40 [KeyPress] = keypress, | |
41 + [KeyRelease] = keyrelease, | |
42 [MapRequest] = maprequest, | |
43 [PropertyNotify] = propertynotify, | |
44 }; | |
45 @@ -664,6 +666,22 @@ keypress(const XEvent *e) | |
46 } | |
47 } | |
48 | |
49 +void | |
50 +keyrelease(const XEvent *e) | |
51 +{ | |
52 + const XKeyEvent *ev = &e->xkey; | |
53 + unsigned int i; | |
54 + KeySym keysym; | |
55 + | |
56 + keysym = XkbKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0, 0); | |
57 + for (i = 0; i < LENGTH(keyreleases); i++) { | |
58 + if (keysym == keyreleases[i].keysym && | |
59 + CLEANMASK(keyreleases[i].mod) == CLEANMASK(ev->stat… | |
60 + keyreleases[i].func) | |
61 + keyreleases[i].func(&(keyreleases[i].arg)); | |
62 + } | |
63 +} | |
64 + | |
65 void | |
66 killclient(const Arg *arg) | |
67 { | |
68 @@ -714,6 +732,16 @@ manage(Window w) | |
69 } | |
70 } | |
71 | |
72 + for (i = 0; i < LENGTH(keyreleases); i++) { | |
73 + if ((code = XKeysymToKeycode(dpy, keyreleases[i… | |
74 + for (j = 0; j < LENGTH(modifiers); j++)… | |
75 + XGrabKey(dpy, code, keyreleases… | |
76 + modifiers[j], w, True, | |
77 + GrabModeAsync, GrabMod… | |
78 + } | |
79 + } | |
80 + } | |
81 + | |
82 c = ecalloc(1, sizeof *c); | |
83 c->win = w; | |
84 | |
85 @@ -1036,7 +1064,7 @@ setup(void) | |
86 XMapRaised(dpy, win); | |
87 XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask… | |
88 ButtonPressMask | ExposureMask | KeyPressMask | | |
89 - PropertyChangeMask | StructureNotifyMask | | |
90 + KeyReleaseMask | PropertyChangeMask | StructureNot… | |
91 SubstructureRedirectMask); | |
92 xerrorxlib = XSetErrorHandler(xerror); | |
93 | |
94 -- | |
95 2.24.0 | |
96 |