dwm.c
changeset 1195 33ba827ee84e
parent 1194 f939086fa41d
child 1196 58a67fab8143
equal deleted inserted replaced
1194:f939086fa41d 1195:33ba827ee84e
   593 	h = dc.font.ascent + dc.font.descent;
   593 	h = dc.font.ascent + dc.font.descent;
   594 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
   594 	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
   595 	x = dc.x + (h / 2);
   595 	x = dc.x + (h / 2);
   596 	/* shorten text if necessary */
   596 	/* shorten text if necessary */
   597 	for(; len && (w = textnw(buf, len)) > dc.w - h; len--);
   597 	for(; len && (w = textnw(buf, len)) > dc.w - h; len--);
   598 	if (!len)
   598 	if(!len)
   599 		return;
   599 		return;
   600 	if(len < olen) {
   600 	if(len < olen) {
   601 		if(len > 1)
   601 		if(len > 1)
   602 			buf[len - 1] = '.';
   602 			buf[len - 1] = '.';
   603 		if(len > 2)
   603 		if(len > 2)
   780 void
   780 void
   781 grabbuttons(Client *c, Bool focused) {
   781 grabbuttons(Client *c, Bool focused) {
   782 	int i, j;
   782 	int i, j;
   783 	unsigned int buttons[]   = { Button1, Button2, Button3 };
   783 	unsigned int buttons[]   = { Button1, Button2, Button3 };
   784 	unsigned int modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask,
   784 	unsigned int modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask,
   785 	                             MODKEY|numlockmask|LockMask} ;
   785 				MODKEY|numlockmask|LockMask} ;
   786 
   786 
   787 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   787 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   788 	if(focused)
   788 	if(focused)
   789 		for(i = 0; i < LENGTH(buttons); i++)
   789 		for(i = 0; i < LENGTH(buttons); i++)
   790 			for(j = 0; j < LENGTH(modifiers); j++)
   790 			for(j = 0; j < LENGTH(modifiers); j++)
   791 				XGrabButton(dpy, buttons[i], modifiers[j], c->win, False,
   791 				XGrabButton(dpy, buttons[i], modifiers[j], c->win, False,
   792 				            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   792 					BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   793 	else
   793 	else
   794 		XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
   794 		XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
   795 		            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   795 			BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   796 }
   796 }
   797 
   797 
   798 void
   798 void
   799 grabkeys(void)  {
   799 grabkeys(void) {
   800 	unsigned int i, j;
   800 	unsigned int i, j;
   801 	KeyCode code;
   801 	KeyCode code;
   802 	XModifierKeymap *modmap;
   802 	XModifierKeymap *modmap;
   803 
   803 
   804 	/* init modifier map */
   804 	/* init modifier map */
  1039 void
  1039 void
  1040 monocle(void) {
  1040 monocle(void) {
  1041 	Client *c;
  1041 	Client *c;
  1042 
  1042 
  1043 	for(c = clients; c; c = c->next)
  1043 	for(c = clients; c; c = c->next)
  1044 		if((lt->isfloating || !c->isfloating) &&  isvisible(c, NULL))
  1044 		if((lt->isfloating || !c->isfloating) && isvisible(c, NULL))
  1045 			resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, RESIZEHINTS);
  1045 			resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, RESIZEHINTS);
  1046 }
  1046 }
  1047 
  1047 
  1048 void
  1048 void
  1049 movemouse(Client *c) {
  1049 movemouse(Client *c) {
  1053 	XEvent ev;
  1053 	XEvent ev;
  1054 
  1054 
  1055 	ocx = nx = c->x;
  1055 	ocx = nx = c->x;
  1056 	ocy = ny = c->y;
  1056 	ocy = ny = c->y;
  1057 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
  1057 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
  1058 			None, cursor[CurMove], CurrentTime) != GrabSuccess)
  1058 	None, cursor[CurMove], CurrentTime) != GrabSuccess)
  1059 		return;
  1059 		return;
  1060 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
  1060 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
  1061 	for(;;) {
  1061 	for(;;) {
  1062 		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
  1062 		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
  1063 		switch (ev.type) {
  1063 		switch (ev.type) {
  1219 	XEvent ev;
  1219 	XEvent ev;
  1220 
  1220 
  1221 	ocx = c->x;
  1221 	ocx = c->x;
  1222 	ocy = c->y;
  1222 	ocy = c->y;
  1223 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
  1223 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
  1224 			None, cursor[CurResize], CurrentTime) != GrabSuccess)
  1224 	None, cursor[CurResize], CurrentTime) != GrabSuccess)
  1225 		return;
  1225 		return;
  1226 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
  1226 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
  1227 	for(;;) {
  1227 	for(;;) {
  1228 		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev);
  1228 		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev);
  1229 		switch(ev.type) {
  1229 		switch(ev.type) {
  1349 
  1349 
  1350 	wins = NULL;
  1350 	wins = NULL;
  1351 	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
  1351 	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
  1352 		for(i = 0; i < num; i++) {
  1352 		for(i = 0; i < num; i++) {
  1353 			if(!XGetWindowAttributes(dpy, wins[i], &wa)
  1353 			if(!XGetWindowAttributes(dpy, wins[i], &wa)
  1354 					|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
  1354 			|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
  1355 				continue;
  1355 				continue;
  1356 			if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
  1356 			if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
  1357 				manage(wins[i], &wa);
  1357 				manage(wins[i], &wa);
  1358 		}
  1358 		}
  1359 		for(i = 0; i < num; i++) { /* now the transients */
  1359 		for(i = 0; i < num; i++) { /* now the transients */
  1360 			if(!XGetWindowAttributes(dpy, wins[i], &wa))
  1360 			if(!XGetWindowAttributes(dpy, wins[i], &wa))
  1361 				continue;
  1361 				continue;
  1362 			if(XGetTransientForHint(dpy, wins[i], &d1)
  1362 			if(XGetTransientForHint(dpy, wins[i], &d1)
  1363 					&& (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
  1363 			&& (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
  1364 				manage(wins[i], &wa);
  1364 				manage(wins[i], &wa);
  1365 		}
  1365 		}
  1366 	}
  1366 	}
  1367 	if(wins)
  1367 	if(wins)
  1368 		XFree(wins);
  1368 		XFree(wins);
  1477 	wa.override_redirect = 1;
  1477 	wa.override_redirect = 1;
  1478 	wa.background_pixmap = ParentRelative;
  1478 	wa.background_pixmap = ParentRelative;
  1479 	wa.event_mask = ButtonPressMask|ExposureMask;
  1479 	wa.event_mask = ButtonPressMask|ExposureMask;
  1480 
  1480 
  1481 	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
  1481 	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
  1482 				CopyFromParent, DefaultVisual(dpy, screen),
  1482 			CopyFromParent, DefaultVisual(dpy, screen),
  1483 				CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
  1483 			CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
  1484 	XDefineCursor(dpy, barwin, cursor[CurNormal]);
  1484 	XDefineCursor(dpy, barwin, cursor[CurNormal]);
  1485 	XMapRaised(dpy, barwin);
  1485 	XMapRaised(dpy, barwin);
  1486 	strcpy(stext, "dwm-"VERSION);
  1486 	strcpy(stext, "dwm-"VERSION);
  1487 	drawbar();
  1487 	drawbar();
  1488 
  1488 
  1702 		unmanage(c);
  1702 		unmanage(c);
  1703 }
  1703 }
  1704 
  1704 
  1705 void
  1705 void
  1706 updatebar(void) {
  1706 updatebar(void) {
  1707 
       
  1708 	if(dc.drawable != 0)
  1707 	if(dc.drawable != 0)
  1709 		XFreePixmap(dpy, dc.drawable);
  1708 		XFreePixmap(dpy, dc.drawable);
  1710 	dc.drawable = XCreatePixmap(dpy, root, bw, bh, DefaultDepth(dpy, screen));
  1709 	dc.drawable = XCreatePixmap(dpy, root, bw, bh, DefaultDepth(dpy, screen));
  1711 	XMoveResizeWindow(dpy, barwin, bx, by, bw, bh);
  1710 	XMoveResizeWindow(dpy, barwin, bx, by, bw, bh);
  1712 }
  1711 }
  1837 	|| (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
  1836 	|| (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
  1838 	|| (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
  1837 	|| (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
  1839 	|| (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
  1838 	|| (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
  1840 		return 0;
  1839 		return 0;
  1841 	fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
  1840 	fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
  1842 		ee->request_code, ee->error_code);
  1841 			ee->request_code, ee->error_code);
  1843 	return xerrorxlib(dpy, ee); /* may call exit */
  1842 	return xerrorxlib(dpy, ee); /* may call exit */
  1844 }
  1843 }
  1845 
  1844 
  1846 int
  1845 int
  1847 xerrordummy(Display *dpy, XErrorEvent *ee) {
  1846 xerrordummy(Display *dpy, XErrorEvent *ee) {