rem: case KeyPress:  if (event.xkey.time - lastTime > 50) { kspeed = 1; } else { if (kspeed < 20) kspeed++; } lastTime = event.xkey.time;  if (event.xkey.state & ControlMask && !wwin->flags.shaded){ ctrlmode=1; wUnselectWindows(scr); } else { ctrlmode=0; } if (event.xkey.keycode == shiftl || event.xkey.keycode == shiftr){ if(ctrlmode) cycleGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh, 0); else cyclePositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh); } else { keysym = XLookupKeysym(&event.xkey, 0); switch(keysym){ case XK_Return: done=2; break; case XK_Escape: done=1; break; case XK_Up: case XK_KP_Up: case XK_k: if (ctrlmode){ h-=kspeed; } else off_y-=kspeed; break; case XK_Down: case XK_KP_Down: case XK_j: if (ctrlmode){ h+=kspeed; } else off_y+=kspeed; break; case XK_Left: case XK_KP_Left: case XK_h: if (ctrlmode){ w-=kspeed; } else off_x-=kspeed; break; case XK_Right: case XK_KP_Right: case XK_l: if (ctrlmode){ w+=kspeed; } else off_x+=kspeed; break; } ww=w;wh=h; wh-=vert_border; wWindowConstrainSize(wwin, &ww, &wh); wh+=vert_border;  if (wPreferences.ws_cycle){ if (src_x + off_x + wwin->frame->core->width < 20){ if(!scr->current_workspace) { wWorkspaceChange(scr, scr->workspace_count-1); } else wWorkspaceChange(scr, scr->current_workspace-1); off_x += scr_width; } else if (src_x + off_x + 20 > scr_width){ if(scr->current_workspace == scr->workspace_count-1) { wWorkspaceChange(scr, 0); } else wWorkspaceChange(scr, scr->current_workspace+1); off_x -= scr_width; } } else { if (src_x + off_x + wwin->frame->core->width < 20) off_x = 20 - wwin->frame->core->width - src_x; else if (src_x + off_x + 20 > scr_width) off_x = scr_width - 20 - src_x; }  if (src_y + off_y + wwin->frame->core->height < 20) off_y = 20 - wwin->frame->core->height - src_y; else if (src_y + off_y + 20 > scr_height) off_y = scr_height - 20 - src_y;  } break;
add: case KeyPress:  if (event.xkey.time - lastTime > 50) { kspeed/=(1 + (event.xkey.time - lastTime)/100); } else { if (kspeed < 20) { kspeed++; } } if (kspeed < _KS) kspeed = _KS; lastTime = event.xkey.time;  if (event.xkey.state & ControlMask && !wwin->flags.shaded) { ctrlmode=1; wUnselectWindows(scr); } else { ctrlmode=0; } if (event.xkey.keycode == shiftl || event.xkey.keycode == shiftr) { if (ctrlmode) cycleGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh, 0); else cyclePositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh); } else {  keysym = XLookupKeysym(&event.xkey, 0); switch (keysym) { case XK_Return: done=2; break; case XK_Escape: done=1; break; case XK_Up: case XK_KP_Up: case XK_k: if (ctrlmode){ if (moment != UP) h = wh; h-=kspeed; moment = UP; if (h < 1) h = 1; } else off_y-=kspeed; break; case XK_Down: case XK_KP_Down: case XK_j: if (ctrlmode){ if (moment != DOWN) h = wh; h+=kspeed; moment = DOWN; } else off_y+=kspeed; break; case XK_Left: case XK_KP_Left: case XK_h: if (ctrlmode) { if (moment != LEFT) w = ww; w-=kspeed; if (w < 1) w = 1; moment = LEFT; } else off_x-=kspeed; break; case XK_Right: case XK_KP_Right: case XK_l: if (ctrlmode) { if (moment != RIGHT) w = ww; w+=kspeed; moment = RIGHT; } else off_x+=kspeed; break; }  ww=w;wh=h; wh-=vert_border; wWindowConstrainSize(wwin, &ww, &wh); wh+=vert_border;  if (wPreferences.ws_cycle){ if (src_x + off_x + ww < 20){ if(!scr->current_workspace) { wWorkspaceChange(scr, scr->workspace_count-1); } else wWorkspaceChange(scr, scr->current_workspace-1); off_x += scr_width; } else if (src_x + off_x + 20 > scr_width){ if(scr->current_workspace == scr->workspace_count-1) { wWorkspaceChange(scr, 0); } else wWorkspaceChange(scr, scr->current_workspace+1); off_x -= scr_width; } } else { if (src_x + off_x + ww < 20) off_x = 20 - ww - src_x; else if (src_x + off_x + 20 > scr_width) off_x = scr_width - 20 - src_x; }  if (src_y + off_y + wh < 20) { off_y = 20 - wh - src_y; } else if (src_y + off_y + 20 > scr_height) { off_y = scr_height - 20 - src_y; } } break;
context: wKeyboardMoveResizeWindow(WWindow *wwin){    WScreen *scr = wwin->screen_ptr;    Window root = scr->root_win;    XEvent event;    int w = wwin->frame->core->width;    int h = wwin->frame->core->height;    int scr_width = wwin->screen_ptr->scr_width;    int scr_height = wwin->screen_ptr->scr_height;    int vert_border = wwin->frame->top_width + wwin->frame->bottom_width;    int src_x = wwin->frame_x;    int src_y = wwin->frame_y;    int done,off_x,off_y,ww,wh;    int kspeed = 1;    Time lastTime = 0;    KeySym keysym=NoSymbol;    KeyCode shiftl,shiftr,ctrll,ctrlmode;    /*    int timer;    _looper looper;    looper.wwin=wwin;    scr->keymove_tick=1;    WMAddTimerHandler(1000,(WMCallback*)_keyloop, &looper);    */    shiftl = XKeysymToKeycode(dpy, XK_Shift_L);    shiftr = XKeysymToKeycode(dpy, XK_Shift_R);    ctrll = XKeysymToKeycode(dpy, XK_Control_L);    ctrlmode=done=off_x=off_y=0;    XSync(dpy, False);    wusleep(10000);    XGrabKeyboard(dpy, root, False, GrabModeAsync, GrabModeAsync, CurrentTime);    if (!wwin->flags.selected) {        wUnselectWindows(scr);    }    XGrabServer(dpy);    XGrabPointer(dpy, scr->root_win, True, PointerMotionMask		 |ButtonReleaseMask|ButtonPressMask, GrabModeAsync,		 GrabModeAsync, None, wCursor[WCUR_DEFAULT], CurrentTime);    if (wwin->flags.shaded || scr->selected_windows) {	if(scr->selected_windows)	    drawFrames(wwin,scr->selected_windows,off_x,off_y);	else drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, w, h);	if(!scr->selected_windows)            mapPositionDisplay(wwin, src_x, src_y, w, h);    } else {	drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, w, h);    }    ww=w;    wh=h;    while(1) {	/*	 looper.ox=off_x;	 looper.oy=off_y;	 */	WMMaskEvent(dpy, KeyPressMask | ButtonReleaseMask 		    | ButtonPressMask | ExposureMask, &event);    	if (wwin->flags.shaded || scr->selected_windows) {	    if(scr->selected_windows)	        drawFrames(wwin,scr->selected_windows,off_x,off_y);	    else drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, w, h);	    /*** I HATE EDGE RESISTANCE - ]d ***/	}	else {	    drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh);	}	if(ctrlmode)	    showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0);	XUngrabServer(dpy);	XSync(dpy, False);	switch (event.type) {	 case KeyPress:	    /* accelerate */	    if (event.xkey.time - lastTime > 50) {		kspeed = 1;	    } else {		if (kspeed < 20)		    kspeed++;	    }	    lastTime = event.xkey.time;	    if (event.xkey.state & ControlMask && !wwin->flags.shaded){		ctrlmode=1;		wUnselectWindows(scr);	    }	    else {		ctrlmode=0;	    }	    if (event.xkey.keycode == shiftl || event.xkey.keycode == shiftr){		if(ctrlmode)		    cycleGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh, 0);		else		    cyclePositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh);	    }	    else {		keysym = XLookupKeysym(&event.xkey, 0);		switch(keysym){		 case XK_Return:		    done=2;		    break;		 case XK_Escape:		    done=1;		    break;		 case XK_Up:		 case XK_KP_Up:		 case XK_k:		    if (ctrlmode){			h-=kspeed;		    }		    else off_y-=kspeed;		    break;		 case XK_Down:		 case XK_KP_Down:		 case XK_j:		    if (ctrlmode){			h+=kspeed;		    }		    else off_y+=kspeed;		    break;		 case XK_Left:		 case XK_KP_Left:		 case XK_h:		    if (ctrlmode){			w-=kspeed;		    }		    else off_x-=kspeed;		    break;		 case XK_Right:		 case XK_KP_Right:		 case XK_l:		    if (ctrlmode){			w+=kspeed;		    }		    else off_x+=kspeed;		    break;		}		ww=w;wh=h;		wh-=vert_border;		wWindowConstrainSize(wwin, &ww, &wh);		wh+=vert_border;				if (wPreferences.ws_cycle){		    if (src_x + off_x + wwin->frame->core->width < 20){			if(!scr->current_workspace) {			    wWorkspaceChange(scr, scr->workspace_count-1);			}			else wWorkspaceChange(scr, scr->current_workspace-1);			off_x += scr_width;		    }		    else if (src_x + off_x + 20 > scr_width){			if(scr->current_workspace == scr->workspace_count-1) {			    wWorkspaceChange(scr, 0);			}			else wWorkspaceChange(scr, scr->current_workspace+1);			off_x -= scr_width;		    }		}		else {		    if (src_x + off_x + wwin->frame->core->width < 20)			off_x = 20 - wwin->frame->core->width - src_x;		    else if (src_x + off_x + 20 > scr_width)			off_x = scr_width - 20 - src_x;		}				if (src_y + off_y + wwin->frame->core->height < 20)		    off_y = 20 - wwin->frame->core->height - src_y;		else if (src_y + off_y + 20 > scr_height)		    off_y = scr_height - 20 - src_y;			    }	    break;	 case ButtonPress:	 case ButtonRelease:	    done=1;	    break;	 default:	    WMHandleEvent(&event);	    break;	}	XGrabServer(dpy);	/*xxx*/	if (wwin->flags.shaded && !scr->selected_windows){	    moveGeometryDisplayCentered(scr, src_x+off_x + w/2, src_y+off_y + h/2);	}	else {	    if(ctrlmode){		unmapPositionDisplay(wwin);		mapGeometryDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh);	    }	    else if(!scr->selected_windows){		unmapGeometryDisplay(wwin);		mapPositionDisplay(wwin, src_x+off_x, src_y+off_y, ww, wh);	    }	}    	if (wwin->flags.shaded || scr->selected_windows) {	    if(scr->selected_windows)	        drawFrames(wwin,scr->selected_windows,off_x,off_y);	    else drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, w, h);	}	else {	    drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh);	}	if(ctrlmode){	    showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0);	}	else if(!scr->selected_windows)	    showPosition(wwin, src_x+off_x, src_y+off_y);	/**/		if(done){	    scr->keymove_tick=0;	    /*	     WMDeleteTimerWithClientData(&looper);	     */            if (wwin->flags.shaded || scr->selected_windows) {	        if(scr->selected_windows)	            drawFrames(wwin,scr->selected_windows,off_x,off_y);	        else drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, w, h);            }            else {                drawTransparentFrame(wwin, src_x+off_x, src_y+off_y, ww, wh);            }	    if(ctrlmode){		showGeometry(wwin, src_x+off_x, src_y+off_y, src_x+off_x+ww, src_y+off_y+wh,0);		unmapGeometryDisplay(wwin);	    }	    else		unmapPositionDisplay(wwin);	    XUngrabKeyboard(dpy, CurrentTime);	    XUngrabPointer(dpy, CurrentTime);	    XUngrabServer(dpy);	    if(done==2) {    		if (wwin->flags.shaded || scr->selected_windows) {		    LinkedList *list;		    list=scr->selected_windows;		    if (!scr->selected_windows) {		    	wWindowMove(wwin, src_x+off_x, src_y+off_y);		        wWindowSynthConfigureNotify(wwin);		    } else {			doWindowMove(wwin,scr->selected_windows,off_x,off_y);			while (list) {			    wWindowSynthConfigureNotify(list->head);			    list = list->tail;			}		    }		} else {		    if (wwin->client.width != ww)			wwin->flags.user_changed_width = 1;		    if (wwin->client.height != wh - vert_border)			wwin->flags.user_changed_height = 1;		    wWindowConfigure(wwin, src_x+off_x, src_y+off_y, 				     ww, wh - vert_border);		    wWindowSynthConfigureNotify(wwin);		}		wWindowChangeWorkspace(wwin, scr->current_workspace);		wSetFocusTo(scr, wwin);	    }	    return 1;	}    }}