dwm.c
changeset 1236 523ba822927f
parent 1235 13f86ee1a8e6
child 1237 7af79b380a77
equal deleted inserted replaced
1235:13f86ee1a8e6 1236:523ba822927f
    50 #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask))
    50 #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask))
    51 #define LENGTH(x)       (sizeof x / sizeof x[0])
    51 #define LENGTH(x)       (sizeof x / sizeof x[0])
    52 #define MAXTAGLEN       16
    52 #define MAXTAGLEN       16
    53 #define MOUSEMASK       (BUTTONMASK|PointerMotionMask)
    53 #define MOUSEMASK       (BUTTONMASK|PointerMotionMask)
    54 #define TAGMASK         ((int)((1LL << LENGTH(tags)) - 1))
    54 #define TAGMASK         ((int)((1LL << LENGTH(tags)) - 1))
       
    55 #define TEXTW(x)        (textnw(x, strlen(x)) + dc.font.height)
    55 #define VISIBLE(x)      ((x)->tags & tagset[seltags])
    56 #define VISIBLE(x)      ((x)->tags & tagset[seltags])
    56 
    57 
    57 /* enums */
    58 /* enums */
    58 enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
    59 enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
    59 enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
    60 enum { ColBorder, ColFG, ColBG, ColLast };              /* color */
   167 void setmfact(const void *arg);
   168 void setmfact(const void *arg);
   168 void setup(void);
   169 void setup(void);
   169 void spawn(const void *arg);
   170 void spawn(const void *arg);
   170 void tag(const void *arg);
   171 void tag(const void *arg);
   171 uint textnw(const char *text, uint len);
   172 uint textnw(const char *text, uint len);
   172 uint textw(const char *text);
       
   173 void tile(void);
   173 void tile(void);
   174 void tileresize(Client *c, int x, int y, int w, int h);
   174 void tileresize(Client *c, int x, int y, int w, int h);
   175 void togglebar(const void *arg);
   175 void togglebar(const void *arg);
   176 void togglefloating(const void *arg);
   176 void togglefloating(const void *arg);
   177 void togglelayout(const void *arg);
   177 void togglelayout(const void *arg);
   303 	XButtonPressedEvent *ev = &e->xbutton;
   303 	XButtonPressedEvent *ev = &e->xbutton;
   304 
   304 
   305 	if(ev->window == barwin) {
   305 	if(ev->window == barwin) {
   306 		x = 0;
   306 		x = 0;
   307 		for(i = 0; i < LENGTH(tags); i++) {
   307 		for(i = 0; i < LENGTH(tags); i++) {
   308 			x += textw(tags[i]);
   308 			x += TEXTW(tags[i]);
   309 			if(ev->x < x) {
   309 			if(ev->x < x) {
   310 				mask = 1 << i;
   310 				mask = 1 << i;
   311 				if(ev->button == Button1) {
   311 				if(ev->button == Button1) {
   312 					if(ev->state & MODKEY)
   312 					if(ev->state & MODKEY)
   313 						tag(&mask);
   313 						tag(&mask);
   489 	Client *c;
   489 	Client *c;
   490 
   490 
   491 	dc.x = 0;
   491 	dc.x = 0;
   492 	for(c = stack; c && !VISIBLE(c); c = c->snext);
   492 	for(c = stack; c && !VISIBLE(c); c = c->snext);
   493 	for(i = 0; i < LENGTH(tags); i++) {
   493 	for(i = 0; i < LENGTH(tags); i++) {
   494 		dc.w = textw(tags[i]);
   494 		dc.w = TEXTW(tags[i]);
   495 		if(tagset[seltags] & 1 << i) {
   495 		if(tagset[seltags] & 1 << i) {
   496 			drawtext(tags[i], dc.sel, isurgent(i));
   496 			drawtext(tags[i], dc.sel, isurgent(i));
   497 			drawsquare(c && c->tags & 1 << i, isoccupied(i), isurgent(i), dc.sel);
   497 			drawsquare(c && c->tags & 1 << i, isoccupied(i), isurgent(i), dc.sel);
   498 		}
   498 		}
   499 		else {
   499 		else {
   507 		drawtext(lt->symbol, dc.norm, domax);
   507 		drawtext(lt->symbol, dc.norm, domax);
   508 		x = dc.x + dc.w;
   508 		x = dc.x + dc.w;
   509 	}
   509 	}
   510 	else
   510 	else
   511 		x = dc.x;
   511 		x = dc.x;
   512 	dc.w = textw(stext);
   512 	dc.w = TEXTW(stext);
   513 	dc.x = bw - dc.w;
   513 	dc.x = bw - dc.w;
   514 	if(dc.x < x) {
   514 	if(dc.x < x) {
   515 		dc.x = x;
   515 		dc.x = x;
   516 		dc.w = bw - x;
   516 		dc.w = bw - x;
   517 	}
   517 	}
  1363 	if(!dc.font.set)
  1363 	if(!dc.font.set)
  1364 		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
  1364 		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
  1365 
  1365 
  1366 	/* init bar */
  1366 	/* init bar */
  1367 	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
  1367 	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
  1368 		w = textw(layouts[i].symbol);
  1368 		w = TEXTW(layouts[i].symbol);
  1369 		blw = MAX(blw, w);
  1369 		blw = MAX(blw, w);
  1370 	}
  1370 	}
  1371 
  1371 
  1372 	wa.override_redirect = 1;
  1372 	wa.override_redirect = 1;
  1373 	wa.background_pixmap = ParentRelative;
  1373 	wa.background_pixmap = ParentRelative;
  1433 	if(dc.font.set) {
  1433 	if(dc.font.set) {
  1434 		XmbTextExtents(dc.font.set, text, len, NULL, &r);
  1434 		XmbTextExtents(dc.font.set, text, len, NULL, &r);
  1435 		return r.width;
  1435 		return r.width;
  1436 	}
  1436 	}
  1437 	return XTextWidth(dc.font.xfont, text, len);
  1437 	return XTextWidth(dc.font.xfont, text, len);
  1438 }
       
  1439 
       
  1440 uint
       
  1441 textw(const char *text) {
       
  1442 	return textnw(text, strlen(text)) + dc.font.height;
       
  1443 }
  1438 }
  1444 
  1439 
  1445 void
  1440 void
  1446 tile(void) {
  1441 tile(void) {
  1447 	int x, y, h, w;
  1442 	int x, y, h, w;