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