protected boolean handleKeyDown(KeyEvent e) {
		if (acceptArrowKey(e)) {
			accStepIncrement();
			if (stateTransition(STATE_INITIAL,
					STATE_ACCESSIBLE_DRAG_IN_PROGRESS))
				setStartLocation(getLocation());
			switch (e.keyCode) {
			case SWT.ARROW_DOWN:
				placeMouseInViewer(getLocation().getTranslated(0, accGetStep()));
				break;
			case SWT.ARROW_UP:
				placeMouseInViewer(getLocation()
						.getTranslated(0, -accGetStep()));
				break;
			case SWT.ARROW_RIGHT:
				int stepping = accGetStep();
				if (isCurrentViewerMirrored())
					stepping = -stepping;
				placeMouseInViewer(getLocation().getTranslated(stepping, 0));
				break;
			case SWT.ARROW_LEFT:
				int step = -accGetStep();
				if (isCurrentViewerMirrored())
					step = -step;
				placeMouseInViewer(getLocation().getTranslated(step, 0));
				break;
			}
			return true;
		}
		return false;
	}