anchor.diff:  
   (defun redraw-desktop-window (desktop)
     (let* ((window (window desktop))
  -         (desktop-width (mezzano.gui.compositor:width window))
  -         (desktop-height (mezzano.gui.compositor:height window))
  -         (framebuffer (mezzano.gui.compositor:window-buffer window))
  +         (desktop-width (comp:width window))
  +         (desktop-height (comp:height window))
  +         (framebuffer (comp:window-buffer window))
            (font (font desktop)))
  -    (mezzano.gui:bitset :set
  +    (gui:bitset :set
                           desktop-width desktop-height
                           (colour desktop)
                           framebuffer 0 0)
       (when (image desktop)
         (let* ((image (image desktop))
  -             (image-width (mezzano.gui:surface-width image))
  -             (image-height (mezzano.gui:surface-height image)))
  -        (mezzano.gui:bitblt :blend
  +             (image-width (gui:surface-width image))
  +             (image-height (gui:surface-height image)))
  +        (gui:bitblt :blend
                               image-width image-height
                               image 0 0
                               framebuffer
  
positive.code:      do (progn ;ignore-errors
            (incf icon-pen 20)
            (let* ((image (load-image icon))
                   (width (mezzano.gui:surface-width image))
                   (height (mezzano.gui:surface-height image)))
              (when (and (<= 20 x (1- (+ 20 width)))
                         (<= icon-pen y (1- (+ icon-pen height))))
                (return icon-repr))
              (incf icon-pen (mezzano.gui:surface-height image))))))
  
  (defmethod dispatch-event (desktop (event mezzano.gui.compositor:mouse-event))
    (when (logbitp 0 (mezzano.gui.compositor:mouse-button-change event))
      (let ((x (mezzano.gui.compositor:mouse-x-position event))
            (y (mezzano.gui.compositor:mouse-y-position event)))
        (cond ((logbitp 0 (mezzano.gui.compositor:mouse-button-state event))
               ;; Mouse down, begin click. Highlight the clicked thing.
               (setf (clicked-icon desktop) (get-icon-at-point desktop x y))
               (when (clicked-icon desktop)
  
negative.code:        do (progn ;ignore-errors
              (incf icon-pen 20)
              (let ((image (load-image icon)))
                (gui:bitblt :blend
                                    (gui:surface-width image) (gui:surface-height image)
                                    image 0 0
                                    framebuffer 20 icon-pen)
                (when (eql icon-repr (clicked-icon desktop))
                  (gui:bitset :xor
                                      (gui:surface-width image) (gui:surface-height image)
                                      #x00FFFFFF
                                      framebuffer
                                      20 icon-pen))
                (loop
                   with pen = 0
                   for ch across name
                   for glyph = (font:character-to-glyph font ch)
                   for mask = (font:glyph-mask glyph)
                   do
                     (gui:bitset :blend
                                         (gui:surface-width mask) (gui:surface-height mask)
                                         (gui:make-colour 1 1 1)
                                         framebuffer
                                         (+ 20 (gui:surface-height image) 10 pen (font:glyph-xoff glyph))
                                         (- (+ icon-pen (truncate (gui:surface-width image) 2) (font:ascender font))
                                            (font:glyph-yoff glyph))
                                         mask 0 0)
                     (incf pen (font:glyph-advance glyph)))
                (incf icon-pen (gui:surface-height image)))))
      (comp:damage-window window 0 0 (comp:width window) (comp:height window))))
  
  (defun desktop-main (desktop)
    (let* ((font (font:open-font
                  font:*default-font*
                  (* font:*default-font-size* 2)))
           (fifo (fifo desktop)))
      (setf (font desktop) font)
      ;; Create a zero-size window for listening on system notifications.
      (setf (slot-value desktop '%notification-window) (comp:make-window fifo 0 0
                                                                                           :initial-z-order :below-current))
      ;; And a dummy window before we know the screen geometry.
      (setf (slot-value desktop '%window) (comp:make-window fifo 0 0
                                                                              :initial-z-order :below-current))
      ;; Subscribe to screen geometry change notifications.
      (comp:subscribe-notification (notification-window desktop) :screen-geometry)
      (unwind-protect
           (catch 'quitting-time
             (loop
                (sys.int::log-and-ignore-errors
                 (dispatch-event desktop (mezzano.supervisor:fifo-pop fifo)))))
        (comp:close-window notification-window)
        (comp:close-window (window desktop)))))
  
  (defun spawn (&key (colour #xFF011172) image)
    (let* ((fifo (mezzano.supervisor:make-fifo 50))
  