tabbed-keyrelease-20191216-b5f9ec6.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) 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 *text, unsigned int size);
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->state) &&
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].keysym))) {
74 + for (j = 0; j < LENGTH(modifiers); j++) {
75 + XGrabKey(dpy, code, keyreleases[i].mod |
76 + modifiers[j], w, True,
77 + GrabModeAsync, GrabModeAsync);
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 | StructureNotifyMask |
91 SubstructureRedirectMask);
92 xerrorxlib = XSetErrorHandler(xerror);
93
94 --
95 2.24.0
96