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