dwm-combo-6.0.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.0.diff (1754B)
       ---
            1 diff -r c361034c5a1c dwm.c
            2 --- a/dwm.c        Sat Sep 11 19:00:18 2010 +0000
            3 +++ b/dwm.c        Thu Nov 25 22:54:04 2010 -0800
            4 @@ -243,6 +243,11 @@
            5  static int xerrorstart(Display *dpy, XErrorEvent *ee);
            6  static void zoom(const Arg *arg);
            7  
            8 +static void keyrelease(XEvent *e);
            9 +static void combotag(const Arg *arg);
           10 +static void comboview(const Arg *arg);
           11 +
           12 +
           13  /* variables */
           14  static const char broken[] = "broken";
           15  static char stext[256];
           16 @@ -253,6 +258,7 @@
           17  static unsigned int numlockmask = 0;
           18  static void (*handler[LASTEvent]) (XEvent *) = {
           19          [ButtonPress] = buttonpress,
           20 +        [ButtonRelease] = keyrelease,
           21          [ClientMessage] = clientmessage,
           22          [ConfigureRequest] = configurerequest,
           23          [ConfigureNotify] = configurenotify,
           24 @@ -260,6 +266,7 @@
           25          [EnterNotify] = enternotify,
           26          [Expose] = expose,
           27          [FocusIn] = focusin,
           28 +        [KeyRelease] = keyrelease,
           29          [KeyPress] = keypress,
           30          [MappingNotify] = mappingnotify,
           31          [MapRequest] = maprequest,
           32 @@ -282,6 +289,42 @@
           33  struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
           34  
           35  /* function implementations */
           36 +static int combo = 0;
           37 +
           38 +void
           39 +keyrelease(XEvent *e) {
           40 +        combo = 0;
           41 +}
           42 +
           43 +void
           44 +combotag(const Arg *arg) {
           45 +        if(selmon->sel && arg->ui & TAGMASK) {
           46 +                if (combo) {
           47 +                        selmon->sel->tags |= arg->ui & TAGMASK;
           48 +                } else {
           49 +                        combo = 1;
           50 +                        selmon->sel->tags = arg->ui & TAGMASK;
           51 +                }
           52 +                focus(NULL);
           53 +                arrange(selmon);
           54 +        }
           55 +}
           56 +
           57 +void
           58 +comboview(const Arg *arg) {
           59 +        unsigned newtags = arg->ui & TAGMASK;
           60 +        if (combo) {
           61 +                selmon->tagset[selmon->seltags] |= newtags;
           62 +        } else {
           63 +                selmon->seltags ^= 1;        /*toggle tagset*/
           64 +                combo = 1;
           65 +                if (newtags)
           66 +                        selmon->tagset[selmon->seltags] = newtags;
           67 +        }
           68 +        focus(NULL);
           69 +        arrange(selmon);
           70 +}
           71 +
           72  void
           73  applyrules(Client *c) {
           74          const char *class, *instance;