Major refactoring in preparation for bar modules

This commit is contained in:
bakkeby
2020-07-15 08:57:30 +02:00
parent 1584a32063
commit 903b32ac8b
76 changed files with 1874 additions and 1741 deletions

View File

@@ -1,67 +0,0 @@
void
hide(Client *c) {
if (!c || HIDDEN(c))
return;
Window w = c->win;
static XWindowAttributes ra, ca;
// more or less taken directly from blackbox's hide() function
XGrabServer(dpy);
XGetWindowAttributes(dpy, root, &ra);
XGetWindowAttributes(dpy, w, &ca);
// prevent UnmapNotify events
XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask);
XSelectInput(dpy, w, ca.your_event_mask & ~StructureNotifyMask);
XUnmapWindow(dpy, w);
setclientstate(c, IconicState);
XSelectInput(dpy, root, ra.your_event_mask);
XSelectInput(dpy, w, ca.your_event_mask);
XUngrabServer(dpy);
focus(c->snext);
arrange(c->mon);
}
void
show(Client *c)
{
if (!c || !HIDDEN(c))
return;
XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
arrange(c->mon);
}
void
togglewin(const Arg *arg)
{
Client *c = (Client*)arg->v;
if (c == selmon->sel)
hide(c);
else {
if (HIDDEN(c))
show(c);
focus(c);
restack(selmon);
}
}
void
showhideclient(const Arg *arg)
{
Client *c = (Client*)arg->v;
if (!c)
c = selmon->sel;
if (!c)
return;
if (HIDDEN(c)) {
show(c);
restack(selmon);
} else {
hide(c);
}
}

View File

@@ -1,4 +0,0 @@
static void hide(Client *c);
static void show(Client *c);
static void togglewin(const Arg *arg);
static void showhideclient(const Arg *arg);

146
patch/bar_awesomebar.c Normal file
View File

@@ -0,0 +1,146 @@
int
width_awesomebar(Monitor *m, int max_width)
{
return max_width;
}
int
draw_awesomebar(Monitor *m, int x_orig, int w)
{
int n = 0, scm, remainder = 0, tabw;
unsigned int i, x = x_orig;
Client *c;
for (c = m->clients; c; c = c->next)
if (ISVISIBLE(c))
n++;
if (n > 0) {
remainder = w % n;
tabw = w / n;
for (i = 0, c = m->clients; c; c = c->next, i++) {
if (!ISVISIBLE(c))
continue;
if (m->sel == c)
#if BAR_VTCOLORS_PATCH
scm = SchemeTitleSel;
#elif BAR_TITLECOLOR_PATCH
scm = SchemeTitle;
#else
scm = SchemeSel;
#endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
else if (HIDDEN(c))
scm = SchemeHid;
else
#if BAR_VTCOLORS_PATCH
scm = SchemeTitleNorm;
#else
scm = SchemeNorm;
#endif // BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[scm]);
#if BAR_PANGO_PATCH
drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0, False);
#else
drw_text(drw, x, 0, tabw + (i < remainder ? 1 : 0), bh, lrpad / 2, c->name, 0);
#endif // BAR_PANGO_PATCH
x += tabw;
}
}
return x_orig + w;
}
int
click_awesomebar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
int x = 0, n = 0;
Client *c;
for (c = m->clients; c; c = c->next)
if (ISVISIBLE(c))
n++;
c = m->clients;
do {
if (!c || !ISVISIBLE(c))
continue;
else
x += (1.0 / (double)n) * rel_w;
} while (c && rel_x > x && (c = c->next));
if (c) {
arg->v = c;
return ClkWinTitle;
}
return -1;
}
void
hide(Client *c) {
if (!c || HIDDEN(c))
return;
Window w = c->win;
static XWindowAttributes ra, ca;
// more or less taken directly from blackbox's hide() function
XGrabServer(dpy);
XGetWindowAttributes(dpy, root, &ra);
XGetWindowAttributes(dpy, w, &ca);
// prevent UnmapNotify events
XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask);
XSelectInput(dpy, w, ca.your_event_mask & ~StructureNotifyMask);
XUnmapWindow(dpy, w);
setclientstate(c, IconicState);
XSelectInput(dpy, root, ra.your_event_mask);
XSelectInput(dpy, w, ca.your_event_mask);
XUngrabServer(dpy);
focus(c->snext);
arrange(c->mon);
}
void
show(Client *c)
{
if (!c || !HIDDEN(c))
return;
XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
arrange(c->mon);
}
void
togglewin(const Arg *arg)
{
Client *c = (Client*)arg->v;
if (!c)
return;
if (c == selmon->sel)
hide(c);
else {
if (HIDDEN(c))
show(c);
focus(c);
restack(selmon);
}
}
void
showhideclient(const Arg *arg)
{
Client *c = (Client*)arg->v;
if (!c)
c = selmon->sel;
if (!c)
return;
if (HIDDEN(c)) {
show(c);
restack(selmon);
} else {
hide(c);
}
}

8
patch/bar_awesomebar.h Normal file
View File

@@ -0,0 +1,8 @@
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 void hide(Client *c);
static void show(Client *c);
static void togglewin(const Arg *arg);
static void showhideclient(const Arg *arg);

97
patch/bar_fancybar.c Normal file
View File

@@ -0,0 +1,97 @@
int
width_fancybar(Monitor *m, int max_width)
{
return max_width;
}
int
draw_fancybar(Monitor *m, int x, int w)
{
int ftw, mw, ew = 0, n = 0;
unsigned int i;
Client *c;
#if !BAR_HIDEVACANTTAGS_PATCH
#if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxs = drw->font->h / 9;
#else
int boxs = drw->fonts->h / 9;
#endif // BAR_PANGO_PATCH
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxw = drw->font->h / 6 + 2;
#else
int boxw = drw->fonts->h / 6 + 2;
#endif // BAR_PANGO_PATCH
#endif // BAR_HIDEVACANTTAGS_PATCH
for (c = m->clients; c; c = c->next) {
if (ISVISIBLE(c))
n++;
}
if (n > 0) {
ftw = TEXTW(m->sel->name) + lrpad;
mw = (ftw >= w || n == 1) ? 0 : (w - ftw) / (n - 1);
i = 0;
for (c = m->clients; c; c = c->next) {
if (!ISVISIBLE(c) || c == m->sel)
continue;
ftw = TEXTW(c->name);
if (ftw < mw)
ew += (mw - ftw);
else
i++;
}
if (i > 0)
mw += ew / i;
for (c = m->clients; c; c = c->next) {
if (!ISVISIBLE(c))
continue;
ftw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[m->sel == c ? SchemeTitleSel : SchemeTitleNorm]);
#elif BAR_TITLECOLOR_PATCH
drw_setscheme(drw, scheme[m->sel == c ? SchemeTitle : SchemeNorm]);
#else
drw_setscheme(drw, scheme[m->sel == c ? SchemeSel : SchemeNorm]);
#endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
if (ftw > 0) /* trap special handling of 0 in drw_text */
#if BAR_PANGO_PATCH
drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0, False);
#else
drw_text(drw, x, 0, ftw, bh, lrpad / 2, c->name, 0);
#endif // BAR_PANGO_PATCH
#if !BAR_HIDEVACANTTAGS_PATCH
if (c->isfloating)
#if BAR_ACTIVETAGINDICATORBAR_PATCH
drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw, c->isfixed, 0);
#elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
#else
drw_rect(drw, x + boxs, boxs, boxw, boxw, c->isfixed, 0);
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH
#endif // BAR_HIDEVACANTTAGS_PATCH
x += ftw;
w -= ftw;
}
}
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[SchemeTitleNorm]);
#else
drw_setscheme(drw, scheme[SchemeNorm]);
#endif // BAR_VTCOLORS_PATCH
drw_rect(drw, x, 0, w, bh, 1, 1);
return x + w;
}
int
click_fancybar(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
return ClkWinTitle;
}

3
patch/bar_fancybar.h Normal file
View File

@@ -0,0 +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);

21
patch/bar_ltsymbol.c Normal file
View File

@@ -0,0 +1,21 @@
int
width_ltsymbol(Monitor *m, int max_width)
{
return TEXTW(m->ltsymbol);
}
int
draw_ltsymbol(Monitor *m, int x, int w)
{
#if BAR_PANGO_PATCH
return drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False);
#else
return drw_text(drw, x, 0, 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)
{
return ClkLtSymbol;
}

3
patch/bar_ltsymbol.h Normal file
View File

@@ -0,0 +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);

25
patch/bar_status.c Normal file
View File

@@ -0,0 +1,25 @@
int
width_status(Monitor *m, int max_width)
{
#if BAR_PANGO_PATCH
return TEXTWM(stext) - lrpad + 2; /* 2px right padding */
#else
return TEXTW(stext) - lrpad + 2; /* 2px right padding */
#endif // BAR_PANGO_PATCH
}
int
draw_status(Monitor *m, int x, int w)
{
#if BAR_PANGO_PATCH
return drw_text(drw, x, 0, w, bh, 0, stext, 0, True);
#else
return drw_text(drw, x, 0, 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)
{
return ClkStatusText;
}

3
patch/bar_status.h Normal file
View File

@@ -0,0 +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);

View File

@@ -1,7 +1,25 @@
int
drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
width_status2d(Monitor *m, int max_width)
{
int ret, i, w, x, len;
return status2dtextlength(rawstext);
}
int
draw_status2d(Monitor *m, int x, int w)
{
return drawstatusbar(m, x, w, rawstext);
}
int
click_status2d(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
return ClkStatusText;
}
int
drawstatusbar(Monitor *m, int x, int ow, char* stext)
{
int i, w, len;
short isCode = 0;
char *text;
char *p;
@@ -10,58 +28,11 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
if (!(text = (char*) malloc(sizeof(char)*len)))
die("malloc");
p = text;
#if STATUSCMD_PATCH
#if BAR_STATUSCMD_PATCH
copyvalidchars(text, stext);
#else
memcpy(text, stext, len);
#endif // STATUSCMD_PATCH
/* compute width of the status text */
w = stp * 2;
i = -1;
while (text[++i]) {
if (text[i] == '^') {
if (!isCode) {
isCode = 1;
text[i] = '\0';
#if PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
#endif // PANGO_PATCH
text[i] = '^';
if (text[++i] == 'f')
w += atoi(text + ++i);
} else {
isCode = 0;
text = text + i + 1;
i = -1;
}
}
}
if (!isCode)
#if PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
#endif // PANGO_PATCH
else
isCode = 0;
text = p;
w += 2; /* 1px padding on both sides */
if (align == 0)
x = 0 + stp; // left
else if (align == 1)
x = m->ww - w - stw + stp; // right
else
x = m->ww / 2 - w / 2; // center
ret = w;
drw_setscheme(drw, scheme[LENGTH(colors)]);
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
drw_rect(drw, x - stp - 1, 0, w, bh, 1, 1);
x++;
#endif // BAR_STATUSCMD_PATCH
/* process status text */
i = -1;
@@ -70,13 +41,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
isCode = 1;
text[i] = '\0';
#if PANGO_PATCH
#if BAR_PANGO_PATCH
w = TEXTWM(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0, True);
#else
w = TEXTW(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0);
#endif // PANGO_PATCH
#endif // BAR_PANGO_PATCH
x += w;
@@ -90,13 +61,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
#if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, 0xff);
#elif ALPHA_PATCH
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, alphas[SchemeNorm][ColFg]);
#else
drw_clr_create(drw, &drw->scheme[ColFg], buf);
#endif // ALPHA_PATCH
#endif // BAR_ALPHA_PATCH
i += 7;
} else if (text[i] == 'b') {
char buf[8];
@@ -106,13 +77,13 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
#if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, 0xff);
#elif ALPHA_PATCH
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, alphas[SchemeNorm][ColBg]);
#else
drw_clr_create(drw, &drw->scheme[ColBg], buf);
#endif // ALPHA_PATCH
#endif // BAR_ALPHA_PATCH
i += 7;
} else if (text[i] == 'd') {
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
@@ -142,21 +113,21 @@ drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp, int align)
isCode = 0;
}
}
if (!isCode) {
#if PANGO_PATCH
#if BAR_PANGO_PATCH
w = TEXTWM(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0, True);
#else
w = TEXTW(text) - lrpad;
drw_text(drw, x, 0, w, bh, 0, text, 0);
#endif // PANGO_PATCH
#endif // BAR_PANGO_PATCH
x += w;
}
drw_setscheme(drw, scheme[SchemeNorm]);
free(p);
return ret;
drw_setscheme(drw, scheme[SchemeNorm]);
return x;
}
int
@@ -165,16 +136,17 @@ status2dtextlength(char* stext)
int i, w, len;
short isCode = 0;
char *text;
char *p;
len = strlen(stext) + 1;
if (!(text = (char*) malloc(sizeof(char)*len)))
die("malloc");
#if STATUSCMD_PATCH
p = text;
#if BAR_STATUSCMD_PATCH
copyvalidchars(text, stext);
#else
memcpy(text, stext, len);
#endif // STATUSCMD_PATCH
#endif // BAR_STATUSCMD_PATCH
/* compute width of the status text */
w = 0;
@@ -184,11 +156,11 @@ status2dtextlength(char* stext)
if (!isCode) {
isCode = 1;
text[i] = '\0';
#if PANGO_PATCH
#if BAR_PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
#endif // PANGO_PATCH
#endif // BAR_PANGO_PATCH
text[i] = '^';
if (text[++i] == 'f')
w += atoi(text + ++i);
@@ -200,10 +172,11 @@ status2dtextlength(char* stext)
}
}
if (!isCode)
#if PANGO_PATCH
#if BAR_PANGO_PATCH
w += TEXTWM(text) - lrpad;
#else
w += TEXTW(text) - lrpad;
#endif // PANGO_PATCH
#endif // BAR_PANGO_PATCH
free(p);
return w;
}
}

5
patch/bar_status2d.h Normal file
View File

@@ -0,0 +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 drawstatusbar(Monitor *m, int x, int w, char* text);
static int status2dtextlength(char* stext);

11
patch/bar_status2d_eb.c Normal file
View File

@@ -0,0 +1,11 @@
int
width_status2d_eb(Monitor *m, int max_width)
{
return status2dtextlength(rawestext);
}
int
draw_status2d_eb(Monitor *m, int x, int w)
{
return drawstatusbar(m, x, w, rawestext);
}

2
patch/bar_status2d_eb.h Normal file
View File

@@ -0,0 +1,2 @@
static int width_status2d_eb(Monitor *m, int max_width);
static int draw_status2d_eb(Monitor *m, int x, int w);

21
patch/bar_statusbutton.c Normal file
View File

@@ -0,0 +1,21 @@
int
width_stbutton(Monitor *m, int max_width)
{
return TEXTW(buttonbar);
}
int
draw_stbutton(Monitor *m, int x, int w)
{
#if BAR_PANGO_PATCH
return drw_text(drw, x, 0, w, bh, lrpad / 2, buttonbar, 0, False);
#else
return drw_text(drw, x, 0, 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)
{
return ClkButton;
}

3
patch/bar_statusbutton.h Normal file
View File

@@ -0,0 +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);

76
patch/bar_statuscmd.c Normal file
View File

@@ -0,0 +1,76 @@
#if !BAR_DWMBLOCKS_PATCH
static const char statusexport[] = "export BUTTON=-;";
static int statuscmdn;
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)
{
return click_statuscmd_text(m, arg, rel_x, rel_y, 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)
{
return click_statuscmd_text(m, arg, rel_x, rel_y, rawestext);
}
#endif // BAR_EXTRABAR_PATCH
int
click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text)
{
int i = -1;
int x = 0;
char ch;
#if BAR_DWMBLOCKS_PATCH
dwmblockssig = -1;
#else
statuscmdn = 0;
#endif // BAR_DWMBLOCKS_PATCH
while (text[++i]) {
if ((unsigned char)text[i] < ' ') {
ch = text[i];
text[i] = '\0';
#if BAR_STATUS2D_PATCH && !BAR_BAR_STATUSCOLORS_PATCH
x += status2dtextlength(text);
#elif BAR_PANGO_PATCH
x += TEXTWM(text) - lrpad;
#else
x += TEXTW(text) - lrpad;
#endif // STATUS2D_PATCH
text[i] = ch;
text += i+1;
i = -1;
#if BAR_DWMBLOCKS_PATCH
if (x >= rel_x && dwmblockssig != -1)
break;
dwmblockssig = ch;
#else
if (x >= rel_x)
break;
if (ch <= LENGTH(statuscmds))
statuscmdn = ch - 1;
#endif // BAR_DWMBLOCKS_PATCH
}
}
#if BAR_DWMBLOCKS_PATCH
if (dwmblockssig == -1)
dwmblockssig = 0;
#endif // BAR_DWMBLOCKS_PATCH
return ClkStatusText;
}
void
copyvalidchars(char *text, char *rawtext)
{
int i = -1, j = 0;
while (rawtext[++i]) {
if ((unsigned char)rawtext[i] >= ' ') {
text[j++] = rawtext[i];
}
}
text[j] = '\0';
}

6
patch/bar_statuscmd.h Normal file
View File

@@ -0,0 +1,6 @@
static int click_statuscmd(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h);
#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);
#endif // BAR_EXTRABAR_PATCH
static int click_statuscmd_text(Monitor *m, Arg *arg, int rel_x, int rel_y, char *text);
static void copyvalidchars(char *text, char *rawtext);

View File

@@ -1,17 +1,35 @@
static Systray *systray = NULL;
static unsigned long systrayorientation = _NET_SYSTEM_TRAY_ORIENTATION_HORZ;
static int systraybaridx = -1;
static int systraybarrule = -1;
static int systrayxpos = 0;
unsigned int
getsystraywidth()
int
width_systray(Monitor *m, int max_width)
{
unsigned int w = 0;
Client *i;
if (!systray)
return 1;
if (showsystray)
for (i = systray->icons; i; w += i->w + systrayspacing, i = i->next);
return w ? w + systrayspacing : 0;
}
int
draw_systray(Monitor *m, int x_pos, int w)
{
systrayxpos = x_pos;
updatesystray();
return systrayxpos + w;
}
int
click_systray(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
return -1;
}
void
removesystrayicon(Client *i)
{
@@ -37,64 +55,51 @@ resizerequest(XEvent *e)
}
}
Monitor *
systraytomon(Monitor *m)
{
Monitor *t;
int i, n;
if (!systraypinning) {
if (!m)
return selmon;
return m == selmon ? m : NULL;
}
for (n = 1, t = mons; t && t->next; n++, t = t->next);
for (i = 1, t = mons; t && t->next && i < systraypinning; i++, t = t->next);
if (systraypinningfailfirst && n < systraypinning)
return mons;
return t;
}
void
updatesystray(void)
{
XSetWindowAttributes wa;
XWindowChanges wc;
Client *i;
Monitor *m = systraytomon(NULL);
unsigned int x = m->mx + m->mw;
unsigned int w = 1, xpad = 0, ypad = 0;
#if BARPADDING_PATCH
xpad = sp;
ypad = vp;
#endif // BARPADDING_PATCH
if (!showsystray)
return;
XSetWindowAttributes wa;
Client *i;
Monitor *m;
unsigned int w = 1, r, mi;
const BarRule *br;
if (!systray) {
/* init systray */
if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
die("fatal: could not malloc() %u bytes\n", sizeof(Systray));
wa.override_redirect = True;
wa.event_mask = ButtonPressMask|ExposureMask;
wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
wa.border_pixel = 0;
#if ALPHA_PATCH
wa.colormap = cmap;
systray->win = XCreateWindow(dpy, root, x - xpad, m->by + ypad, w, bh, 0, depth,
InputOutput, visual,
CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa);
#else
systray->win = XCreateSimpleWindow(dpy, root, x - xpad, m->by + ypad, w, bh, 0, 0, scheme[SchemeNorm][ColBg].pixel);
XChangeWindowAttributes(dpy, systray->win, CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWEventMask, &wa);
#endif // ALPHA_PATCH
XSelectInput(dpy, systray->win, SubstructureNotifyMask);
/* Work out which bar the systray is to be displayed on */
for (r = 0; r < LENGTH(barrules); r++) {
br = &barrules[r];
if (br->drawfunc == &draw_systray) {
systraybaridx = br->bar;
systraybarrule = r;
if (br->monitor == -1 || br->monitor == 'A')
m = selmon;
else
for (m = mons, mi = 0; m && mi < br->monitor && m->next; m = m->next, mi++);
systray->win = m->bars[systraybaridx]->win;
systray->mon = m;
break;
}
}
if (systraybaridx == -1) {
fprintf(stderr, "dwm: unable to obtain system tray, no draw_systray in bar rules.\n");
free(systray);
systray = NULL;
return;
}
XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&systrayorientation, 1);
#if ALPHA_PATCH
#if BAR_ALPHA_PATCH
XChangeProperty(dpy, systray->win, netatom[NetSystemTrayVisual], XA_VISUALID, 32,
PropModeReplace, (unsigned char *)&visual->visualid, 1);
#endif // ALPHA_PATCH
#endif // BAR_ALPHA_PATCH
XChangeProperty(dpy, systray->win, netatom[NetWMWindowType], XA_ATOM, 32,
PropModeReplace, (unsigned char *)&netatom[NetWMWindowTypeDock], 1);
XMapRaised(dpy, systray->win);
@@ -102,8 +107,7 @@ updatesystray(void)
if (XGetSelectionOwner(dpy, netatom[NetSystemTray]) == systray->win) {
sendevent(root, xatom[Manager], StructureNotifyMask, CurrentTime, netatom[NetSystemTray], systray->win, 0, 0);
XSync(dpy, False);
}
else {
} else {
fprintf(stderr, "dwm: unable to obtain system tray.\n");
free(systray);
systray = NULL;
@@ -111,34 +115,18 @@ updatesystray(void)
}
}
drw_setscheme(drw, scheme[SchemeNorm]);
for (w = 0, i = systray->icons; i; i = i->next) {
/* make sure the background color stays the same */
wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
XMapRaised(dpy, i->win);
w += systrayspacing;
i->x = w;
i->x = systrayxpos + w;
XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
w += i->w;
if (i->mon != m)
i->mon = m;
if (i->mon != systray->mon)
i->mon = systray->mon;
}
w = w ? w + systrayspacing : 1;
x -= w;
XMoveResizeWindow(dpy, systray->win, x - xpad, m->by + ypad, w, bh);
wc.x = x - xpad;
wc.y = m->by + ypad;
wc.width = w;
wc.height = bh;
wc.stack_mode = Above; wc.sibling = m->barwin;
XConfigureWindow(dpy, systray->win, CWX|CWY|CWWidth|CWHeight|CWSibling|CWStackMode, &wc);
XMapWindow(dpy, systray->win);
XMapSubwindows(dpy, systray->win);
/* redraw background */
XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
XSync(dpy, False);
}
void

View File

@@ -22,14 +22,18 @@ typedef struct Systray Systray;
struct Systray {
Window win;
Client *icons;
Monitor *mon;
};
/* 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);
/* function declarations */
static Atom getatomprop(Client *c, Atom prop);
static unsigned int getsystraywidth();
static void removesystrayicon(Client *i);
static void resizerequest(XEvent *e);
static Monitor *systraytomon(Monitor *m);
static void updatesystray(void);
static void updatesystrayicongeom(Client *i, int w, int h);
static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);

142
patch/bar_taggrid.c Normal file
View File

@@ -0,0 +1,142 @@
int
width_taggrid(Monitor *m, int max_width)
{
return (bh / 2) * (LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0));
}
int
draw_taggrid(Monitor *m, int x_pos, int w)
{
unsigned int x, y, h, max_x, columns, occ = 0;
int invert, i,j, k;
Client *c;
for (c = m->clients; c; c = c->next)
occ |= c->tags;
h = bh / tagrows;
x = max_x = x_pos;
y = 0;
columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
/* Firstly we will fill the borders of squares */
XFillRectangle(dpy, drw->drawable, drw->gc, x, y, h*columns + 1, bh);
/* We will draw LENGTH(tags) squares in tagraws raws. */
for (j = 0, i = 0; j < tagrows; j++) {
x = x_pos;
for (k = 0; k < columns && i < LENGTH(tags); k++, i++) {
invert = m->tagset[m->seltags] & 1 << i ? 0 : 1;
/* Select active color for current square */
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColBg].pixel :
scheme[SchemeNorm][ColFg].pixel);
XFillRectangle(dpy, drw->drawable, drw->gc, x+1, y+1, h-1, h-1);
/* Mark square if tag has client */
if (occ & 1 << i) {
XSetForeground(drw->dpy, drw->gc, !invert ? scheme[SchemeSel][ColFg].pixel :
scheme[SchemeNorm][ColBg].pixel);
XFillRectangle(dpy, drw->drawable, drw->gc, x + 1, y + 1,
h / 2, h / 2);
}
x += h;
if (x > max_x) {
max_x = x;
}
}
y += h;
}
return max_x;
}
int
click_taggrid(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
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));
if (i >= LENGTH(tags)) {
i = LENGTH(tags) - 1;
}
arg->ui = 1 << i;
return ClkTagBar;
}
void
switchtag(const Arg *arg)
{
unsigned int columns;
unsigned int new_tagset = 0;
unsigned int pos, i;
int col, row;
Arg new_arg;
columns = LENGTH(tags) / tagrows + ((LENGTH(tags) % tagrows > 0) ? 1 : 0);
for (i = 0; i < LENGTH(tags); ++i) {
if (!(selmon->tagset[selmon->seltags] & 1 << i)) {
continue;
}
pos = i;
row = pos / columns;
col = pos % columns;
if (arg->ui & SWITCHTAG_UP) { /* UP */
row --;
if (row < 0) {
row = tagrows - 1;
}
do {
pos = row * columns + col;
row --;
} while (pos >= LENGTH(tags));
}
if (arg->ui & SWITCHTAG_DOWN) { /* DOWN */
row ++;
if (row >= tagrows) {
row = 0;
}
pos = row * columns + col;
if (pos >= LENGTH(tags)) {
row = 0;
}
pos = row * columns + col;
}
if (arg->ui & SWITCHTAG_LEFT) { /* LEFT */
col --;
if (col < 0) {
col = columns - 1;
}
do {
pos = row * columns + col;
col --;
} while (pos >= LENGTH(tags));
}
if (arg->ui & SWITCHTAG_RIGHT) { /* RIGHT */
col ++;
if (col >= columns) {
col = 0;
}
pos = row * columns + col;
if (pos >= LENGTH(tags)) {
col = 0;
pos = row * columns + col;
}
}
new_tagset |= 1 << pos;
}
new_arg.ui = new_tagset;
if (arg->ui & SWITCHTAG_TOGGLETAG) {
toggletag(&new_arg);
}
if (arg->ui & SWITCHTAG_TAG) {
tag(&new_arg);
}
if (arg->ui & SWITCHTAG_VIEW) {
view (&new_arg);
}
if (arg->ui & SWITCHTAG_TOGGLEVIEW) {
toggleview (&new_arg);
}
}

4
patch/bar_taggrid.h Normal file
View File

@@ -0,0 +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 void switchtag(const Arg *arg);

123
patch/bar_tags.c Normal file
View File

@@ -0,0 +1,123 @@
int
width_tags(Monitor *m, int max_width)
{
int w, i;
for (w = 0, i = 0; i < LENGTH(tags); i++) {
#if BAR_ALTERNATIVE_TAGS_PATCH
w += selmon->alttag ? TEXTW(tagsalt[i]) : TEXTW(tags[i]);
#else
w += TEXTW(tags[i]);
#endif // BAR_ALTERNATIVE_TAGS_PATCH
}
return w;
}
int
draw_tags(Monitor *m, int x, int w)
{
int invert;
#if BAR_ALTERNATIVE_TAGS_PATCH
int wdelta;
#endif // BAR_ALTERNATIVE_TAGS_PATCH
#if !BAR_HIDEVACANTTAGS_PATCH
#if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxs = drw->font->h / 9;
#else
int boxs = drw->fonts->h / 9;
#endif // BAR_PANGO_PATCH
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxw = drw->font->h / 6 + 2;
#else
int boxw = drw->fonts->h / 6 + 2;
#endif // BAR_PANGO_PATCH
#endif // BAR_HIDEVACANTTAGS_PATCH
unsigned int i, occ = 0, urg = 0;
Client *c;
for (c = m->clients; c; c = c->next) {
#if BAR_HIDEVACANTTAGS_PATCH
occ |= c->tags == 255 ? 0 : c->tags;
#else
occ |= c->tags;
#endif // BAR_HIDEVACANTTAGS_PATCH
if (c->isurgent)
urg |= c->tags;
}
for (i = 0; i < LENGTH(tags); i++) {
#if URGENTBORDER_PATCH
invert = 0;
#else
invert = urg & 1 << i;
#endif // URGENTBORDER_PATCH
#if BAR_HIDEVACANTTAGS_PATCH
/* do not draw vacant tags */
if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
continue;
#endif // BAR_HIDEVACANTTAGS_PATCH
w = TEXTW(tags[i]);
#if BAR_ALTERNATIVE_TAGS_PATCH
wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0;
#endif // BAR_ALTERNATIVE_TAGS_PATCH
#if URGENTBORDER_PATCH
if (m->tagset[m->seltags] & 1 << i)
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[SchemeTagsSel]);
#else
drw_setscheme(drw, scheme[SchemeSel]);
#endif // BAR_VTCOLORS_PATCH
else
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeTagsNorm]);
#else
drw_setscheme(drw, scheme[urg & 1 << i ? SchemeUrg : SchemeNorm]);
#endif // BAR_VTCOLORS_PATCH
#elif BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeTagsSel : SchemeTagsNorm]);
#else // URGENTBORDER_PATCH
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
#endif // URGENTBORDER_PATCH
#if BAR_ALTERNATIVE_TAGS_PATCH && BAR_PANGO_PATCH
drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert, False);
#elif BAR_ALTERNATIVE_TAGS_PATCH
drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), invert);
#elif BAR_PANGO_PATCH
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert, False);
#else
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], invert);
#endif // BAR_ALTERNATIVE_TAGS_PATCH
#if !BAR_HIDEVACANTTAGS_PATCH
if (occ & 1 << i)
#if BAR_ACTIVETAGINDICATORBAR_PATCH
drw_rect(drw, x + boxw, 0, w - ( 2 * boxw + 1), boxw,
#elif BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
drw_rect(drw, x + boxw, bh - boxw/2, w - ( 2 * boxw + 1), boxw/2,
#else
drw_rect(drw, x + boxs, boxs, boxw, boxw,
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH
m == selmon && selmon->sel && selmon->sel->tags & 1 << i, invert);
#endif // BAR_HIDEVACANTTAGS_PATCH
x += w;
}
return x;
}
int
click_tags(Monitor *m, Arg *arg, int rel_x, int rel_y, int rel_w, int rel_h)
{
int i = 0, x = 0;
do
#if BAR_ALTERNATIVE_TAGS_PATCH
x += selmon->alttag ? TEXTW(tagsalt[i]) : TEXTW(tags[i]);
#else
x += TEXTW(tags[i]);
#endif
while (rel_x >= x && ++i < LENGTH(tags));
if (i < LENGTH(tags)) {
arg->ui = 1 << i;
}
return ClkTagBar;
}

3
patch/bar_tags.h Normal file
View File

@@ -0,0 +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);

89
patch/bar_wintitle.c Normal file
View File

@@ -0,0 +1,89 @@
int
width_wintitle(Monitor *m, int max_width)
{
return max_width;
}
int
draw_wintitle(Monitor *m, int x, int w)
{
#if !BAR_ACTIVETAGINDICATORBAR_PATCH && !BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxs = drw->font->h / 9;
#else
int boxs = drw->fonts->h / 9;
#endif // BAR_PANGO_PATCH
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH | BAR_ACTIVETAGINDICATORBAR_ALT1_PATCH
#if BAR_PANGO_PATCH
int boxw = drw->font->h / 6 + 2;
#else
int boxw = drw->fonts->h / 6 + 2;
#endif // BAR_PANGO_PATCH
if (m->sel) {
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]);
#elif BAR_TITLECOLOR_PATCH
drw_setscheme(drw, scheme[m == selmon ? SchemeTitle : SchemeNorm]);
#else
drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
#endif // BAR_VTCOLORS_PATCH / BAR_TITLECOLOR_PATCH
#if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
XSetErrorHandler(xerrordummy);
#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
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
#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
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_CENTEREDWINDOWNAME_PATCH
#if BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
XSync(dpy, False);
XSetErrorHandler(xerror);
#endif // BAR_IGNORE_XFT_ERRORS_WHEN_DRAWING_TEXT_PATCH
if (m->sel->isfloating)
#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,
#else
drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
#endif // BAR_ACTIVETAGINDICATORBAR_PATCH
} else {
#if BAR_VTCOLORS_PATCH
drw_setscheme(drw, scheme[SchemeTitleNorm]);
#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)
{
return ClkWinTitle;
}

3
patch/bar_wintitle.h Normal file
View File

@@ -0,0 +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);

View File

@@ -1,12 +1,12 @@
static int combo = 0;
#if !HOLDBAR_PATCH
#if !BAR_HOLDBAR_PATCH
void
keyrelease(XEvent *e)
{
combo = 0;
}
#endif // !HOLDBAR_PATCH
#endif // !BAR_HOLDBAR_PATCH
void
combotag(const Arg *arg)

View File

@@ -1,5 +1,5 @@
#if !HOLDBAR_PATCH
#if !BAR_HOLDBAR_PATCH
static void keyrelease(XEvent *e);
#endif // !HOLDBAR_PATCH
#endif // !BAR_HOLDBAR_PATCH
static void combotag(const Arg *arg);
static void comboview(const Arg *arg);

View File

@@ -5,18 +5,18 @@ holdbar(const Arg *arg)
return;
selmon->showbar = 2;
updateholdbarpos(selmon);
#if BARPADDING_PATCH
#if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
#endif // BARPADDING_PATCH
#if EXTRABAR_PATCH
#if BARPADDING_PATCH
#endif // BAR_PADDING_PATCH
#if BAR_EXTRABAR_PATCH
#if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
#endif // BARPADDING_PATCH
#endif // EXTRABAR_PATCH
#endif // BAR_PADDING_PATCH
#endif // BAR_EXTRABAR_PATCH
}
void
@@ -35,18 +35,18 @@ keyrelease(XEvent *e)
if (e->xkey.keycode == XKeysymToKeycode(dpy, HOLDKEY) && selmon->showbar == 2) {
selmon->showbar = 0;
updateholdbarpos(selmon);
#if BARPADDING_PATCH
#if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
#endif // BARPADDING_PATCH
#if EXTRABAR_PATCH
#if BARPADDING_PATCH
#endif // BAR_PADDING_PATCH
#if BAR_EXTRABAR_PATCH
#if BAR_PADDING_PATCH
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx + sp, selmon->eby - vp, selmon->ww - 2 * sp, bh);
#else
XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh);
#endif // BARPADDING_PATCH
#endif // EXTRABAR_PATCH
#endif // BAR_PADDING_PATCH
#endif // BAR_EXTRABAR_PATCH
arrange(selmon);
}
#if COMBO_PATCH
@@ -59,8 +59,8 @@ updateholdbarpos(Monitor *m)
{
m->wy = m->my;
m->wh = m->mh;
#if EXTRABAR_PATCH
#if BARPADDING_PATCH
#if BAR_EXTRABAR_PATCH
#if BAR_PADDING_PATCH
m->wh = m->wh - vertpad * m->showbar * 2 - bh * m->showbar * 2;
m->wy = m->showbar ? m->wy + bh + vertpad: m->wy;
if (m->showbar) {
@@ -80,8 +80,8 @@ updateholdbarpos(Monitor *m)
m->by = -bh;
m->eby = -bh;
}
#endif // BARPADDING_PATCH
#elif BARPADDING_PATCH
#endif // BAR_PADDING_PATCH
#elif BAR_PADDING_PATCH
if (m->showbar) {
m->wh = m->wh - vertpad - bh;
m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad;
@@ -95,5 +95,5 @@ updateholdbarpos(Monitor *m)
m->wy = m->topbar ? m->wy + bh : m->wy;
} else
m->by = -bh;
#endif // EXTRABAR_PATCH
#endif // BAR_EXTRABAR_PATCH
}

View File

@@ -1,19 +1,57 @@
/* Patches */
#if ALPHA_PATCH
#include "alpha.c"
/* Bar functionality */
#if BAR_ALPHA_PATCH
#include "bar_alpha.c"
#endif
#if ALTERNATIVE_TAGS_PATCH
#include "alternativetags.c"
#if BAR_ALTERNATIVE_TAGS_PATCH
#include "bar_alternativetags.c"
#endif
#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH
#include "bar_dwmblocks.c"
#endif
#if BAR_LTSYMBOL_PATCH
#include "bar_ltsymbol.c"
#endif
#if BAR_STATUS_PATCH
#include "bar_status.c"
#endif
#if BAR_STATUS2D_PATCH
#include "bar_status2d.c"
#if BAR_EXTRABAR_PATCH
#include "bar_status2d_eb.c"
#endif // BAR_EXTRABAR_PATCH
#endif
#if BAR_STATUSBUTTON_PATCH
#include "bar_statusbutton.c"
#endif
#if BAR_STATUSCMD_PATCH
#include "bar_statuscmd.c"
#endif
#if BAR_TAGS_PATCH
#include "bar_tags.c"
#endif
#if BAR_TAGGRID_PATCH
#include "bar_taggrid.c"
#endif
#if BAR_WINTITLE_PATCH
#include "bar_wintitle.c"
#endif
#if BAR_FANCYBAR_PATCH
#include "bar_fancybar.c"
#endif
#if BAR_AWESOMEBAR_PATCH
#include "bar_awesomebar.c"
#endif
#if BAR_SYSTRAY_PATCH
#include "bar_systray.c"
#endif
/* Other patches */
#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH
#include "attachx.c"
#endif
#if AUTOSTART_PATCH
#include "autostart.c"
#endif
#if AWESOMEBAR_PATCH
#include "awesomebar.c"
#endif
#if CFACTS_PATCH
#include "cfacts.c"
#endif
@@ -29,15 +67,12 @@
#if DRAGCFACT_PATCH && CFACTS_PATCH
#include "dragcfact.c"
#endif
#if DWMBLOCKS_PATCH && STATUSCMD_PATCH
#include "dwmblocks.c"
#endif
#if DWMC_PATCH
#include "dwmc.c"
#elif FSIGNAL_PATCH
#include "fsignal.c"
#endif
#if EWMHTAGS_PATCH
#if BAR_EWMHTAGS_PATCH
#include "ewmhtags.c"
#endif
#if EXRESIZE_PATCH
@@ -58,7 +93,7 @@
#if FULLSCREEN_PATCH
#include "fullscreen.c"
#endif
#if HOLDBAR_PATCH
#if BAR_HOLDBAR_PATCH
#include "holdbar.c"
#endif
#if INPLACEROTATE_PATCH
@@ -131,21 +166,12 @@
#if STACKER_PATCH
#include "stacker.c"
#endif
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
#include "status2d.c"
#endif
#if STATUSCOLORS_PATCH
#if BAR_STATUSCOLORS_PATCH
#include "statuscolors.c"
#endif
#if STATUSCMD_PATCH
#include "statuscmd.c"
#endif
#if STICKY_PATCH
#include "sticky.c"
#endif
#if SYSTRAY_PATCH
#include "systray.c"
#endif
#if SWALLOW_PATCH
#include "swallow.c"
#endif
@@ -188,7 +214,7 @@
#if VANITYGAPS_PATCH
#include "vanitygaps.c"
#endif
#if VTCOLORS_PATCH
#if BAR_VTCOLORS_PATCH
#include "vtcolors.c"
#endif
#if WARP_PATCH
@@ -200,7 +226,7 @@
#if ZOOMSWAP_PATCH
#include "zoomswap.c"
#endif
#if XRDB_PATCH && !VTCOLORS_PATCH
#if XRDB_PATCH && !BAR_VTCOLORS_PATCH
#include "xrdb.c"
#endif
#if DRAGMFACT_PATCH
@@ -211,44 +237,44 @@
#include "layout_facts.c"
#endif
#if BSTACK_LAYOUT
#include "bstack.c"
#include "layout_bstack.c"
#endif
#if BSTACKHORIZ_LAYOUT
#include "bstackhoriz.c"
#include "layout_bstackhoriz.c"
#endif
#if CENTEREDMASTER_LAYOUT
#include "centeredmaster.c"
#include "layout_centeredmaster.c"
#endif
#if CENTEREDFLOATINGMASTER_LAYOUT
#include "centeredfloatingmaster.c"
#include "layout_centeredfloatingmaster.c"
#endif
#if COLUMNS_LAYOUT
#include "columns.c"
#include "layout_columns.c"
#endif
#if DECK_LAYOUT
#include "deck.c"
#include "layout_deck.c"
#endif
#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT
#include "fibonacci.c"
#include "layout_fibonacci.c"
#endif
#if FLEXTILE_DELUXE_LAYOUT
#include "flextile-deluxe.c"
#include "layout_flextile-deluxe.c"
#endif
#if GAPPLESSGRID_LAYOUT
#include "gapplessgrid.c"
#include "layout_gapplessgrid.c"
#endif
#if GRIDMODE_LAYOUT
#include "grid.c"
#include "layout_grid.c"
#endif
#if HORIZGRID_LAYOUT
#include "horizgrid.c"
#include "layout_horizgrid.c"
#endif
#if MONOCLE_LAYOUT
#include "monocle.c"
#include "layout_monocle.c"
#endif
#if NROWGRID_LAYOUT
#include "nrowgrid.c"
#include "layout_nrowgrid.c"
#endif
#if TILE_LAYOUT
#include "tile.c"
#endif
#include "layout_tile.c"
#endif

View File

@@ -1,19 +1,57 @@
/* Patches */
#if ALPHA_PATCH
#include "alpha.h"
/* Bar functionality */
#if BAR_ALPHA_PATCH
#include "bar_alpha.h"
#endif
#if ALTERNATIVE_TAGS_PATCH
#include "alternativetags.h"
#if BAR_ALTERNATIVE_TAGS_PATCH
#include "bar_alternativetags.h"
#endif
#if BAR_DWMBLOCKS_PATCH && BAR_STATUSCMD_PATCH
#include "bar_dwmblocks.h"
#endif
#if BAR_LTSYMBOL_PATCH
#include "bar_ltsymbol.h"
#endif
#if BAR_STATUS_PATCH
#include "bar_status.h"
#endif
#if BAR_STATUS2D_PATCH
#include "bar_status2d.h"
#if BAR_EXTRABAR_PATCH
#include "bar_status2d_eb.h"
#endif // BAR_EXTRABAR_PATCH
#endif
#if BAR_STATUSBUTTON_PATCH
#include "bar_statusbutton.h"
#endif
#if BAR_STATUSCMD_PATCH
#include "bar_statuscmd.h"
#endif
#if BAR_TAGS_PATCH
#include "bar_tags.h"
#endif
#if BAR_TAGGRID_PATCH
#include "bar_taggrid.h"
#endif
#if BAR_WINTITLE_PATCH
#include "bar_wintitle.h"
#endif
#if BAR_FANCYBAR_PATCH
#include "bar_fancybar.h"
#endif
#if BAR_AWESOMEBAR_PATCH
#include "bar_awesomebar.h"
#endif
#if BAR_SYSTRAY_PATCH
#include "bar_systray.h"
#endif
/* Other patches */
#if ATTACHABOVE_PATCH || ATTACHASIDE_PATCH || ATTACHBELOW_PATCH || ATTACHBOTTOM_PATCH
#include "attachx.h"
#endif
#if AUTOSTART_PATCH
#include "autostart.h"
#endif
#if AWESOMEBAR_PATCH
#include "awesomebar.h"
#endif
#if CFACTS_PATCH
#include "cfacts.h"
#endif
@@ -32,15 +70,12 @@
#if DRAGMFACT_PATCH
#include "dragmfact.h"
#endif
#if DWMBLOCKS_PATCH && STATUSCMD_PATCH
#include "dwmblocks.h"
#endif
#if DWMC_PATCH
#include "dwmc.h"
#elif FSIGNAL_PATCH
#include "fsignal.h"
#endif
#if EWMHTAGS_PATCH
#if BAR_EWMHTAGS_PATCH
#include "ewmhtags.h"
#endif
#if EXRESIZE_PATCH
@@ -61,7 +96,7 @@
#if FULLSCREEN_PATCH
#include "fullscreen.h"
#endif
#if HOLDBAR_PATCH
#if BAR_HOLDBAR_PATCH
#include "holdbar.h"
#endif
#if INPLACEROTATE_PATCH
@@ -134,18 +169,9 @@
#if STACKER_PATCH
#include "stacker.h"
#endif
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
#include "status2d.h"
#endif
#if STATUSCMD_PATCH
#include "statuscmd.h"
#endif
#if STICKY_PATCH
#include "sticky.h"
#endif
#if SYSTRAY_PATCH
#include "systray.h"
#endif
#if SWALLOW_PATCH
#include "swallow.h"
#endif
@@ -188,7 +214,7 @@
#if VANITYGAPS_PATCH
#include "vanitygaps.h"
#endif
#if VTCOLORS_PATCH
#if BAR_VTCOLORS_PATCH
#include "vtcolors.h"
#endif
#if WARP_PATCH
@@ -200,49 +226,49 @@
#if ZOOMSWAP_PATCH
#include "zoomswap.h"
#endif
#if XRDB_PATCH && !VTCOLORS_PATCH
#if XRDB_PATCH && !BAR_VTCOLORS_PATCH
#include "xrdb.h"
#endif
/* Layouts */
#if BSTACK_LAYOUT
#include "bstack.h"
#include "layout_bstack.h"
#endif
#if BSTACKHORIZ_LAYOUT
#include "bstackhoriz.h"
#include "layout_bstackhoriz.h"
#endif
#if CENTEREDMASTER_LAYOUT
#include "centeredmaster.h"
#include "layout_centeredmaster.h"
#endif
#if CENTEREDFLOATINGMASTER_LAYOUT
#include "centeredfloatingmaster.h"
#include "layout_centeredfloatingmaster.h"
#endif
#if COLUMNS_LAYOUT
#include "columns.h"
#include "layout_columns.h"
#endif
#if DECK_LAYOUT
#include "deck.h"
#include "layout_deck.h"
#endif
#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT
#include "fibonacci.h"
#include "layout_fibonacci.h"
#endif
#if FLEXTILE_DELUXE_LAYOUT
#include "flextile-deluxe.h"
#include "layout_flextile-deluxe.h"
#endif
#if GAPPLESSGRID_LAYOUT
#include "gapplessgrid.h"
#include "layout_gapplessgrid.h"
#endif
#if GRIDMODE_LAYOUT
#include "grid.h"
#include "layout_grid.h"
#endif
#if HORIZGRID_LAYOUT
#include "horizgrid.h"
#include "layout_horizgrid.h"
#endif
#if MONOCLE_LAYOUT
#include "monocle.h"
#include "layout_monocle.h"
#endif
#if NROWGRID_LAYOUT
#include "nrowgrid.h"
#include "layout_nrowgrid.h"
#endif
#if TILE_LAYOUT
#include "tile.h"
#endif
#include "layout_tile.h"
#endif

View File

@@ -8,11 +8,11 @@ killunsel(const Arg *arg)
for (i = selmon->clients; i; i = i->next) {
if (ISVISIBLE(i) && i != selmon->sel) {
#if SYSTRAY_PATCH
#if BAR_SYSTRAY_PATCH
if (!sendevent(i->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0))
#else
if (!sendevent(i, wmatom[WMDelete]))
#endif // SYSTRAY_PATCH
#endif // BAR_SYSTRAY_PATCH
{
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);

View File

@@ -1,2 +0,0 @@
static int drawstatusbar(Monitor *m, int bh, char* text, int stw, int stp, int align);
static int status2dtextlength(char* stext);

View File

@@ -12,11 +12,11 @@ textw_wosc(char *s)
}
ctmp = *ts;
*ts = '\0';
#if PANGO_PATCH
#if BAR_PANGO_PATCH
sw += drw_font_getwidth(drw, tp, True);
#else
sw += drw_fontset_getwidth(drw, tp);
#endif // PANGO_PATCH
#endif // BAR_PANGO_PATCH
*ts = ctmp;
if (ctmp == '\0')
break;

View File

@@ -30,16 +30,16 @@ loadxrdb()
XRDB_LOAD_COLOR("dwm.selfloatcolor", selfloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
#if STATUSCOLORS_PATCH
#if BAR_STATUSCOLORS_PATCH
XRDB_LOAD_COLOR("dwm.warnfgcolor", warnfgcolor);
XRDB_LOAD_COLOR("dwm.warnbgcolor", warnbgcolor);
XRDB_LOAD_COLOR("dwm.warnbordercolor", warnbordercolor);
#if FLOAT_BORDER_COLOR_PATCH
XRDB_LOAD_COLOR("dwm.warnfloatcolor", warnfloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
#endif // STATUSCOLORS_PATCH
#endif // BAR_STATUSCOLORS_PATCH
#if URGENTBORDER_PATCH || STATUSCOLORS_PATCH
#if URGENTBORDER_PATCH || BAR_STATUSCOLORS_PATCH
XRDB_LOAD_COLOR("dwm.urgfgcolor", urgfgcolor);
XRDB_LOAD_COLOR("dwm.urgbgcolor", urgbgcolor);
XRDB_LOAD_COLOR("dwm.urgbordercolor", urgbordercolor);
@@ -57,14 +57,14 @@ loadxrdb()
#endif // FLOAT_BORDER_COLOR_PATCH
#endif // AWESOMEBAR_PATCH
#if TITLECOLOR_PATCH
#if BAR_TITLECOLOR_PATCH
XRDB_LOAD_COLOR("dwm.titlefgcolor", titlefgcolor);
XRDB_LOAD_COLOR("dwm.titlebgcolor", titlebgcolor);
XRDB_LOAD_COLOR("dwm.titlebordercolor", titlebordercolor);
#if FLOAT_BORDER_COLOR_PATCH
XRDB_LOAD_COLOR("dwm.titlefloatcolor", titlefloatcolor);
#endif // FLOAT_BORDER_COLOR_PATCH
#endif // TITLECOLOR_PATCH
#endif // BAR_TITLECOLOR_PATCH
}
}
}
@@ -79,9 +79,9 @@ xrdb(const Arg *arg)
int i;
for (i = 0; i < LENGTH(colors); i++)
scheme[i] = drw_scm_create(drw, colors[i],
#if ALPHA_PATCH
#if BAR_ALPHA_PATCH
alphas[i],
#endif // ALPHA_PATCH
#endif // BAR_ALPHA_PATCH
#if FLOAT_BORDER_COLOR_PATCH
4
#else