anchor.diff:     (projection :accessor projection
   	       :initarg :projection
   	       :initform (m4:identity))
  +   (old-surface :accessor old-surface
  +		:initarg :old-surface
  +		:initform nil)
  +   (new-surface :accessor new-surface
  +		:initarg :new-surface
  +		:initform nil)
      (slide-animation :accessor slide-animation
   		    :initarg :slide-animation
   		    :initform nil)
  
positive.code: and that would allow for animations of these modes. E.g. a pan from one view to
  the next.
  |#
  (defkeybinding (:pressed "Right" Gui) (mode) (virtual-desktop-mode)
    (with-slots ((screen view)) mode
      (let* ((views (surfaces screen))
  	   (current-view (active-surface screen))
  	   (count (length views))
  	   (pos (position current-view views)))
        (when (not (= pos (- count 1)))
  	(setf (active-surface screen) (nth (+ pos 1) views)))))
    (setf (render-needed *compositor*) t))
  
  (defkeybinding (:pressed "Left" Gui) (mode) (virtual-desktop-mode)
    (with-slots ((screen view)) mode
      (let* ((views (surfaces screen))
  	   (current-view (active-surface screen))
  	   (count (length views))
  	   (pos (position current-view views)))
        (when (not (= pos 0))
  	(setf (active-surface screen) (nth (- pos 1) views)))))
    (setf (render-needed *compositor*) t))
  
  (cepl:defun-g vd-vert ((vert cepl:g-pt)
  		       &uniform
  
negative.code:   (apply #'gl:clear-color (clear-color mode))
    (when desktop-fbo
      (cepl:clear desktop-fbo))
    (if (not (slide-animation mode))
      ;; static view of single virtual desktop
      (cepl:with-blending (blending-parameters mode)
        (let ((view (active-surface (view mode))))
  	(setf (x view) 0)
  	(render view desktop-fbo)))
      ;; If we are transitioning draw the two virtual desktops involved
      (mapcar (lambda (virtual-destkop)
  	      (cepl:with-blending (blending-parameters mode)
  		(render virtual-destkop desktop-fbo)))
  	    (list (old-surface mode) (new-surface mode)))))
  