URI: 
       dwm-dualstatus-6.1.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       dwm-dualstatus-6.1.diff (4683B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 7054c06..b96107a 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -15,6 +15,7 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
            6  static const unsigned int snap      = 32;       /* snap pixel */
            7  static const int showbar            = 1;        /* 0 means no bar */
            8  static const int topbar             = 1;        /* 0 means bottom bar */
            9 +static const int extrabar           = 1;        /* 0 means no extra bar */
           10  
           11  /* tagging */
           12  static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
           13 @@ -62,6 +63,7 @@ static Key keys[] = {
           14          { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
           15          { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
           16          { MODKEY,                       XK_b,      togglebar,      {0} },
           17 +        { MODKEY,                       XK_b,      toggleextrabar, {0} },
           18          { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
           19          { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
           20          { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
           21 diff --git a/dwm.c b/dwm.c
           22 index 0362114..9b7cd74 100644
           23 --- a/dwm.c
           24 +++ b/dwm.c
           25 @@ -141,6 +141,13 @@ typedef struct {
           26          int monitor;
           27  } Rule;
           28  
           29 +typedef struct {
           30 +        int y;
           31 +        int show;
           32 +        Window win;
           33 +        char text[256];
           34 +} Bar;
           35 +
           36  /* function declarations */
           37  static void applyrules(Client *c);
           38  static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
           39 @@ -210,6 +217,7 @@ static void tag(const Arg *arg);
           40  static void tagmon(const Arg *arg);
           41  static void tile(Monitor *);
           42  static void togglebar(const Arg *arg);
           43 +static void toggleextrabar(const Arg *arg);
           44  static void togglefloating(const Arg *arg);
           45  static void toggletag(const Arg *arg);
           46  static void toggleview(const Arg *arg);
           47 @@ -266,6 +274,7 @@ static Display *dpy;
           48  static Drw *drw;
           49  static Monitor *mons, *selmon;
           50  static Window root;
           51 +static Bar eb;
           52  
           53  /* configuration, allows nested code to access above variables */
           54  #include "config.h"
           55 @@ -477,6 +486,8 @@ cleanup(void)
           56                  while (m->stack)
           57                          unmanage(m->stack, 0);
           58          XUngrabKey(dpy, AnyKey, AnyModifier, root);
           59 +        XUnmapWindow(dpy, eb.win);
           60 +        XDestroyWindow(dpy, eb.win);
           61          while (mons)
           62                  cleanupmon(mons);
           63          for (i = 0; i < CurLast; i++)
           64 @@ -578,6 +589,7 @@ configurenotify(XEvent *e)
           65                          updatebars();
           66                          for (m = mons; m; m = m->next)
           67                                  XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
           68 +                        XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh);
           69                          focus(NULL);
           70                          arrange(NULL);
           71                  }
           72 @@ -751,6 +763,9 @@ drawbar(Monitor *m)
           73                  }
           74          }
           75          drw_map(drw, m->barwin, 0, 0, m->ww, bh);
           76 +        drw_setscheme(drw, &scheme[SchemeNorm]);
           77 +        drw_text(drw, 0, 0, mons->ww, bh, eb.text, 0);
           78 +        drw_map(drw, eb.win, 0, 0, mons->ww, bh);
           79  }
           80  
           81  void
           82 @@ -1558,6 +1573,7 @@ setup(void)
           83          root = RootWindow(dpy, screen);
           84          drw = drw_create(dpy, screen, root, sw, sh);
           85          drw_load_fonts(drw, fonts, LENGTH(fonts));
           86 +        eb.show = extrabar;
           87          if (!drw->fontcount)
           88                  die("no fonts could be loaded.\n");
           89          bh = drw->fonts[0]->h + 2;
           90 @@ -1699,6 +1715,17 @@ togglebar(const Arg *arg)
           91  }
           92  
           93  void
           94 +toggleextrabar(const Arg *arg)
           95 +{
           96 +        if(selmon == mons) {
           97 +                eb.show = !eb.show;
           98 +                updatebarpos(selmon);
           99 +                XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon->ww, bh);
          100 +                arrange(selmon);
          101 +        }
          102 +}
          103 +
          104 +void
          105  togglefloating(const Arg *arg)
          106  {
          107          if (!selmon->sel)
          108 @@ -1810,6 +1837,13 @@ updatebars(void)
          109                  XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
          110                  XMapRaised(dpy, m->barwin);
          111          }
          112 +        if(!eb.win) {
          113 +                eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons->ww, bh, 0, DefaultDepth(dpy, screen),
          114 +                                       CopyFromParent, DefaultVisual(dpy, screen),
          115 +                                       CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
          116 +                XDefineCursor(dpy, eb.win, cursor[CurNormal]->cursor);
          117 +                XMapRaised(dpy, eb.win);
          118 +        }
          119  }
          120  
          121  void
          122 @@ -1823,6 +1857,13 @@ updatebarpos(Monitor *m)
          123                  m->wy = m->topbar ? m->wy + bh : m->wy;
          124          } else
          125                  m->by = -bh;
          126 +        if(m == mons && eb.show) {
          127 +                m->wh -= bh;
          128 +                eb.y = topbar ? m->wy + m->wh : m->wy;
          129 +                m->wy = m->topbar ? m->wy : m->wy + bh;
          130 +        }
          131 +        else
          132 +                eb.y = -bh;
          133  }
          134  
          135  void
          136 @@ -1992,8 +2033,21 @@ updatetitle(Client *c)
          137  void
          138  updatestatus(void)
          139  {
          140 -        if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
          141 +        char text[512];
          142 +        if(!gettextprop(root, XA_WM_NAME, text, sizeof(text))) {
          143                  strcpy(stext, "dwm-"VERSION);
          144 +                eb.text[0] = '\0';
          145 +        }
          146 +        else {
          147 +                char *e = strchr(text, ';');
          148 +                if(e) {
          149 +                        *e = '\0'; e++;
          150 +                        strncpy(eb.text, e, sizeof(eb.text)-1);
          151 +                }
          152 +                else
          153 +                        eb.text[0] = '\0';
          154 +                strncpy(stext, text, sizeof(stext)-1);
          155 +        }
          156          drawbar(selmon);
          157  }
          158