;;; -*-Scheme-*-

(require 'xlib)

(define (track)
  (let* ((dpy (open-display))
	 (root (display-root-window dpy))
	 (gc (create-gcontext 'window root
			    'function 'xor
			    'foreground (black-pixel dpy)
			    'subwindow-mode 'include-inferiors))
	 (lx 0) (ly 0) (lw 0) (lh 0)
	 (move-outline
	  (lambda (x y w h)
	    (if (not (and (= x lx) (= y ly) (= w lw) (= h lh)))
		(begin
		  (draw-rectangle root gc lx ly lw lh)
		  (draw-rectangle root gc x y w h)
		  (set! lx x) (set! ly y)
		  (set! lw w) (set! lh h))))))
    (unwind-protect
     (case (grab-pointer root #f '(pointer-motion button-press)
			 #f #f 'none 'none 'now)
       (success
	(with-server-grabbed dpy
	  (draw-rectangle root gc lx ly lw lh)
	  (display-flush-output dpy)
	  (handle-events dpy #t #f
	    (motion-notify
	     (lambda (event root win subwin time x y . rest)
	       (move-outline x y 300 300) #f))
	    (else (lambda args #t)))))
       (else
	(format #t "Not grabbed!~%")))
     (begin
       (draw-rectangle root gc lx ly lw lh)
       (close-display dpy)))))

(track)
