client.c
changeset 43 989178822938
parent 34 cd30cce52b78
child 44 a36f95a4841a
equal deleted inserted replaced
42:040a7074d23c 43:989178822938
     7 #include <stdlib.h>
     7 #include <stdlib.h>
     8 #include <string.h>
     8 #include <string.h>
     9 #include <X11/Xatom.h>
     9 #include <X11/Xatom.h>
    10 #include <X11/Xutil.h>
    10 #include <X11/Xutil.h>
    11 
    11 
    12 #include "wm.h"
    12 #include "dwm.h"
    13 
    13 
    14 static void floating(void);
    14 static void floating(void);
    15 static void tiling(void);
    15 static void tiling(void);
    16 static void (*arrange)(void) = tiling;
    16 static void (*arrange)(void) = tiling;
    17 
    17 
   123 	int i;
   123 	int i;
   124 
   124 
   125 	c->tw = 0;
   125 	c->tw = 0;
   126 	for(i = 0; i < TLast; i++)
   126 	for(i = 0; i < TLast; i++)
   127 		if(c->tags[i])
   127 		if(c->tags[i])
   128 			c->tw += textw(&dc.font, c->tags[i]) + dc.font.height;
   128 			c->tw += textw(c->tags[i]) + dc.font.height;
   129 	c->tw += textw(&dc.font, c->name) + dc.font.height;
   129 	c->tw += textw(c->name) + dc.font.height;
   130 	if(c->tw > c->w)
   130 	if(c->tw > c->w)
   131 		c->tw = c->w + 2;
   131 		c->tw = c->w + 2;
   132 	c->tx = c->x + c->w - c->tw + 2;
   132 	c->tx = c->x + c->w - c->tw + 2;
   133 	c->ty = c->y;
   133 	c->ty = c->y;
   134 	XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
   134 	XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
   224 	if(*l)
   224 	if(*l)
   225 		*l = c->snext;
   225 		*l = c->snext;
   226 	c->snext = stack;
   226 	c->snext = stack;
   227 	stack = c;
   227 	stack = c;
   228 	if(old && old != c) {
   228 	if(old && old != c) {
       
   229 		XSetWindowBorder(dpy, old->win, dc.bg);
   229 		XMapWindow(dpy, old->title);
   230 		XMapWindow(dpy, old->title);
   230 		draw_client(old);
   231 		draw_client(old);
   231 	}
   232 	}
   232 	XUnmapWindow(dpy, c->title);
   233 	XUnmapWindow(dpy, c->title);
       
   234 	XSetWindowBorder(dpy, c->win, dc.fg);
   233 	draw_client(c);
   235 	draw_client(c);
   234 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   236 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   235 	XFlush(dpy);
   237 	XFlush(dpy);
   236 }
   238 }
   237 
   239 
   248 	c->tw = c->w = wa->width;
   250 	c->tw = c->w = wa->width;
   249 	c->h = wa->height;
   251 	c->h = wa->height;
   250 	c->th = th;
   252 	c->th = th;
   251 	c->border = 1;
   253 	c->border = 1;
   252 	update_size(c);
   254 	update_size(c);
   253 	XSetWindowBorderWidth(dpy, c->win, 1);
       
   254 	XSetWindowBorder(dpy, c->win, dc.border);
       
   255 	XSelectInput(dpy, c->win,
   255 	XSelectInput(dpy, c->win,
   256 			StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
   256 			StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
   257 	XGetTransientForHint(dpy, c->win, &c->trans);
   257 	XGetTransientForHint(dpy, c->win, &c->trans);
   258 	twa.override_redirect = 1;
   258 	twa.override_redirect = 1;
   259 	twa.background_pixmap = ParentRelative;
   259 	twa.background_pixmap = ParentRelative;
   267 
   267 
   268 	update_name(c);
   268 	update_name(c);
   269 	for(l=&clients; *l; l=&(*l)->next);
   269 	for(l=&clients; *l; l=&(*l)->next);
   270 	c->next = *l; /* *l == nil */
   270 	c->next = *l; /* *l == nil */
   271 	*l = c;
   271 	*l = c;
       
   272 	XSetWindowBorderWidth(dpy, c->win, 1);
   272 	XMapRaised(dpy, c->win);
   273 	XMapRaised(dpy, c->win);
   273 	XMapRaised(dpy, c->title);
   274 	XMapRaised(dpy, c->title);
   274 	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
   275 	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
   275 			GrabModeAsync, GrabModeSync, None, None);
   276 			GrabModeAsync, GrabModeSync, None, None);
   276 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
   277 	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
   433 
   434 
   434 	dc.w = 0;
   435 	dc.w = 0;
   435 	for(i = 0; i < TLast; i++) {
   436 	for(i = 0; i < TLast; i++) {
   436 		if(c->tags[i]) {
   437 		if(c->tags[i]) {
   437 			dc.x += dc.w;
   438 			dc.x += dc.w;
   438 			dc.w = textw(&dc.font, c->tags[i]) + dc.font.height;
   439 			dc.w = textw(c->tags[i]) + dc.font.height;
   439 			draw(True, c->tags[i]);
   440 			draw(True, c->tags[i]);
   440 		}
   441 		}
   441 	}
   442 	}
   442 	dc.x += dc.w;
   443 	dc.x += dc.w;
   443 	dc.w = textw(&dc.font, c->name) + dc.font.height;
   444 	dc.w = textw(c->name) + dc.font.height;
   444 	draw(True, c->name);
   445 	draw(True, c->name);
   445 	XCopyArea(dpy, dc.drawable, c->title, dc.gc,
   446 	XCopyArea(dpy, dc.drawable, c->title, dc.gc,
   446 			0, 0, c->tw, c->th, 0, 0);
   447 			0, 0, c->tw, c->th, 0, 0);
   447 	XFlush(dpy);
   448 	XFlush(dpy);
   448 }
   449 }