correctly handle all drag states