From aa70728d0049f771820f17cfca4488768cf57cef Mon Sep 17 00:00:00 2001 From: bakkeby Date: Wed, 15 Jul 2020 14:10:47 +0200 Subject: [PATCH] Adding BarWidthArg, BarDrawArg, BarClickArg to keep the method signatures static --- dwm.c | 112 ++++++++++++++++++--------------------- patch/bar_awesomebar.c | 20 +++---- patch/bar_awesomebar.h | 6 +-- patch/bar_fancybar.c | 10 ++-- patch/bar_fancybar.h | 6 +-- patch/bar_ltsymbol.c | 10 ++-- patch/bar_ltsymbol.h | 6 +-- patch/bar_status.c | 10 ++-- patch/bar_status.h | 6 +-- patch/bar_status2d.c | 8 +-- patch/bar_status2d.h | 6 +-- patch/bar_status2d_eb.c | 6 +-- patch/bar_status2d_eb.h | 4 +- patch/bar_statusbutton.c | 10 ++-- patch/bar_statusbutton.h | 6 +-- patch/bar_statuscmd.c | 10 ++-- patch/bar_statuscmd.h | 6 +-- patch/bar_systray.c | 10 ++-- patch/bar_systray.h | 6 +-- patch/bar_taggrid.c | 12 ++--- patch/bar_taggrid.h | 6 +-- patch/bar_tags.c | 9 ++-- patch/bar_tags.h | 6 +-- patch/bar_vtcolors.c | 70 ++++++++++++++++++++++++ patch/bar_vtcolors.h | 2 + patch/bar_wintitle.c | 31 ++++------- patch/bar_wintitle.h | 6 +-- 27 files changed, 227 insertions(+), 173 deletions(-) create mode 100644 patch/bar_vtcolors.c create mode 100644 patch/bar_vtcolors.h diff --git a/dwm.c b/dwm.c index eca9c91..7828403 100644 --- a/dwm.c +++ b/dwm.c @@ -168,12 +168,8 @@ enum { #if BAR_STATUSBUTTON_PATCH ClkButton, #endif // BAR_STATUSBUTTON_PATCH - #if BAR_TAGS_PATCH ClkTagBar, - #endif // BAR_TAGS_PATCH - #if BAR_LTSYMBOL_PATCH ClkLtSymbol, - #endif // BAR_LTSYMBOL_PATCH ClkStatusText, ClkWinTitle, ClkClientWin, @@ -210,14 +206,31 @@ struct Bar { int x[BARRULES]; // x position, array length == ^ }; + +typedef struct { + int max_width; +} BarWidthArg; + +typedef struct { + int x; + int w; +} BarDrawArg; + +typedef struct { + int rel_x; + int rel_y; + int rel_w; + int rel_h; +} BarClickArg; + typedef struct Monitor Monitor; typedef struct { int monitor; int bar; int alignment; // see bar alignment enum - int (*widthfunc)(Monitor *m, int max_width); - int (*drawfunc)(Monitor *m, int x, int w); - int (*clickfunc)(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); + int (*widthfunc)(Monitor *m, BarWidthArg *a); + int (*drawfunc)(Monitor *m, BarDrawArg *a); + int (*clickfunc)(Monitor *m, Arg *arg, BarClickArg *a); char *name; // for debugging int x, w; // position, width for internal use } BarRule; @@ -552,11 +565,13 @@ static char stext[1024]; #else static char stext[512]; #endif // BAR_STATUS2D_PATCH +#if BAR_EXTRABAR_PATCH || BAR_STATUSCMD_PATCH #if BAR_STATUS2D_PATCH static char rawstext[1024]; #else static char rawstext[512]; #endif // BAR_STATUS2D_PATCH +#endif // BAR_EXTRABAR_PATCH | BAR_STATUSCMD_PATCH #if BAR_EXTRABAR_PATCH #if BAR_STATUS2D_PATCH && !BAR_STATUSCOLORS_PATCH static char estext[1024]; @@ -873,6 +888,7 @@ buttonpress(XEvent *e) Monitor *m; XButtonPressedEvent *ev = &e->xbutton; const BarRule *br; + BarClickArg carg = { 0, 0, 0, 0 }; click = ClkRootWin; /* focus monitor if necessary */ @@ -889,19 +905,23 @@ buttonpress(XEvent *e) for (mi = 0, m = mons; m && m != selmon; m = m->next, mi++); // get the monitor index for (b = 0; b < LENGTH(selmon->bars); b++) { if (ev->window == selmon->bars[b]->win) { - fprintf(stderr, "buttonpress on bar, mi = %d\n", mi); for (r = 0; r < LENGTH(barrules); r++) { br = &barrules[r]; if (br->bar != b || (br->monitor == 'A' && m != selmon) || (br->monitor != -1 && br->monitor != mi) || br->clickfunc == NULL) continue; if (selmon->bars[b]->x[r] <= ev->x && ev->x <= selmon->bars[b]->x[r] + selmon->bars[b]->w[r]) { - click = br->clickfunc(m, &arg, ev->x - selmon->bars[b]->x[r], ev->y, selmon->bars[b]->w[r], bh); + carg.rel_x = ev->x - selmon->bars[b]->x[r]; + carg.rel_y = ev->y; + carg.rel_w = selmon->bars[b]->w[r]; + carg.rel_h = selmon->bars[b]->bh; + click = br->clickfunc(m, &arg, &carg); + if (click < 0) + return; break; } } break; } - } if (click == ClkRootWin && (c = wintoclient(ev->window))) { @@ -915,17 +935,17 @@ buttonpress(XEvent *e) XAllowEvents(dpy, ReplayPointer, CurrentTime); click = ClkClientWin; } - fprintf(stderr, "click = %d, dwmblockssig = %d, ev->button = %d, mi = %d\n", click, dwmblockssig, ev->button, mi); - for (i = 0; i < LENGTH(buttons); i++) + + for (i = 0; i < LENGTH(buttons); i++) { if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button - && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) { - fprintf(stderr, "found click, b.button (%d) == ev->button (%d)\n", buttons[i].button, ev->button); + && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) { #if BAR_AWESOMEBAR_PATCH buttons[i].func((click == ClkTagBar || click == ClkWinTitle) && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); #else buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); #endif } + } } void @@ -1423,24 +1443,21 @@ void drawbar(Monitor *m) { Monitor *mon; - int b, r, mi; - int ret_x, w; + int b, r, w, mi; int rx, lx, rw, lw; // bar size, split between left and right if a center module is added const BarRule *br; Bar *bar; + BarWidthArg warg = { 0 }; + BarDrawArg darg = { 0, 0 }; for (mi = 0, mon = mons; mon && mon != m; mon = mon->next, mi++); // get the monitor index for (b = LENGTH(m->bars) - 1; b >= 0; b--) { - fprintf(stderr, "drawbar, monitor m = %ld, mi = %d, b = %d\n", m, mi, b); bar = m->bars[b]; - if (!bar->win) { - fprintf(stderr, "%s\n", "bar->win does not exist"); + if (!bar->win) continue; - } rw = lw = bar->bw; rx = lx = 0; - fprintf(stderr, "lx = %d, lw = %d\n", lx, lw); #if BAR_VTCOLORS_PATCH drw_setscheme(drw, scheme[SchemeTagsNorm]); @@ -1457,13 +1474,18 @@ drawbar(Monitor *m) #else drw_setscheme(drw, scheme[SchemeNorm]); #endif // BAR_VTCOLORS_PATCH - if (br->alignment < BAR_ALIGN_RIGHT_LEFT) { - w = br->widthfunc(m, lw); - w = MIN(lw, w); - } else { - w = br->widthfunc(m, rw); - w = MIN(rw, w); + warg.max_width = (br->alignment < BAR_ALIGN_RIGHT_LEFT ? lw : rw); + w = br->widthfunc(m, &warg); + w = MIN(warg.max_width, w); + + if (lw <= 0) { // if left is exhausted, switch to right side + lw = rw; + lx = rx; + } else if (rw <= 0) { + rw = lw; + rx = lx; } + switch(br->alignment) { default: case BAR_ALIGN_NONE: @@ -1523,16 +1545,9 @@ drawbar(Monitor *m) rw = bar->x[r] - rx; break; } - ret_x = br->drawfunc(m, bar->x[r], bar->w[r]); - if (ret_x != bar->x[r] + bar->w[r]) - fprintf(stderr, "%s - %d alignment, expected these to be the same: %d vs %d, w = %d, bx = %d\n", br->name, br->alignment, ret_x, bar->x[r] + bar->w[r], bar->w[r], bar->x[r]); - - if (lw <= 0) { // if left is exhausted, switch to right side - lw = rw; - lx = rx; - rw = 0; - rx = 0; - } + darg.x = bar->x[r]; + darg.w = bar->w[r]; + br->drawfunc(m, &darg); } drw_map(drw, bar->win, 0, 0, bar->bw, bar->bh); } @@ -2897,26 +2912,9 @@ setup(void) #else scheme[i] = drw_scm_create(drw, colors[i], ColCount); #endif // BAR_ALPHA_PATCH - // #if BAR_SYSTRAY_PATCH - // /* init system tray */ - // if (showsystray) - // updatesystray(); - // #endif // BAR_SYSTRAY_PATCH - /* init bars */ - // Monitor *m; - // for (m = mons; m; m = m->next) { - // fprintf(stderr, "updating bar pos\n"); - // updatebarpos(m); - // } updatebars(); updatestatus(); - // Monitor *m; - // for (m = mons; m; m = m->next) - // updatebarpos(m); - // for () - // updatebarpos(selmon); - /* supporting window for NetWMCheck */ wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, @@ -3440,7 +3438,6 @@ updatebars(void) for (m = mons; m; m = m->next) { for (b = 0; b < LENGTH(m->bars); b++) { if (!m->bars[b]->win) { // TODO add static status controls to not create / show extra bar? - fprintf(stderr, "creating bar %d at pos x = %d, y = %d, w = %d, h = %d\n", b, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh); #if BAR_ALPHA_PATCH m->bars[b]->win = XCreateWindow(dpy, root, m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh, 0, depth, InputOutput, visual, @@ -3472,26 +3469,21 @@ updatebarpos(Monitor *m) int x_pad = 0; #endif // BAR_PADDING_PATCH - // for (num_bars = 0; num_bars < LENGTH(m->bars) && m->bars[num_bars]->win; num_bars++); num_bars = LENGTH(m->bars); - fprintf(stderr, "num_bars = %d\n", num_bars); if (m->showbar) { m->wh = m->wh - y_pad * num_bars - bh * num_bars; m->wy = m->wy + bh + y_pad; } for (b = 0; b < num_bars; b++) { - fprintf(stderr, "setting bx to xpad %d, b = %d\n", m->mx + x_pad, b); m->bars[b]->bx = m->mx + x_pad; m->bars[b]->bw = m->ww - 2 * x_pad; m->bars[b]->bh = bh; if (m->showbar) { - fprintf(stderr, "eh? %d, b = %d\n", topbar == b, b); m->bars[b]->by = m->topbar == b ? m->wy + m->wh : m->wy - bh; } else { m->bars[b]->by = -bh - y_pad; } - fprintf(stderr, "finished with bar, bx = %d, by = %d, bw = %d, bh = %d, m = %ld\n", m->bars[b]->bx, m->bars[b]->by, m->bars[b]->bw, m->bars[b]->bh, m); } } diff --git a/patch/bar_awesomebar.c b/patch/bar_awesomebar.c index 85ec003..ddea5ea 100644 --- a/patch/bar_awesomebar.c +++ b/patch/bar_awesomebar.c @@ -1,22 +1,22 @@ int -width_awesomebar(Monitor *m, int max_width) +width_awesomebar(Monitor *m, BarWidthArg *a) { - return max_width; + return a->max_width; } int -draw_awesomebar(Monitor *m, int x_orig, int w) +draw_awesomebar(Monitor *m, BarDrawArg *a) { int n = 0, scm, remainder = 0, tabw; - unsigned int i, x = x_orig; + unsigned int i, x = a->x; Client *c; for (c = m->clients; c; c = c->next) if (ISVISIBLE(c)) n++; if (n > 0) { - remainder = w % n; - tabw = w / n; + remainder = a->w % n; + tabw = a->w / n; for (i = 0, c = m->clients; c; c = c->next, i++) { if (!ISVISIBLE(c)) continue; @@ -46,11 +46,11 @@ draw_awesomebar(Monitor *m, int x_orig, int w) x += tabw; } } - return x_orig + w; + return a->x + a->w; } int -click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_awesomebar(Monitor *m, Arg *arg, BarClickArg *a) { int x = 0, n = 0; Client *c; @@ -65,8 +65,8 @@ click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_ if (!c || !ISVISIBLE(c)) continue; else - x += (1.0 / (double)n) * rel_w; - } while (c && rel_x > x && (c = c->next)); + x += (1.0 / (double)n) * a->rel_w; + } while (c && a->rel_x > x && (c = c->next)); if (c) { arg->v = c; diff --git a/patch/bar_awesomebar.h b/patch/bar_awesomebar.h index 84c8505..8e9387b 100644 --- a/patch/bar_awesomebar.h +++ b/patch/bar_awesomebar.h @@ -1,6 +1,6 @@ -static int width_awesomebar(Monitor *m, int max_width); -static int draw_awesomebar(Monitor *m, int x, int w); -static int click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int width_awesomebar(Monitor *m, BarWidthArg *a); +static int draw_awesomebar(Monitor *m, BarDrawArg *a); +static int click_awesomebar(Monitor *m, Arg *arg, BarClickArg *a); static void hide(Client *c); static void show(Client *c); diff --git a/patch/bar_fancybar.c b/patch/bar_fancybar.c index b6f5363..810c73e 100644 --- a/patch/bar_fancybar.c +++ b/patch/bar_fancybar.c @@ -1,13 +1,13 @@ int -width_fancybar(Monitor *m, int max_width) +width_fancybar(Monitor *m, BarWidthArg *a) { - return max_width; + return a->max_width; } int -draw_fancybar(Monitor *m, int x, int w) +draw_fancybar(Monitor *m, BarDrawArg *a) { - int ftw, mw, ew = 0, n = 0; + int ftw, mw, ew = 0, n = 0, x = a->x, w = a->w; unsigned int i; Client *c; #if !BAR_HIDEVACANTTAGS_PATCH @@ -89,7 +89,7 @@ draw_fancybar(Monitor *m, int x, int w) } int -click_fancybar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_fancybar(Monitor *m, Arg *arg, BarClickArg *a) { return ClkWinTitle; } diff --git a/patch/bar_fancybar.h b/patch/bar_fancybar.h index 24336d9..b7b2875 100644 --- a/patch/bar_fancybar.h +++ b/patch/bar_fancybar.h @@ -1,3 +1,3 @@ -static int width_fancybar(Monitor *m, int max_width); -static int draw_fancybar(Monitor *m, int x, int w); -static int click_fancybar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file +static int width_fancybar(Monitor *m, BarWidthArg *a); +static int draw_fancybar(Monitor *m, BarDrawArg *a); +static int click_fancybar(Monitor *m, Arg *arg, BarClickArg *a); \ No newline at end of file diff --git a/patch/bar_ltsymbol.c b/patch/bar_ltsymbol.c index f4417f1..c3a7baf 100644 --- a/patch/bar_ltsymbol.c +++ b/patch/bar_ltsymbol.c @@ -1,21 +1,21 @@ int -width_ltsymbol(Monitor *m, int max_width) +width_ltsymbol(Monitor *m, BarWidthArg *a) { return TEXTW(m->ltsymbol); } int -draw_ltsymbol(Monitor *m, int x, int w) +draw_ltsymbol(Monitor *m, BarDrawArg *a) { #if BAR_PANGO_PATCH - return drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False); + return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, m->ltsymbol, 0, False); #else - return drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, m->ltsymbol, 0); #endif // BAR_PANGO_PATCH } int -click_ltsymbol(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_ltsymbol(Monitor *m, Arg *arg, BarClickArg *a) { return ClkLtSymbol; } \ No newline at end of file diff --git a/patch/bar_ltsymbol.h b/patch/bar_ltsymbol.h index 5471496..40f5c55 100644 --- a/patch/bar_ltsymbol.h +++ b/patch/bar_ltsymbol.h @@ -1,3 +1,3 @@ -static int width_ltsymbol(Monitor *m, int max_width); -static int draw_ltsymbol(Monitor *m, int x, int w); -static int click_ltsymbol(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int width_ltsymbol(Monitor *m, BarWidthArg *a); +static int draw_ltsymbol(Monitor *m, BarDrawArg *a); +static int click_ltsymbol(Monitor *m, Arg *arg, BarClickArg *a); diff --git a/patch/bar_status.c b/patch/bar_status.c index fdf72de..2d7283b 100644 --- a/patch/bar_status.c +++ b/patch/bar_status.c @@ -1,5 +1,5 @@ int -width_status(Monitor *m, int max_width) +width_status(Monitor *m, BarWidthArg *a) { #if BAR_PANGO_PATCH return TEXTWM(stext) - lrpad + 2; /* 2px right padding */ @@ -9,17 +9,17 @@ width_status(Monitor *m, int max_width) } int -draw_status(Monitor *m, int x, int w) +draw_status(Monitor *m, BarDrawArg *a) { #if BAR_PANGO_PATCH - return drw_text(drw, x, 0, w, bh, 0, stext, 0, True); + return drw_text(drw, a->x, 0, a->w, bh, 0, stext, 0, True); #else - return drw_text(drw, x, 0, w, bh, 0, stext, 0); + return drw_text(drw, a->x, 0, a->w, bh, 0, stext, 0); #endif // BAR_PANGO_PATCH } int -click_status(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_status(Monitor *m, Arg *arg, BarClickArg *a) { return ClkStatusText; } diff --git a/patch/bar_status.h b/patch/bar_status.h index 3b6c924..97cf8b8 100644 --- a/patch/bar_status.h +++ b/patch/bar_status.h @@ -1,3 +1,3 @@ -static int width_status(Monitor *m, int max_width); -static int draw_status(Monitor *m, int x, int w); -static int click_status(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file +static int width_status(Monitor *m, BarWidthArg *a); +static int draw_status(Monitor *m, BarDrawArg *a); +static int click_status(Monitor *m, Arg *arg, BarClickArg *a); \ No newline at end of file diff --git a/patch/bar_status2d.c b/patch/bar_status2d.c index 8b3b3e5..61ebd69 100644 --- a/patch/bar_status2d.c +++ b/patch/bar_status2d.c @@ -1,17 +1,17 @@ int -width_status2d(Monitor *m, int max_width) +width_status2d(Monitor *m, BarWidthArg *a) { return status2dtextlength(rawstext); } int -draw_status2d(Monitor *m, int x, int w) +draw_status2d(Monitor *m, BarDrawArg *a) { - return drawstatusbar(m, x, w, rawstext); + return drawstatusbar(m, a->x, a->w, rawstext); } int -click_status2d(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_status2d(Monitor *m, Arg *arg, BarClickArg *a) { return ClkStatusText; } diff --git a/patch/bar_status2d.h b/patch/bar_status2d.h index 3f1a346..621fb7f 100644 --- a/patch/bar_status2d.h +++ b/patch/bar_status2d.h @@ -1,5 +1,5 @@ -static int width_status2d(Monitor *m, int max_width); -static int draw_status2d(Monitor *m, int x, int w); -static int click_status2d(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int width_status2d(Monitor *m, BarWidthArg *a); +static int draw_status2d(Monitor *m, BarDrawArg *a); +static int click_status2d(Monitor *m, Arg *arg, BarClickArg *a); static int drawstatusbar(Monitor *m, int x, int w, char* text); static int status2dtextlength(char* stext); \ No newline at end of file diff --git a/patch/bar_status2d_eb.c b/patch/bar_status2d_eb.c index adce774..3e98866 100644 --- a/patch/bar_status2d_eb.c +++ b/patch/bar_status2d_eb.c @@ -1,11 +1,11 @@ int -width_status2d_eb(Monitor *m, int max_width) +width_status2d_eb(Monitor *m, BarWidthArg *a) { return status2dtextlength(rawestext); } int -draw_status2d_eb(Monitor *m, int x, int w) +draw_status2d_eb(Monitor *m, BarDrawArg *a) { - return drawstatusbar(m, x, w, rawestext); + return drawstatusbar(m, a->x, a->w, rawestext); } \ No newline at end of file diff --git a/patch/bar_status2d_eb.h b/patch/bar_status2d_eb.h index 87b41fb..2a43537 100644 --- a/patch/bar_status2d_eb.h +++ b/patch/bar_status2d_eb.h @@ -1,2 +1,2 @@ -static int width_status2d_eb(Monitor *m, int max_width); -static int draw_status2d_eb(Monitor *m, int x, int w); \ No newline at end of file +static int width_status2d_eb(Monitor *m, BarWidthArg *a); +static int draw_status2d_eb(Monitor *m, BarDrawArg *a); \ No newline at end of file diff --git a/patch/bar_statusbutton.c b/patch/bar_statusbutton.c index 130ef62..5f60b76 100644 --- a/patch/bar_statusbutton.c +++ b/patch/bar_statusbutton.c @@ -1,21 +1,21 @@ int -width_stbutton(Monitor *m, int max_width) +width_stbutton(Monitor *m, BarWidthArg *a) { return TEXTW(buttonbar); } int -draw_stbutton(Monitor *m, int x, int w) +draw_stbutton(Monitor *m, BarDrawArg *a) { #if BAR_PANGO_PATCH - return drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0, False); + return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, buttonbar, 0, False); #else - return drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0); + return drw_text(drw, a->x, 0, a->w, bh, lrpad / 2, buttonbar, 0); #endif // BAR_PANGO_PATCH } int -click_stbutton(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_stbutton(Monitor *m, Arg *arg, BarClickArg *a) { return ClkButton; } diff --git a/patch/bar_statusbutton.h b/patch/bar_statusbutton.h index 84ac2c5..47055ad 100644 --- a/patch/bar_statusbutton.h +++ b/patch/bar_statusbutton.h @@ -1,3 +1,3 @@ -static int width_stbutton(Monitor *m, int max_width); -static int draw_stbutton(Monitor *m, int x, int w); -static int click_stbutton(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file +static int width_stbutton(Monitor *m, BarWidthArg *a); +static int draw_stbutton(Monitor *m, BarDrawArg *a); +static int click_stbutton(Monitor *m, Arg *arg, BarClickArg *a); \ No newline at end of file diff --git a/patch/bar_statuscmd.c b/patch/bar_statuscmd.c index f6166c3..14b4076 100644 --- a/patch/bar_statuscmd.c +++ b/patch/bar_statuscmd.c @@ -5,21 +5,21 @@ static int lastbutton; #endif // BAR_DWMBLOCKS_PATCH int -click_statuscmd(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_statuscmd(Monitor *m, Arg *arg, BarClickArg *a) { - return click_statuscmd_text(m, arg, rel_x, rel_y, rawstext); + return click_statuscmd_text(m, arg, a->rel_x, rawstext); } #if BAR_EXTRABAR_PATCH int -click_statuscmd_eb(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_statuscmd_eb(Monitor *m, Arg *arg, BarClickArg *a) { - return click_statuscmd_text(m, arg, rel_x, rel_y, rawestext); + return click_statuscmd_text(m, arg, a->rel_x, rawestext); } #endif // BAR_EXTRABAR_PATCH int -click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text) +click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, char *text) { int i = -1; int x = 0; diff --git a/patch/bar_statuscmd.h b/patch/bar_statuscmd.h index 92ed7e1..7619ec3 100644 --- a/patch/bar_statuscmd.h +++ b/patch/bar_statuscmd.h @@ -1,6 +1,6 @@ -static int click_statuscmd(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int click_statuscmd(Monitor *m, Arg *arg, BarClickArg *a); #if BAR_EXTRABAR_PATCH -static int click_statuscmd_eb(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int click_statuscmd_eb(Monitor *m, Arg *arg, BarClickArg *a); #endif // BAR_EXTRABAR_PATCH -static int click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text); +static int click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, char *text); static void copyvalidchars(char *text, char *rawtext); \ No newline at end of file diff --git a/patch/bar_systray.c b/patch/bar_systray.c index 9938543..e9df765 100644 --- a/patch/bar_systray.c +++ b/patch/bar_systray.c @@ -5,7 +5,7 @@ static int systraybarrule = -1; static int systrayxpos = 0; int -width_systray(Monitor *m, int max_width) +width_systray(Monitor *m, BarWidthArg *a) { unsigned int w = 0; Client *i; @@ -17,15 +17,15 @@ width_systray(Monitor *m, int max_width) } int -draw_systray(Monitor *m, int x_pos, int w) +draw_systray(Monitor *m, BarDrawArg *a) { - systrayxpos = x_pos; + systrayxpos = a->x; updatesystray(); - return systrayxpos + w; + return systrayxpos + a->w; } int -click_systray(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_systray(Monitor *m, Arg *arg, BarClickArg *a) { return -1; } diff --git a/patch/bar_systray.h b/patch/bar_systray.h index de588d1..5c4f387 100644 --- a/patch/bar_systray.h +++ b/patch/bar_systray.h @@ -26,9 +26,9 @@ struct Systray { }; /* bar integration */ -static int width_systray(Monitor *m, int max_width); -static int draw_systray(Monitor *m, int x_pos, int w); -static int click_systray(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int width_systray(Monitor *m, BarWidthArg *a); +static int draw_systray(Monitor *m, BarDrawArg *a); +static int click_systray(Monitor *m, Arg *arg, BarClickArg *a); /* function declarations */ static Atom getatomprop(Client *c, Atom prop); diff --git a/patch/bar_taggrid.c b/patch/bar_taggrid.c index 4fa98d7..78b3d1c 100644 --- a/patch/bar_taggrid.c +++ b/patch/bar_taggrid.c @@ -1,11 +1,11 @@ int -width_taggrid(Monitor *m, int max_width) +width_taggrid(Monitor *m, BarWidthArg *a) { return (bh / 2) * (LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0)); } int -draw_taggrid(Monitor *m, int x_pos, int w) +draw_taggrid(Monitor *m, BarDrawArg *a) { unsigned int x, y, h, max_x, columns, occ = 0; int invert, i,j, k; @@ -15,7 +15,7 @@ draw_taggrid(Monitor *m, int x_pos, int w) occ |= c->tags; h = bh / tagrows; - x = max_x = x_pos; + x = max_x = a->x; y = 0; columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0); @@ -24,7 +24,7 @@ draw_taggrid(Monitor *m, int x_pos, int w) /* We will draw LENGTH(tags) squares in tagraws raws. */ for (j = 0, i = 0; j < tagrows; j++) { - x = x_pos; + x = a->x; for (k = 0; k < columns && i < LENGTH(tags); k++, i++) { invert = m->tagset[m->seltags] & 1 << i ? 0 : 1; @@ -51,12 +51,12 @@ draw_taggrid(Monitor *m, int x_pos, int w) } int -click_taggrid(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_taggrid(Monitor *m, Arg *arg, BarClickArg *a) { unsigned int i, columns; columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0); - i = (rel_x - 0) / (bh / tagrows) + columns * (rel_y / (bh / tagrows)); + i = (a->rel_x - 0) / (bh / tagrows) + columns * (a->rel_y / (bh / tagrows)); if (i >= LENGTH(tags)) { i = LENGTH(tags) - 1; } diff --git a/patch/bar_taggrid.h b/patch/bar_taggrid.h index ca8a16c..d284a07 100644 --- a/patch/bar_taggrid.h +++ b/patch/bar_taggrid.h @@ -1,4 +1,4 @@ -static int width_taggrid(Monitor *m, int max_width); -static int draw_taggrid(Monitor *m, int x, int w); -static int click_taggrid(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); +static int width_taggrid(Monitor *m, BarWidthArg *a); +static int draw_taggrid(Monitor *m, BarDrawArg *a); +static int click_taggrid(Monitor *m, Arg *arg, BarClickArg *a); static void switchtag(const Arg *arg); \ No newline at end of file diff --git a/patch/bar_tags.c b/patch/bar_tags.c index 73dc5d7..708e61d 100644 --- a/patch/bar_tags.c +++ b/patch/bar_tags.c @@ -1,5 +1,5 @@ int -width_tags(Monitor *m, int max_width) +width_tags(Monitor *m, BarWidthArg *a) { int w, i; for (w = 0, i = 0; i < LENGTH(tags); i++) { @@ -13,9 +13,10 @@ width_tags(Monitor *m, int max_width) } int -draw_tags(Monitor *m, int x, int w) +draw_tags(Monitor *m, BarDrawArg *a) { int invert; + int w, x = a->x; #if BAR_ALTERNATIVE_TAGS_PATCH int wdelta; #endif // BAR_ALTERNATIVE_TAGS_PATCH @@ -106,7 +107,7 @@ draw_tags(Monitor *m, int x, int w) } int -click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_tags(Monitor *m, Arg *arg, BarClickArg *a) { int i = 0, x = 0; do @@ -115,7 +116,7 @@ click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) #else x += TEXTW(tags[i]); #endif - while (rel_x >= x && ++i < LENGTH(tags)); + while (a->rel_x >= x && ++i < LENGTH(tags)); if (i < LENGTH(tags)) { arg->ui = 1 << i; } diff --git a/patch/bar_tags.h b/patch/bar_tags.h index 788c488..9961f1a 100644 --- a/patch/bar_tags.h +++ b/patch/bar_tags.h @@ -1,3 +1,3 @@ -static int width_tags(Monitor *m, int max_width); -static int draw_tags(Monitor *m, int x, int w); -static int click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file +static int width_tags(Monitor *m, BarWidthArg *a); +static int draw_tags(Monitor *m, BarDrawArg *a); +static int click_tags(Monitor *m, Arg *arg, BarClickArg *a); \ No newline at end of file diff --git a/patch/bar_vtcolors.c b/patch/bar_vtcolors.c new file mode 100644 index 0000000..349970f --- /dev/null +++ b/patch/bar_vtcolors.c @@ -0,0 +1,70 @@ +void +get_vt_colors(void) +{ + char *cfs[3] = { + "/sys/module/vt/parameters/default_red", + "/sys/module/vt/parameters/default_grn", + "/sys/module/vt/parameters/default_blu", + }; + char vtcs[16][8]; + char tk[] = ","; + char cl[64]; + char *tp = NULL; + FILE *fp; + size_t r; + int i, c, n; + + for (i = 0; i < 16; i++) + strcpy(vtcs[i], "#000000"); + + for (i = 0, r = 0; i < 3; i++) { + if ((fp = fopen(cfs[i], "r")) == NULL) + continue; + while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n') + r++; + cl[r] = '\0'; + for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) { + if ((r = strcspn(tp, tk)) == -1) + break; + for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++) + n = n * 10 - 48 + *tp; + vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87; + vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87; + } + fclose(fp); + } + for (i = 0; i < LENGTH(colors); i++) { + #if FLOAT_BORDER_COLOR_PATCH + for (c = 0; c < 4; c++) + #else + for (c = 0; c < 3; c++) + #endif // FLOAT_BORDER_COLOR_PATCH + { + n = color_ptrs[i][c]; + if (n > -1 && strlen(colors[i][c]) >= strlen(vtcs[n])) + memcpy(colors[i][c], vtcs[n], 7); + } + } +} + +int get_luminance(char *r) +{ + char *c = r; + int n[3] = {0}; + int i = 0; + + while (*c) { + if (*c >= 48 && *c < 58) + n[i / 2] = n[i / 2] * 16 - 48 + *c; + else if (*c >= 65 && *c < 71) + n[i / 2] = n[i / 2] * 16 - 55 + *c; + else if (*c >= 97 && *c < 103) + n[i / 2] = n[i / 2] * 16 - 87 + *c; + else + i--; + i++; + c++; + } + + return (0.299 * n[0] + 0.587 * n[1] + 0.114 * n[2]) / 2.55; +} \ No newline at end of file diff --git a/patch/bar_vtcolors.h b/patch/bar_vtcolors.h new file mode 100644 index 0000000..7341e6a --- /dev/null +++ b/patch/bar_vtcolors.h @@ -0,0 +1,2 @@ +static void get_vt_colors(void); +static int get_luminance(char *rgb); \ No newline at end of file diff --git a/patch/bar_wintitle.c b/patch/bar_wintitle.c index e937723..36889c1 100644 --- a/patch/bar_wintitle.c +++ b/patch/bar_wintitle.c @@ -1,11 +1,11 @@ int -width_wintitle(Monitor *m, int max_width) +width_wintitle(Monitor *m, BarWidthArg *a) { - return max_width; + return a->max_width; } int -draw_wintitle(Monitor *m, int x, int w) +draw_wintitle(Monitor *m, BarDrawArg *a) { #if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH #if BAR_PANGO_PATCH @@ -19,6 +19,7 @@ draw_wintitle(Monitor *m, int x, int w) #else int boxw = drw->fonts->h / 6 + 2; #endif // BAR_PANGO_PATCH + int x = a->x, w = a->w; if (m->sel) { #if BAR_VTCOLORS_PATCH @@ -33,25 +34,17 @@ draw_wintitle(Monitor *m, int x, int w) #endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH #if BAR_CENTEREDWINDOWNAME_PATCH int mid = (m->ww - TEXTW(m->sel->name)) / 2 - x; - #if BAR_PADDING_PATCH && BAR_PANGO_PATCH - drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0, False); - #elif BAR_PADDING_PATCH - drw_text(drw, x, 0, w - 2*sp, bh, mid, m->sel->name, 0); - #elif BAR_PANGO_PATCH + #if BAR_PANGO_PATCH drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0, False); #else drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0); - #endif // BAR_PADDING_PATCH + #endif // BAR_PANGO_PATCH #else - #if BAR_PADDING_PATCH && BAR_PANGO_PATCH - drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0, False); - #elif BAR_PADDING_PATCH - drw_text(drw, x, 0, w - 2*sp, bh, lrpad / 2, m->sel->name, 0); - #elif BAR_PANGO_PATCH + #if BAR_PANGO_PATCH drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0, False); #else drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); - #endif // BAR_PADDING_PATCH + #endif // BAR_PANGO_PATCH #endif // BAR_CENTEREDWINDOWNAME_PATCH #if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH XSync(dpy, False); @@ -61,7 +54,7 @@ draw_wintitle(Monitor *m, int x, int w) #if BAR_ACTIVETAGINDICATORBAR_PATCH drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, m->sel->isfixed, 0); #elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH - drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2, + drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2, 0); #else drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); #endif // BAR_ACTIVETAGINDICATORBAR_PATCH @@ -71,17 +64,13 @@ draw_wintitle(Monitor *m, int x, int w) #else drw_setscheme(drw, scheme[SchemeNorm]); #endif // BAR_VTCOLORS_PATCH - #if BAR_PADDING_PATCH - drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1); - #else drw_rect(drw, x, 0, w, bh, 1, 1); - #endif // BAR_PADDING_PATCH } return x + w; } int -click_wintitle(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h) +click_wintitle(Monitor *m, Arg *arg, BarClickArg *a) { return ClkWinTitle; } diff --git a/patch/bar_wintitle.h b/patch/bar_wintitle.h index b1d7ddd..d79affe 100644 --- a/patch/bar_wintitle.h +++ b/patch/bar_wintitle.h @@ -1,3 +1,3 @@ -static int width_wintitle(Monitor *m, int max_width); -static int draw_wintitle(Monitor *m, int x, int w); -static int click_wintitle(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h); \ No newline at end of file +static int width_wintitle(Monitor *m, BarWidthArg *a); +static int draw_wintitle(Monitor *m, BarDrawArg *a); +static int click_wintitle(Monitor *m, Arg *arg, BarClickArg *a); \ No newline at end of file