dwm-statusbutton-20180524-c8e9479.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-statusbutton-20180524-c8e9479.diff (3377B)
       ---
            1 From 63515eaf23d3f32f12d159c5e84af09f3a2d3323 Mon Sep 17 00:00:00 2001
            2 From: Christopher Drelich <cd@cdrakka.com>
            3 Date: Thu, 24 May 2018 20:26:42 -0400
            4 Subject: [PATCH] Added left-hand side statusbar button.
            5 
            6 ---
            7  config.def.h |  2 ++
            8  dwm.c        | 34 +++++++++++++++++++++-------------
            9  2 files changed, 23 insertions(+), 13 deletions(-)
           10 
           11 diff --git a/config.def.h b/config.def.h
           12 index a9ac303..63ff917 100644
           13 --- a/config.def.h
           14 +++ b/config.def.h
           15 @@ -5,6 +5,7 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
           16  static const unsigned int snap      = 32;       /* snap pixel */
           17  static const int showbar            = 1;        /* 0 means no bar */
           18  static const int topbar             = 1;        /* 0 means bottom bar */
           19 +static const char buttonbar[]       = "<O>";
           20  static const char *fonts[]          = { "monospace:size=10" };
           21  static const char dmenufont[]       = "monospace:size=10";
           22  static const char col_gray1[]       = "#222222";
           23 @@ -100,6 +101,7 @@ static Key keys[] = {
           24  /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
           25  static Button buttons[] = {
           26          /* click                event mask      button          function        argument */
           27 +        { ClkButton,                0,                Button1,        spawn,                {.v = dmenucmd } },
           28          { ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
           29          { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
           30          { ClkWinTitle,          0,              Button2,        zoom,           {0} },
           31 diff --git a/dwm.c b/dwm.c
           32 index bb95e26..689cb01 100644
           33 --- a/dwm.c
           34 +++ b/dwm.c
           35 @@ -64,7 +64,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
           36         NetWMFullscreen, NetActiveWindow, NetWMWindowType,
           37         NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
           38  enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
           39 -enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
           40 +enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkButton, ClkWinTitle,
           41         ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
           42  
           43  typedef union {
           44 @@ -431,18 +431,23 @@ buttonpress(XEvent *e)
           45          }
           46          if (ev->window == selmon->barwin) {
           47                  i = x = 0;
           48 -                do
           49 -                        x += TEXTW(tags[i]);
           50 -                while (ev->x >= x && ++i < LENGTH(tags));
           51 -                if (i < LENGTH(tags)) {
           52 -                        click = ClkTagBar;
           53 -                        arg.ui = 1 << i;
           54 -                } else if (ev->x < x + blw)
           55 -                        click = ClkLtSymbol;
           56 -                else if (ev->x > selmon->ww - TEXTW(stext))
           57 -                        click = ClkStatusText;
           58 -                else
           59 -                        click = ClkWinTitle;
           60 +                x += TEXTW(buttonbar);
           61 +                if(ev->x < x) {
           62 +                        click = ClkButton;
           63 +                } else {
           64 +                        do
           65 +                                x += TEXTW(tags[i]);
           66 +                        while (ev->x >= x && ++i < LENGTH(tags));
           67 +                        if (i < LENGTH(tags)) {
           68 +                                click = ClkTagBar;
           69 +                                arg.ui = 1 << i;
           70 +                        } else if (ev->x < x + blw)
           71 +                                click = ClkLtSymbol;
           72 +                        else if (ev->x > selmon->ww - TEXTW(stext))
           73 +                                click = ClkStatusText;
           74 +                        else
           75 +                                click = ClkWinTitle;
           76 +                }
           77          } else if ((c = wintoclient(ev->window))) {
           78                  focus(c);
           79                  restack(selmon);
           80 @@ -714,6 +719,9 @@ drawbar(Monitor *m)
           81                          urg |= c->tags;
           82          }
           83          x = 0;
           84 +        w = blw = TEXTW(buttonbar);
           85 +        drw_setscheme(drw, scheme[SchemeNorm]);
           86 +        x = drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0);
           87          for (i = 0; i < LENGTH(tags); i++) {
           88                  w = TEXTW(tags[i]);
           89                  drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
           90 -- 
           91 2.7.4
           92