From 4bfda0327c1696808db85475e24c898aa3af234e Mon Sep 17 00:00:00 2001 From: bakkeby Date: Wed, 28 Apr 2021 10:52:59 +0200 Subject: [PATCH] anybar: misc improvements ref. #118 --- dwm.c | 7 +++++-- patch/bar_anybar.c | 16 +++++++++------- patches.def.h | 9 +++++---- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/dwm.c b/dwm.c index 4ec1182..78476dc 100644 --- a/dwm.c +++ b/dwm.c @@ -4284,6 +4284,10 @@ updatebarpos(Monitor *m) for (bar = m->bar; bar; bar = bar->next) { bar->bx = m->wx + x_pad; + #if BAR_ANYBAR_PATCH && !BAR_ANYBAR_MANAGE_WIDTH_PATCH + if (bar->external) + continue; + #endif // BAR_ANYBAR_PATCH | BAR_ANYBAR_MANAGE_WIDTH_PATCH bar->bw = m->ww - 2 * x_pad; } @@ -4316,9 +4320,8 @@ updatebarpos(Monitor *m) if (bar->topbar) m->wy = m->wy + bar->bh + y_pad; m->wh -= y_pad + bar->bh; - } - for (bar = m->bar; bar; bar = bar->next) bar->by = (bar->topbar ? m->wy - bar->bh : m->wy + m->wh); + } } void diff --git a/patch/bar_anybar.c b/patch/bar_anybar.c index fa6b4d2..05546e3 100644 --- a/patch/bar_anybar.c +++ b/patch/bar_anybar.c @@ -3,20 +3,21 @@ managealtbar(Window win, XWindowAttributes *wa) { Monitor *m; Bar *bar; - int i; + int i = 0; if (!(m = recttomon(wa->x, wa->y, wa->width, wa->height))) return; - for (i = 0, bar = m->bar; bar && bar->win && bar->next; bar = bar->next, ++i); // find last bar + for (bar = m->bar; bar && bar->win && bar->next; bar = bar->next); // find last bar if (!bar) { bar = m->bar = ecalloc(1, sizeof(Bar)); bar->topbar = topbar; } else if (bar && bar->win) { + i = bar->idx + 1; bar->next = ecalloc(1, sizeof(Bar)); - #if BAR_ANYBAR_STACK_BARS_PATCH - bar->next->topbar = topbar; - #else + #if BAR_ANYBAR_TOP_AND_BOTTOM_BARS_PATCH bar->next->topbar = !bar->topbar; - #endif // BAR_ANYBAR_STACK_BARS_PATCH + #else + bar->next->topbar = topbar; + #endif // BAR_ANYBAR_TOP_AND_BOTTOM_BARS_PATCH bar = bar->next; } bar->external = 1; @@ -25,12 +26,13 @@ managealtbar(Window win, XWindowAttributes *wa) bar->idx = i; bar->borderpx = 0; bar->win = win; + bar->bw = wa->width; bar->bh = wa->height; updatebarpos(m); arrange(m); XSelectInput(dpy, win, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); XMapWindow(dpy, win); - XMoveResizeWindow(dpy, bar->win, bar->bx, -bar->by, wa->width, bar->bh); + XMoveResizeWindow(dpy, bar->win, bar->bx, bar->by, bar->bw, bar->bh); arrange(selmon); XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *) &win, 1); diff --git a/patches.def.h b/patches.def.h index c5f45bf..3b0c047 100644 --- a/patches.def.h +++ b/patches.def.h @@ -229,10 +229,11 @@ */ #define BAR_ANYBAR_PATCH 0 -/* Anybar option to stack multiple external bars at the top or at the bottom of the monitor - * instead of adding a second bar at the opposite side. - */ -#define BAR_ANYBAR_STACK_BARS_PATCH 0 +/* Anybar option to place the next bar depending on previous bar's position (top or bottom) */ +#define BAR_ANYBAR_TOP_AND_BOTTOM_BARS_PATCH 0 + +/* Anybar option to let dwm manage the width of the bar */ +#define BAR_ANYBAR_MANAGE_WIDTH_PATCH 0 /* This patch adds a border around the status bar(s) just like the border of client windows. * https://codemadness.org/paste/dwm-border-bar.patch