summaryrefslogtreecommitdiff
path: root/patches/dwm-combo-6.1.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/dwm-combo-6.1.diff')
-rw-r--r--patches/dwm-combo-6.1.diff75
1 files changed, 75 insertions, 0 deletions
diff --git a/patches/dwm-combo-6.1.diff b/patches/dwm-combo-6.1.diff
new file mode 100644
index 0000000..32017db
--- /dev/null
+++ b/patches/dwm-combo-6.1.diff
@@ -0,0 +1,75 @@
+diff --git a/dwm.c b/dwm.c
+index 0362114..40b7a99 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -234,6 +234,11 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee);
+ static int xerrorstart(Display *dpy, XErrorEvent *ee);
+ static void zoom(const Arg *arg);
+
++static void keyrelease(XEvent *e);
++static void combotag(const Arg *arg);
++static void comboview(const Arg *arg);
++
++
+ /* variables */
+ static const char broken[] = "broken";
+ static char stext[256];
+@@ -244,6 +249,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *);
+ static unsigned int numlockmask = 0;
+ static void (*handler[LASTEvent]) (XEvent *) = {
+ [ButtonPress] = buttonpress,
++ [ButtonRelease] = keyrelease,
+ [ClientMessage] = clientmessage,
+ [ConfigureRequest] = configurerequest,
+ [ConfigureNotify] = configurenotify,
+@@ -251,6 +257,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
+ [EnterNotify] = enternotify,
+ [Expose] = expose,
+ [FocusIn] = focusin,
++ [KeyRelease] = keyrelease,
+ [KeyPress] = keypress,
+ [MappingNotify] = mappingnotify,
+ [MapRequest] = maprequest,
+@@ -274,6 +281,42 @@ static Window root;
+ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+
+ /* function implementations */
++static int combo = 0;
++
++void
++keyrelease(XEvent *e) {
++ combo = 0;
++}
++
++void
++combotag(const Arg *arg) {
++ if(selmon->sel && arg->ui & TAGMASK) {
++ if (combo) {
++ selmon->sel->tags |= arg->ui & TAGMASK;
++ } else {
++ combo = 1;
++ selmon->sel->tags = arg->ui & TAGMASK;
++ }
++ focus(NULL);
++ arrange(selmon);
++ }
++}
++
++void
++comboview(const Arg *arg) {
++ unsigned newtags = arg->ui & TAGMASK;
++ if (combo) {
++ selmon->tagset[selmon->seltags] |= newtags;
++ } else {
++ selmon->seltags ^= 1; /*toggle tagset*/
++ combo = 1;
++ if (newtags)
++ selmon->tagset[selmon->seltags] = newtags;
++ }
++ focus(NULL);
++ arrange(selmon);
++}
++
+ void
+ applyrules(Client *c)
+ {