      released  _mouse button up event
      entered   _mouse enters widget
      exited    _mouse exits widget
-     clicked   _mouse button clicked"
-  [pressed released entered exited clicked]
+     clicked   _mouse button clicked
+     moved     _mouse has been moved
+     dragged   _mouse has been dragged"
+  [pressed released entered exited clicked moved dragged]
   (let [translate-button {MouseEvent/NOBUTTON 0
                           MouseEvent/BUTTON1  1
                           MouseEvent/BUTTON2  2

                           :modifiers (translate-modifier (.getModifiersEx event))
                           :position [(.getX event) (.getY event)]
                           :buttons-down (translate-pressed-btns (.getModifiersEx event))})]
    (proxy [MouseListener] []
      (mousePressed [event]
        (with-swing-threads* (pressed (translate-event event))))
      (mouseReleased [event]

      (mouseExited [event]
        (with-swing-threads* (exited (translate-event event))))
      (mouseClicked [event]
        (with-swing-threads* (clicked (translate-event event))))
      (mouseMoved [event]
        (with-swing-threads* (message-box "MOVED")
          (moved (translate-event event))))
      (mouseDragged [event]
        (with-swing-threads* (dragged (translate-event event)))))))



;;; managed/unmanaged interop
