|  |  | @ -522,7 +522,7 @@ clientmessage(XEvent *e) | 
			
		
	
		
			
				
					|  |  |  | if (cme->data.l[1] == netatom[NetWMFullscreen] | 
			
		
	
		
			
				
					|  |  |  | || cme->data.l[2] == netatom[NetWMFullscreen]) | 
			
		
	
		
			
				
					|  |  |  | setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */ | 
			
		
	
		
			
				
					|  |  |  | || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); | 
			
		
	
		
			
				
					|  |  |  | || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); | 
			
		
	
		
			
				
					|  |  |  | } else if (cme->message_type == netatom[NetActiveWindow]) { | 
			
		
	
		
			
				
					|  |  |  | if (c != selmon->sel && !c->isurgent) | 
			
		
	
		
			
				
					|  |  |  | seturgent(c, 1); | 
			
		
	
	
		
			
				
					|  |  | @ -721,8 +721,8 @@ drawbar(Monitor *m) | 
			
		
	
		
			
				
					|  |  |  | drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); | 
			
		
	
		
			
				
					|  |  |  | if (occ & 1 << i) | 
			
		
	
		
			
				
					|  |  |  | drw_rect(drw, x + boxs, boxs, boxw, boxw, | 
			
		
	
		
			
				
					|  |  |  | m == selmon && selmon->sel && selmon->sel->tags & 1 << i, | 
			
		
	
		
			
				
					|  |  |  | urg & 1 << i); | 
			
		
	
		
			
				
					|  |  |  | m == selmon && selmon->sel && selmon->sel->tags & 1 << i, | 
			
		
	
		
			
				
					|  |  |  | urg & 1 << i); | 
			
		
	
		
			
				
					|  |  |  | x += w; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | w = blw = TEXTW(m->ltsymbol); | 
			
		
	
	
		
			
				
					|  |  | @ -865,7 +865,7 @@ getatomprop(Client *c, Atom prop) | 
			
		
	
		
			
				
					|  |  |  | Atom da, atom = None; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM, | 
			
		
	
		
			
				
					|  |  |  | &da, &di, &dl, &dl, &p) == Success && p) { | 
			
		
	
		
			
				
					|  |  |  | &da, &di, &dl, &dl, &p) == Success && p) { | 
			
		
	
		
			
				
					|  |  |  | atom = *(Atom *)p; | 
			
		
	
		
			
				
					|  |  |  | XFree(p); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -892,7 +892,7 @@ getstate(Window w) | 
			
		
	
		
			
				
					|  |  |  | Atom real; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], | 
			
		
	
		
			
				
					|  |  |  | &real, &format, &n, &extra, (unsigned char **)&p) != Success) | 
			
		
	
		
			
				
					|  |  |  | &real, &format, &n, &extra, (unsigned char **)&p) != Success) | 
			
		
	
		
			
				
					|  |  |  | return -1; | 
			
		
	
		
			
				
					|  |  |  | if (n != 0) | 
			
		
	
		
			
				
					|  |  |  | result = *p; | 
			
		
	
	
		
			
				
					|  |  | @ -936,14 +936,14 @@ grabbuttons(Client *c, int focused) | 
			
		
	
		
			
				
					|  |  |  | XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 
			
		
	
		
			
				
					|  |  |  | if (!focused) | 
			
		
	
		
			
				
					|  |  |  | XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, | 
			
		
	
		
			
				
					|  |  |  | BUTTONMASK, GrabModeSync, GrabModeSync, None, None); | 
			
		
	
		
			
				
					|  |  |  | BUTTONMASK, GrabModeSync, GrabModeSync, None, None); | 
			
		
	
		
			
				
					|  |  |  | for (i = 0; i < LENGTH(buttons); i++) | 
			
		
	
		
			
				
					|  |  |  | if (buttons[i].click == ClkClientWin) | 
			
		
	
		
			
				
					|  |  |  | for (j = 0; j < LENGTH(modifiers); j++) | 
			
		
	
		
			
				
					|  |  |  | XGrabButton(dpy, buttons[i].button, | 
			
		
	
		
			
				
					|  |  |  | buttons[i].mask | modifiers[j], | 
			
		
	
		
			
				
					|  |  |  | c->win, False, BUTTONMASK, | 
			
		
	
		
			
				
					|  |  |  | GrabModeAsync, GrabModeSync, None, None); | 
			
		
	
		
			
				
					|  |  |  | buttons[i].mask | modifiers[j], | 
			
		
	
		
			
				
					|  |  |  | c->win, False, BUTTONMASK, | 
			
		
	
		
			
				
					|  |  |  | GrabModeAsync, GrabModeSync, None, None); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -961,7 +961,7 @@ grabkeys(void) | 
			
		
	
		
			
				
					|  |  |  | if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) | 
			
		
	
		
			
				
					|  |  |  | for (j = 0; j < LENGTH(modifiers); j++) | 
			
		
	
		
			
				
					|  |  |  | XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, | 
			
		
	
		
			
				
					|  |  |  | True, GrabModeAsync, GrabModeAsync); | 
			
		
	
		
			
				
					|  |  |  | True, GrabModeAsync, GrabModeAsync); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -1048,7 +1048,7 @@ manage(Window w, XWindowAttributes *wa) | 
			
		
	
		
			
				
					|  |  |  | c->x = MAX(c->x, c->mon->mx); | 
			
		
	
		
			
				
					|  |  |  | /* only fix client y-offset, if the client center might cover the bar */ | 
			
		
	
		
			
				
					|  |  |  | c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) | 
			
		
	
		
			
				
					|  |  |  | && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); | 
			
		
	
		
			
				
					|  |  |  | && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); | 
			
		
	
		
			
				
					|  |  |  | c->bw = borderpx; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | wc.border_width = c->bw; | 
			
		
	
	
		
			
				
					|  |  | @ -1067,7 +1067,7 @@ manage(Window w, XWindowAttributes *wa) | 
			
		
	
		
			
				
					|  |  |  | attach(c); | 
			
		
	
		
			
				
					|  |  |  | attachstack(c); | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ | 
			
		
	
		
			
				
					|  |  |  | setclientstate(c, NormalState); | 
			
		
	
		
			
				
					|  |  |  | if (c->mon == selmon) | 
			
		
	
	
		
			
				
					|  |  | @ -1151,7 +1151,7 @@ movemouse(const Arg *arg) | 
			
		
	
		
			
				
					|  |  |  | ocx = c->x; | 
			
		
	
		
			
				
					|  |  |  | ocy = c->y; | 
			
		
	
		
			
				
					|  |  |  | if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, | 
			
		
	
		
			
				
					|  |  |  | None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) | 
			
		
	
		
			
				
					|  |  |  | None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) | 
			
		
	
		
			
				
					|  |  |  | return; | 
			
		
	
		
			
				
					|  |  |  | if (!getrootptr(&x, &y)) | 
			
		
	
		
			
				
					|  |  |  | return; | 
			
		
	
	
		
			
				
					|  |  | @ -1226,7 +1226,7 @@ propertynotify(XEvent *e) | 
			
		
	
		
			
				
					|  |  |  | default: break; | 
			
		
	
		
			
				
					|  |  |  | case XA_WM_TRANSIENT_FOR: | 
			
		
	
		
			
				
					|  |  |  | if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && | 
			
		
	
		
			
				
					|  |  |  | (c->isfloating = (wintoclient(trans)) != NULL)) | 
			
		
	
		
			
				
					|  |  |  | (c->isfloating = (wintoclient(trans)) != NULL)) | 
			
		
	
		
			
				
					|  |  |  | arrange(c->mon); | 
			
		
	
		
			
				
					|  |  |  | break; | 
			
		
	
		
			
				
					|  |  |  | case XA_WM_NORMAL_HINTS: | 
			
		
	
	
		
			
				
					|  |  | @ -1306,7 +1306,7 @@ resizemouse(const Arg *arg) | 
			
		
	
		
			
				
					|  |  |  | ocx = c->x; | 
			
		
	
		
			
				
					|  |  |  | ocy = c->y; | 
			
		
	
		
			
				
					|  |  |  | if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, | 
			
		
	
		
			
				
					|  |  |  | None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) | 
			
		
	
		
			
				
					|  |  |  | None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) | 
			
		
	
		
			
				
					|  |  |  | return; | 
			
		
	
		
			
				
					|  |  |  | XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); | 
			
		
	
		
			
				
					|  |  |  | do { | 
			
		
	
	
		
			
				
					|  |  | @ -1431,7 +1431,7 @@ setclientstate(Client *c, long state) | 
			
		
	
		
			
				
					|  |  |  | long data[] = { state, None }; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *)data, 2); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *)data, 2); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | int | 
			
		
	
	
		
			
				
					|  |  | @ -1465,8 +1465,8 @@ setfocus(Client *c) | 
			
		
	
		
			
				
					|  |  |  | if (!c->neverfocus) { | 
			
		
	
		
			
				
					|  |  |  | XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, root, netatom[NetActiveWindow], | 
			
		
	
		
			
				
					|  |  |  | XA_WINDOW, 32, PropModeReplace, | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | XA_WINDOW, 32, PropModeReplace, | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | sendevent(c, wmatom[WMTakeFocus]); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -1476,7 +1476,7 @@ setfullscreen(Client *c, int fullscreen) | 
			
		
	
		
			
				
					|  |  |  | { | 
			
		
	
		
			
				
					|  |  |  | if (fullscreen && !c->isfullscreen) { | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1); | 
			
		
	
		
			
				
					|  |  |  | c->isfullscreen = 1; | 
			
		
	
		
			
				
					|  |  |  | c->oldstate = c->isfloating; | 
			
		
	
		
			
				
					|  |  |  | c->oldbw = c->bw; | 
			
		
	
	
		
			
				
					|  |  | @ -1486,7 +1486,7 @@ setfullscreen(Client *c, int fullscreen) | 
			
		
	
		
			
				
					|  |  |  | XRaiseWindow(dpy, c->win); | 
			
		
	
		
			
				
					|  |  |  | } else if (!fullscreen && c->isfullscreen){ | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char*)0, 0); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char*)0, 0); | 
			
		
	
		
			
				
					|  |  |  | c->isfullscreen = 0; | 
			
		
	
		
			
				
					|  |  |  | c->isfloating = c->oldstate; | 
			
		
	
		
			
				
					|  |  |  | c->bw = c->oldbw; | 
			
		
	
	
		
			
				
					|  |  | @ -1578,20 +1578,20 @@ setup(void) | 
			
		
	
		
			
				
					|  |  |  | /* supporting window for NetWMCheck */ | 
			
		
	
		
			
				
					|  |  |  | wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0); | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) &wmcheckwin, 1); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) &wmcheckwin, 1); | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) "dwm", 4); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) "dwm", 4); | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) &wmcheckwin, 1); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) &wmcheckwin, 1); | 
			
		
	
		
			
				
					|  |  |  | /* EWMH support per view */ | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) netatom, NetLast); | 
			
		
	
		
			
				
					|  |  |  | PropModeReplace, (unsigned char *) netatom, NetLast); | 
			
		
	
		
			
				
					|  |  |  | XDeleteProperty(dpy, root, netatom[NetClientList]); | 
			
		
	
		
			
				
					|  |  |  | /* select events */ | 
			
		
	
		
			
				
					|  |  |  | wa.cursor = cursor[CurNormal]->cursor; | 
			
		
	
		
			
				
					|  |  |  | wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask | 
			
		
	
		
			
				
					|  |  |  | |ButtonPressMask|PointerMotionMask|EnterWindowMask | 
			
		
	
		
			
				
					|  |  |  | |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask; | 
			
		
	
		
			
				
					|  |  |  | |ButtonPressMask|PointerMotionMask|EnterWindowMask | 
			
		
	
		
			
				
					|  |  |  | |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask; | 
			
		
	
		
			
				
					|  |  |  | XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); | 
			
		
	
		
			
				
					|  |  |  | XSelectInput(dpy, root, wa.event_mask); | 
			
		
	
		
			
				
					|  |  |  | grabkeys(); | 
			
		
	
	
		
			
				
					|  |  | @ -1717,7 +1717,7 @@ togglefloating(const Arg *arg) | 
			
		
	
		
			
				
					|  |  |  | selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed; | 
			
		
	
		
			
				
					|  |  |  | if (selmon->sel->isfloating) | 
			
		
	
		
			
				
					|  |  |  | resize(selmon->sel, selmon->sel->x, selmon->sel->y, | 
			
		
	
		
			
				
					|  |  |  | selmon->sel->w, selmon->sel->h, 0); | 
			
		
	
		
			
				
					|  |  |  | selmon->sel->w, selmon->sel->h, 0); | 
			
		
	
		
			
				
					|  |  |  | arrange(selmon); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -1813,8 +1813,8 @@ updatebars(void) | 
			
		
	
		
			
				
					|  |  |  | if (m->barwin) | 
			
		
	
		
			
				
					|  |  |  | continue; | 
			
		
	
		
			
				
					|  |  |  | m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), | 
			
		
	
		
			
				
					|  |  |  | CopyFromParent, DefaultVisual(dpy, screen), | 
			
		
	
		
			
				
					|  |  |  | CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); | 
			
		
	
		
			
				
					|  |  |  | CopyFromParent, DefaultVisual(dpy, screen), | 
			
		
	
		
			
				
					|  |  |  | CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); | 
			
		
	
		
			
				
					|  |  |  | XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); | 
			
		
	
		
			
				
					|  |  |  | XMapRaised(dpy, m->barwin); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -1843,8 +1843,8 @@ updateclientlist() | 
			
		
	
		
			
				
					|  |  |  | for (m = mons; m; m = m->next) | 
			
		
	
		
			
				
					|  |  |  | for (c = m->clients; c; c = c->next) | 
			
		
	
		
			
				
					|  |  |  | XChangeProperty(dpy, root, netatom[NetClientList], | 
			
		
	
		
			
				
					|  |  |  | XA_WINDOW, 32, PropModeAppend, | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | XA_WINDOW, 32, PropModeAppend, | 
			
		
	
		
			
				
					|  |  |  | (unsigned char *) &(c->win), 1); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | int | 
			
		
	
	
		
			
				
					|  |  | @ -1936,7 +1936,7 @@ updatenumlockmask(void) | 
			
		
	
		
			
				
					|  |  |  | for (i = 0; i < 8; i++) | 
			
		
	
		
			
				
					|  |  |  | for (j = 0; j < modmap->max_keypermod; j++) | 
			
		
	
		
			
				
					|  |  |  | if (modmap->modifiermap[i * modmap->max_keypermod + j] | 
			
		
	
		
			
				
					|  |  |  | == XKeysymToKeycode(dpy, XK_Num_Lock)) | 
			
		
	
		
			
				
					|  |  |  | == XKeysymToKeycode(dpy, XK_Num_Lock)) | 
			
		
	
		
			
				
					|  |  |  | numlockmask = (1 << i); | 
			
		
	
		
			
				
					|  |  |  | XFreeModifiermap(modmap); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -1982,7 +1982,7 @@ updatesizehints(Client *c) | 
			
		
	
		
			
				
					|  |  |  | } else | 
			
		
	
		
			
				
					|  |  |  | c->maxa = c->mina = 0.0; | 
			
		
	
		
			
				
					|  |  |  | c->isfixed = (c->maxw && c->minw && c->maxh && c->minh | 
			
		
	
		
			
				
					|  |  |  | && c->maxw == c->minw && c->maxh == c->minh); | 
			
		
	
		
			
				
					|  |  |  | && c->maxw == c->minw && c->maxh == c->minh); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | void | 
			
		
	
	
		
			
				
					|  |  | @ -2092,7 +2092,7 @@ xerror(Display *dpy, XErrorEvent *ee) | 
			
		
	
		
			
				
					|  |  |  | || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable)) | 
			
		
	
		
			
				
					|  |  |  | return 0; | 
			
		
	
		
			
				
					|  |  |  | fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n", | 
			
		
	
		
			
				
					|  |  |  | ee->request_code, ee->error_code); | 
			
		
	
		
			
				
					|  |  |  | ee->request_code, ee->error_code); | 
			
		
	
		
			
				
					|  |  |  | return xerrorxlib(dpy, ee); /* may call exit */ | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | 
 |