 
 (defn on-focus-change-call
   "Takes a function and yields a View.OnFocusChangeListener object that will
-  invoke the function.  This function must take the three arguments This
-  function must take the two arguments described in on-focus-change."
+  invoke the function.  This function must take the following two arguments:
+
+  view:     the view whose state has changed
+  focused?: the new focuse state for view"
   [handler-fn]
   (reify android.view.View$OnFocusChangeListener
     (onFocusChange [this view focused?]

(defmacro on-click
  "Takes a body of expressions and yields a View.OnClickListener object that
  will invoke the body.  The body takes an implicit argument 'view' that is the
  view that was clicked." [& body]
  `(on-click-call (fn [~'view] ~@body)))

(defn on-create-context-menu-call
  "Takes a function and yields a View.OnCreateContextMenuListener object that
  will invoke the function.  This function must take the three arguments
  described in on-create-context-menu."
  [handler-fn]
  (reify android.view.View$OnCreateContextMenuListener
    (onCreateContextMenu [this menu view info]


(defn on-touch-call
  "Takes a function and yields a View.OnTouchListener object that will invoke
  the function.  This function must take the following two arguments:

  view:  the view the touch event has been dispatched to
  event: the MotionEvent object containing full information about the event

  It should also evaluate to a truthy value if it consumes the event, false or
  nil otherwise."
  [handler-fn]
  (reify android.view.View$OnTouchListener
    (onTouch [this view event]
      (boolean (handler-fn view event)))))

(defmacro on-touch
  "Takes a body of expressions and yields a View.OnTouchListener object that
