> I expect that if you call call-next-method at the top of your EVENT
  > method rather than at the end then the OS will establish the new value
  I have tried to do that. But it doesn't work.
  Any idea?
An oversight of mine.  I forgot that the OS implements the item-list
widget to change its value on the mouse-button-up rather than the
mouse-button-down.  So you would need to check the value after the
default button-up handler rather than after the button-down as I had
suggested.
After calling subclass-widget on a my-list widget, the following code
will print its current value after any button-up.
---------------------------------------------------------------------------
(defclass my-list (single-item-list)())
(defclass my-list-window (pc::single-item-list-pane)())
(defmethod widget-device ((dialog-item my-list) dialog)
   'my-list-window)
(defmethod event ((window my-list-window)(msg (eql mouse-left-up))
                  buttons data time)
   (call-next-method) ;; select the new value if there is one
   (let* ((widget (window-dialog-item window)))
      (when widget
         (print (dialog-item-value widget))))) ;; print current value
---------------------------------------------------------------------------
Ken Cheetham                          <franz.com at cheetham>
Franz Inc.                            Voice: (510) 548-3600
1995 University Avenue, Suite 275     Fax:   (510) 548-8253
Berkeley, CA  94704                   http:  //www.franz.com/
ACL Windows FAQ: ftp.franz.com:/pub/acl4w-faq
ACL Unix    FAQ: ftp.franz.com:/pub/faq