Move bar fields to separate structure
This commit is contained in:
parent
18b5b78d73
commit
2d4fe700f5
34
src/dwm.c
34
src/dwm.c
|
@ -124,24 +124,29 @@ typedef struct {
|
||||||
void (*arrange)(Monitor *);
|
void (*arrange)(Monitor *);
|
||||||
} Layout;
|
} Layout;
|
||||||
|
|
||||||
|
typedef struct Bar {
|
||||||
|
int by;
|
||||||
|
int topbar;
|
||||||
|
Window barwin;
|
||||||
|
} *Bar;
|
||||||
|
|
||||||
struct Monitor {
|
struct Monitor {
|
||||||
Unit unit;
|
Unit unit;
|
||||||
|
Bar bar;
|
||||||
|
|
||||||
Pertag *pertag;
|
Pertag *pertag;
|
||||||
char ltsymbol[16];
|
char ltsymbol[16];
|
||||||
int nmaster;
|
int nmaster;
|
||||||
int num;
|
int num;
|
||||||
int by; /* bar geometry */
|
|
||||||
int mx, my, mw, mh; /* screen size */
|
int mx, my, mw, mh; /* screen size */
|
||||||
int wx, wy, ww, wh; /* window area */
|
int wx, wy, ww, wh; /* window area */
|
||||||
unsigned int seltags;
|
unsigned int seltags;
|
||||||
unsigned int sellt;
|
unsigned int sellt;
|
||||||
unsigned int tagset[2];
|
unsigned int tagset[2];
|
||||||
int topbar;
|
|
||||||
Client *clients;
|
Client *clients;
|
||||||
Client *sel;
|
Client *sel;
|
||||||
Client *stack;
|
Client *stack;
|
||||||
Monitor *next;
|
Monitor *next;
|
||||||
Window barwin;
|
|
||||||
const Layout *lt[2];
|
const Layout *lt[2];
|
||||||
|
|
||||||
// actual state
|
// actual state
|
||||||
|
@ -594,13 +599,16 @@ cleanupmon(Monitor *mon)
|
||||||
for (m = mons; m && m->next != mon; m = m->next);
|
for (m = mons; m && m->next != mon; m = m->next);
|
||||||
m->next = mon->next;
|
m->next = mon->next;
|
||||||
}
|
}
|
||||||
XUnmapWindow(dpy, mon->barwin);
|
|
||||||
XDestroyWindow(dpy, mon->barwin);
|
|
||||||
|
|
||||||
for (int i = 0; i <= TAGS_COUNT; ++i) {
|
for (int i = 0; i <= TAGS_COUNT; ++i) {
|
||||||
UNIT_DELETE(mon->pertag->units[i]);
|
UNIT_DELETE(mon->pertag->units[i]);
|
||||||
}
|
}
|
||||||
free(mon->pertag);
|
free(mon->pertag);
|
||||||
|
{
|
||||||
|
XUnmapWindow(dpy, mon->bar->barwin);
|
||||||
|
XDestroyWindow(dpy, mon->bar->barwin);
|
||||||
|
free(mon->bar);
|
||||||
|
}
|
||||||
UNIT_DELETE(mon->unit);
|
UNIT_DELETE(mon->unit);
|
||||||
free(mon);
|
free(mon);
|
||||||
}
|
}
|
||||||
|
@ -635,9 +643,15 @@ createmon(void)
|
||||||
goto fail_without_unit;
|
goto fail_without_unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(m->bar = malloc(sizeof(struct Bar)))) {
|
||||||
|
goto fail_without_bar;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(m->bar, 0, sizeof(struct Bar));
|
||||||
|
|
||||||
m->tagset[0] = m->tagset[1] = 1;
|
m->tagset[0] = m->tagset[1] = 1;
|
||||||
m->nmaster = settings_get_default_clients_in_master();
|
m->nmaster = settings_get_default_clients_in_master();
|
||||||
m->topbar = settings_get_bar_on_top_by_default();
|
m->bar->topbar = settings_get_bar_on_top_by_default();
|
||||||
m->lt[0] = &layouts[0];
|
m->lt[0] = &layouts[0];
|
||||||
m->lt[1] = &layouts[1 % LENGTH(layouts)];
|
m->lt[1] = &layouts[1 % LENGTH(layouts)];
|
||||||
|
|
||||||
|
@ -682,6 +696,8 @@ fail_other:
|
||||||
}
|
}
|
||||||
free(m->pertag);
|
free(m->pertag);
|
||||||
fail_without_pertag:
|
fail_without_pertag:
|
||||||
|
free(m->bar);
|
||||||
|
fail_without_bar:
|
||||||
UNIT_DELETE(m->unit);
|
UNIT_DELETE(m->unit);
|
||||||
fail_without_unit:
|
fail_without_unit:
|
||||||
free(m);
|
free(m);
|
||||||
|
@ -1011,7 +1027,7 @@ manage(Window w, XWindowAttributes *wa)
|
||||||
c->y = MAX(
|
c->y = MAX(
|
||||||
c->y,
|
c->y,
|
||||||
(
|
(
|
||||||
(c->mon->by == c->mon->my) &&
|
(c->mon->bar->by == c->mon->my) &&
|
||||||
(c->x + (c->w / 2) >= c->mon->wx) &&
|
(c->x + (c->w / 2) >= c->mon->wx) &&
|
||||||
(c->x + (c->w / 2) < c->mon->wx + c->mon->ww)
|
(c->x + (c->w / 2) < c->mon->wx + c->mon->ww)
|
||||||
)
|
)
|
||||||
|
@ -1400,7 +1416,7 @@ restack(Monitor *m)
|
||||||
XRaiseWindow(dpy, m->sel->win);
|
XRaiseWindow(dpy, m->sel->win);
|
||||||
if (m->lt[m->sellt]->arrange) {
|
if (m->lt[m->sellt]->arrange) {
|
||||||
wc.stack_mode = Below;
|
wc.stack_mode = Below;
|
||||||
wc.sibling = m->barwin;
|
wc.sibling = m->bar->barwin;
|
||||||
for (c = m->stack; c; c = c->snext)
|
for (c = m->stack; c; c = c->snext)
|
||||||
if (!c->isfloating && ISVISIBLE(c)) {
|
if (!c->isfloating && ISVISIBLE(c)) {
|
||||||
XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
|
XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
|
||||||
|
@ -2178,7 +2194,7 @@ wintomon(Window w)
|
||||||
if (w == root && getrootptr(&x, &y))
|
if (w == root && getrootptr(&x, &y))
|
||||||
return recttomon(x, y, 1, 1);
|
return recttomon(x, y, 1, 1);
|
||||||
for (m = mons; m; m = m->next)
|
for (m = mons; m; m = m->next)
|
||||||
if (w == m->barwin)
|
if (w == m->bar->barwin)
|
||||||
return m;
|
return m;
|
||||||
if ((c = wintoclient(w)))
|
if ((c = wintoclient(w)))
|
||||||
return c->mon;
|
return c->mon;
|
||||||
|
|
|
@ -12,13 +12,13 @@ createbars(void)
|
||||||
};
|
};
|
||||||
|
|
||||||
for (Monitor *m = mons; m; m = m->next) {
|
for (Monitor *m = mons; m; m = m->next) {
|
||||||
if (m->barwin) continue;
|
if (m->bar->barwin) continue;
|
||||||
|
|
||||||
m->barwin = XCreateWindow(
|
m->bar->barwin = XCreateWindow(
|
||||||
dpy,
|
dpy,
|
||||||
root,
|
root,
|
||||||
m->wx,
|
m->wx,
|
||||||
m->by,
|
m->bar->by,
|
||||||
m->ww,
|
m->ww,
|
||||||
bh,
|
bh,
|
||||||
0,
|
0,
|
||||||
|
@ -29,9 +29,9 @@ createbars(void)
|
||||||
&wa
|
&wa
|
||||||
);
|
);
|
||||||
|
|
||||||
XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
|
XDefineCursor(dpy, m->bar->barwin, cursor[CurNormal]->cursor);
|
||||||
XMapRaised(dpy, m->barwin);
|
XMapRaised(dpy, m->bar->barwin);
|
||||||
XSetClassHint(dpy, m->barwin, &ch);
|
XSetClassHint(dpy, m->bar->barwin, &ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ drawbar(Monitor *m)
|
||||||
drw_rect(drw, x, 0, w, bh, 1, 1);
|
drw_rect(drw, x, 0, w, bh, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
drw_map(drw, m->barwin, 0, 0, m->ww, bh);
|
drw_map(drw, m->bar->barwin, 0, 0, m->ww, bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -92,7 +92,7 @@ updatebar(Monitor *m)
|
||||||
m->show_bar = unit_get_show_bar(m->pertag->units[m->pertag->curtag]);
|
m->show_bar = unit_get_show_bar(m->pertag->units[m->pertag->curtag]);
|
||||||
|
|
||||||
updatebarpos(m);
|
updatebarpos(m);
|
||||||
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
|
XMoveResizeWindow(dpy, selmon->bar->barwin, selmon->wx, selmon->bar->by, selmon->ww, bh);
|
||||||
arrange(m);
|
arrange(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,10 +111,10 @@ updatebarpos(Monitor *m)
|
||||||
m->wh = m->mh;
|
m->wh = m->mh;
|
||||||
if (m->show_bar) {
|
if (m->show_bar) {
|
||||||
m->wh -= bh;
|
m->wh -= bh;
|
||||||
m->by = m->topbar ? m->wy : m->wy + m->wh;
|
m->bar->by = m->bar->topbar ? m->wy : m->wy + m->wh;
|
||||||
m->wy = m->topbar ? m->wy + bh : m->wy;
|
m->wy = m->bar->topbar ? m->wy + bh : m->wy;
|
||||||
} else
|
} else
|
||||||
m->by = -bh;
|
m->bar->by = -bh;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _DWM_BAR_C
|
#endif // _DWM_BAR_C
|
||||||
|
|
|
@ -134,7 +134,7 @@ on_configure_notify(XEvent *e)
|
||||||
drw_resize(drw, sw, bh);
|
drw_resize(drw, sw, bh);
|
||||||
createbars();
|
createbars();
|
||||||
for (m = mons; m; m = m->next) {
|
for (m = mons; m; m = m->next) {
|
||||||
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
|
XMoveResizeWindow(dpy, m->bar->barwin, m->wx, m->bar->by, m->ww, bh);
|
||||||
}
|
}
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
arrange(NULL);
|
arrange(NULL);
|
||||||
|
|
Loading…
Reference in New Issue