Skip to content
This repository has been archived by the owner on Oct 4, 2018. It is now read-only.

Commit

Permalink
implemented dynamic layout symbol stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
garbeam committed Sep 16, 2009
1 parent 1bf6125 commit 30c3627
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 27 deletions.
15 changes: 7 additions & 8 deletions dwm.1
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@ Windows are grouped by tags. Each window can be tagged with one or multiple
tags. Selecting certain tags displays all windows with these tags.
.P
Each screen contains a small status bar which displays all available tags, the
layout, the number of visible windows, the title of the focused window, and the
text read from the root window name property, if the screen is focused. A
floating window is indicated with an empty square and a maximised floating
window is indicated with a filled square before the windows title. The
selected tags are indicated with a different color. The tags of the focused
window are indicated with a filled square in the top left corner. The tags
which are applied to one or more windows are indicated with an empty square in
the top left corner.
layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square
before the windows title. The selected tags are indicated with a different
color. The tags of the focused window are indicated with a filled square in the
top left corner. The tags which are applied to one or more windows are
indicated with an empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS
Expand Down
37 changes: 18 additions & 19 deletions dwm.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ typedef struct {
} Layout;

struct Monitor {
const char *ltsymbol;
float mfact;
int num;
int by; /* bar geometry */
Expand Down Expand Up @@ -238,7 +239,7 @@ static void zoom(const Arg *arg);

/* variables */
static const char broken[] = "broken";
static char stext[256], ntext[8];
static char stext[256];
static int screen;
static int sw, sh; /* X display screen geometry width, height */
static int bh, blw = 0; /* bar geometry */
Expand Down Expand Up @@ -384,6 +385,7 @@ arrange(void) {
showhide(m->stack);
focus(NULL);
for(m = mons; m; m = m->next) {
m->ltsymbol = m->lt[m->sellt]->symbol;
if(m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
restack(m);
Expand Down Expand Up @@ -649,13 +651,11 @@ dirtomon(int dir) {
void
drawbar(Monitor *m) {
int x;
unsigned int i, n = 0, occ = 0, urg = 0;
unsigned int i, occ = 0, urg = 0;
unsigned long *col;
Client *c;

for(c = m->clients; c; c = c->next) {
if(ISVISIBLE(c))
n++;
occ |= c->tags;
if(c->isurgent)
urg |= c->tags;
Expand All @@ -669,15 +669,10 @@ drawbar(Monitor *m) {
occ & 1 << i, urg & 1 << i, col);
dc.x += dc.w;
}
if(blw > 0) {
dc.w = blw;
drawtext(m->lt[m->sellt]->symbol, dc.norm, False);
dc.x += dc.w;
}
snprintf(ntext, sizeof ntext, "%u", n);
dc.w = TEXTW(ntext);
drawtext(ntext, dc.norm, False);
x = (dc.x += dc.w);
dc.w = blw = TEXTW(m->ltsymbol);
drawtext(m->ltsymbol, dc.norm, False);
dc.x += dc.w;
x = dc.x;
if(m == selmon) { /* status is only drawn on selected monitor */
dc.w = TEXTW(stext);
dc.x = m->ww - dc.w;
Expand Down Expand Up @@ -1137,8 +1132,17 @@ maprequest(XEvent *e) {

void
monocle(Monitor *m) {
static char ntext[8];
unsigned int n = 0;
Client *c;

for(c = m->clients; c; c = c->next)
if(ISVISIBLE(c))
n++;
if(n > 0) { /* override layout symbol */
snprintf(ntext, sizeof ntext, "[%d]", n);
m->ltsymbol = ntext;
}
for(c = nexttiled(m->clients); c; c = nexttiled(c->next))
resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);
}
Expand Down Expand Up @@ -1431,8 +1435,6 @@ setmfact(const Arg *arg) {

void
setup(void) {
unsigned int i;
int w;
XSetWindowAttributes wa;

/* clean up any zombies immediately */
Expand Down Expand Up @@ -1469,10 +1471,6 @@ setup(void) {
if(!dc.font.set)
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
/* init bars */
for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
w = TEXTW(layouts[i].symbol);
blw = MAX(blw, w);
}
updatebars();
updatestatus();
/* EWMH support per view */
Expand Down Expand Up @@ -1752,6 +1750,7 @@ updategeom(void) {
m->topbar = topbar;
m->lt[0] = &layouts[0];
m->lt[1] = &layouts[1 % LENGTH(layouts)];
m->ltsymbol = layouts[0].symbol;
updatebarpos(m);
}
/* reassign left over clients of disappeared monitors */
Expand Down

0 comments on commit 30c3627

Please sign in to comment.