dwm-combo-6.1.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) 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 *ee);
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 {