private void passiveMotionMethod(AWTGLAutoDrawable window, int x, int y) {
   WindowInfo info = (WindowInfo) windowToInfoMap.get(window);
   // Compute ray in 3D
   Vec3f rayStart = new Vec3f();
   Vec3f rayDirection = new Vec3f();
   computeRay(info.params, x, y, rayStart, rayDirection);
   // Compute all hits
   List hits = new ArrayList();
   for (Iterator iter = info.manips.iterator(); iter.hasNext(); ) {
     ((Manip) iter.next()).intersectRay(rayStart, rayDirection, hits);
   }
   // Find closest one
   HitPoint hp = null;
   for (Iterator iter = hits.iterator(); iter.hasNext(); ) {
     HitPoint cur = (HitPoint) iter.next();
     if ((hp == null) || (cur.intPt.getT() < hp.intPt.getT())) {
       hp = cur;
     }
   }
   if (info.curHighlightedManip != null
       && (hp == null
           || hp.manipulator != info.curHighlightedManip
           || hp.manipPart != info.curHighlightedManipPart)) {
     info.curHighlightedManip.clearHighlight();
     fireUpdate(info.curHighlightedManip);
   }
   if (hp != null) {
     if (hp.manipulator != info.curHighlightedManip
         || hp.manipPart != info.curHighlightedManipPart) {
       // Highlight manip
       info.curHighlightedManip = hp.manipulator;
       info.curHighlightedManipPart = hp.manipPart;
       info.curHighlightedManip.highlight(hp);
       fireUpdate(info.curHighlightedManip);
     }
   } else {
     info.curHighlightedManip = null;
   }
 }