anchor.diff:    }
   
     void _mouseDown(MouseEvent e) {
  +    assert(_mouseDownThing == null);
  +    assert(_draggingThing == null);
  +
       final coord = getMouseEventCoordinate(e);
       final hits = _updateMouseLocation(coord);
  -    _mouseDownThing = $(hits).firstOrDefault((e) => getClickable(e));
  -    if(_mouseDownThing != null) {
  -      _doMouseDown(_mouseDownThing, e);
  +
  +    for(final t in hits) {
  +      if(getDraggable(t)) {
  +        _draggingThing = t;
  +        _doDrag(_draggingThing, e);
  +        break;
  +      } else if(getClickable(t)) {
  +        _mouseDownThing = t;
  +        _doMouseDown(_mouseDownThing, e);
  +        break;
  +      }
       }
     }
   
  
positive.code:     final args = new ThingMouseEventArgs(thing, e);
      _clickEvent.fireEvent(thing, args);
    }
  }
  
negative.code:   }
  
    static void setClickable(Thing thing, bool value) {
      _setBoolProp(thing, _isClickableProperty, value);
    }
  
    static bool getClickable(Thing thing) {
      assert(thing != null);
      return _isClickableProperty.get(thing);
    }
  
    static void setDraggable (Thing thing, bool value) {
      _setBoolProp(thing, _isDraggableProperty, value);
    }
  
    static bool getDraggable(Thing thing) {
      assert(thing != null);
      return _isDraggableProperty.get(thing);
    }
  
    static void _setBoolProp(Thing thing, Property<bool> prop, bool value) {
      assert(thing != null);
      assert(prop != null);
      assert(value != null);
      assert(prop.defaultValue == false);
      if(value) {
        prop.set(thing, true);
      } else {
        prop.clear(thing);
      }
    }
  
    static GlobalId addHandler(Thing thing,
  