dwm-combo-6.1.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-combo-6.1.diff (1867B) | |
--- | |
1 diff --git a/dwm.c b/dwm.c | |
2 index 0362114..40b7a99 100644 | |
3 --- a/dwm.c | |
4 +++ b/dwm.c | |
5 @@ -234,6 +234,11 @@ static int xerrordummy(Display *dpy, XErrorEvent *e… | |
6 static int xerrorstart(Display *dpy, XErrorEvent *ee); | |
7 static void zoom(const Arg *arg); | |
8 | |
9 +static void keyrelease(XEvent *e); | |
10 +static void combotag(const Arg *arg); | |
11 +static void comboview(const Arg *arg); | |
12 + | |
13 + | |
14 /* variables */ | |
15 static const char broken[] = "broken"; | |
16 static char stext[256]; | |
17 @@ -244,6 +249,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *); | |
18 static unsigned int numlockmask = 0; | |
19 static void (*handler[LASTEvent]) (XEvent *) = { | |
20 [ButtonPress] = buttonpress, | |
21 + [ButtonRelease] = keyrelease, | |
22 [ClientMessage] = clientmessage, | |
23 [ConfigureRequest] = configurerequest, | |
24 [ConfigureNotify] = configurenotify, | |
25 @@ -251,6 +257,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { | |
26 [EnterNotify] = enternotify, | |
27 [Expose] = expose, | |
28 [FocusIn] = focusin, | |
29 + [KeyRelease] = keyrelease, | |
30 [KeyPress] = keypress, | |
31 [MappingNotify] = mappingnotify, | |
32 [MapRequest] = maprequest, | |
33 @@ -274,6 +281,42 @@ static Window root; | |
34 struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; | |
35 | |
36 /* function implementations */ | |
37 +static int combo = 0; | |
38 + | |
39 +void | |
40 +keyrelease(XEvent *e) { | |
41 + combo = 0; | |
42 +} | |
43 + | |
44 +void | |
45 +combotag(const Arg *arg) { | |
46 + if(selmon->sel && arg->ui & TAGMASK) { | |
47 + if (combo) { | |
48 + selmon->sel->tags |= arg->ui & TAGMASK; | |
49 + } else { | |
50 + combo = 1; | |
51 + selmon->sel->tags = arg->ui & TAGMASK; | |
52 + } | |
53 + focus(NULL); | |
54 + arrange(selmon); | |
55 + } | |
56 +} | |
57 + | |
58 +void | |
59 +comboview(const Arg *arg) { | |
60 + unsigned newtags = arg->ui & TAGMASK; | |
61 + if (combo) { | |
62 + selmon->tagset[selmon->seltags] |= newtags; | |
63 + } else { | |
64 + selmon->seltags ^= 1; /*toggle tagset*/ | |
65 + combo = 1; | |
66 + if (newtags) | |
67 + selmon->tagset[selmon->seltags] = newtags; | |
68 + } | |
69 + focus(NULL); | |
70 + arrange(selmon); | |
71 +} | |
72 + | |
73 void | |
74 applyrules(Client *c) | |
75 { |