public static void onMouseStay(Component comp, final P1<Point> p1, final P0 onLeave) {
		final java.util.Timer timer = new java.util.Timer();
		final TimerTask[] task = {null};
		final boolean[] active = {false};
		MouseAdapter adapter = new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				mouseMoved(e);
			}
	
			public void mouseExited(MouseEvent e) {
				if (task[0] != null) {
					task[0].cancel();
				}
				if (active[0]) {
					onLeave.e();
					active[0] = false;
				}
			}
	
			public void mouseMoved(final MouseEvent e) {
				if (active[0]) {
					onLeave.e();
					active[0] = false;
				}
				
				if (task[0] != null) {
					task[0].cancel();
				}
				task[0] = new TimerTask() {public void run() {
					p1.e(e.getPoint());
				}};
				timer.schedule(task[0], 100);
			}
		};
		comp.addMouseListener(adapter);
		comp.addMouseMotionListener(adapter);
	}