only snap within window area 71365a52
Anselm R Garbe · 2008-05-19 13:41 1 file(s) · +19 −12
dwm.c +19 −12
1039 1039
			XSync(dpy, False);
1040 1040
			nx = ocx + (ev.xmotion.x - x1);
1041 1041
			ny = ocy + (ev.xmotion.y - y1);
1042 -
			if(abs(wx - nx) < snap)
1043 -
				nx = wx;
1044 -
			else if(abs((wx + ww) - (nx + c->w + 2 * c->bw)) < snap)
1045 -
				nx = wx + ww - c->w - 2 * c->bw;
1046 -
			if(abs(wy - ny) < snap)
1047 -
				ny = wy;
1048 -
			else if(abs((wy + wh) - (ny + c->h + 2 * c->bw)) < snap)
1049 -
				ny = wy + wh - c->h - 2 * c->bw;
1050 -
			if(!c->isfloating && lt->arrange && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
1051 -
				togglefloating(NULL);
1042 +
			if(snap && nx >= wx && nx <= wx + ww
1043 +
			        && ny >= wy && ny <= wy + wh) {
1044 +
				if(abs(wx - nx) < snap)
1045 +
					nx = wx;
1046 +
				else if(abs((wx + ww) - (nx + c->w + 2 * c->bw)) < snap)
1047 +
					nx = wx + ww - c->w - 2 * c->bw;
1048 +
				if(abs(wy - ny) < snap)
1049 +
					ny = wy;
1050 +
				else if(abs((wy + wh) - (ny + c->h + 2 * c->bw)) < snap)
1051 +
					ny = wy + wh - c->h - 2 * c->bw;
1052 +
				if(!c->isfloating && lt->arrange && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
1053 +
					togglefloating(NULL);
1054 +
			}
1052 1055
			if(!lt->arrange || c->isfloating)
1053 1056
				resize(c, nx, ny, c->w, c->h, False);
1054 1057
			break;
1193 1196
			XSync(dpy, False);
1194 1197
			nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
1195 1198
			nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
1196 -
			if(!c->isfloating && lt->arrange && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) {
1197 -
				togglefloating(NULL);
1199 +
1200 +
			if(snap && nw >= wx && nw <= wx + ww
1201 +
			        && nh >= wy && nh <= wy + wh) {
1202 +
				if(!c->isfloating && lt->arrange
1203 +
				   && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
1204 +
					togglefloating(NULL);
1198 1205
			}
1199 1206
			if(!lt->arrange || c->isfloating)
1200 1207
				resize(c, c->x, c->y, nw, nh, True);