anchor.diff:    
     // true iff a drag is occurring
     bool _dragging = false;
  +  
  +  // true iff we got a mouse down and are waiting for the first move
  +  // to actually start the drag
  +  bool _dragStartPending = false;
  +  // the mouse down event that starts a drag
  +  MouseEvent _startEvent;
   
     // The set of elements the handler watches for drags on
     List<Element> _targets = [];
  
positive.code:     //print("auto stop handling, enabled: $enabled, dragging: $_dragging");
      // stop the drag
      // only call if we are currently dragging and enabled
      if(_dragging && enabled) {
        print("calling stop drag");
        stopDrag(event);
      }
  
negative.code:         e.on.mouseOut.add(_mouseOut);
        }
      }
    }
    
    void _pendingToDrag() {
      if(_dragStartPending) {
        
        // call start callback if it exists
        if(dragStart != null) {
          dragStart(this, _currentTarget, _startEvent);
        }
        
        // switch from pending to dragging
        _dragStartPending = false;
        _dragging = true;
      }
    }
    
    void _mouseOverHandler(MouseEvent event) {
      // do actual start in case we were pending before
      _pendingToDrag();
      
      // call the drag in callback
      if(dragOver != null) {
        dragOver(this, event.currentTarget, event);
      }
    }
    void _mouseOutHandler(MouseEvent event) {
      // do actual start in case we were pending before
      _pendingToDrag();
      
      // call the drag out callback
      if(dragOut != null) {
        dragOut(this, event.currentTarget, event);
      }
    }
    void _mouseMoveHandler(MouseEvent event) {
      // do actual start in case we were pending before
      _pendingToDrag();
  
      //print("mouse move, enabled: $enabled, dragging: $_dragging");
      // call the drag callback
      // TODO is currentTarget the correct thing?
  