Swap ranges position when dragging past another range

```
[______[====]______[===]__________________]
                     ↓
[____________[====][===]__________________]
                     ↓
[__________________[===][====]____________]
                     ↓
[__________________[===]_____[====]_______]
```

should work even if the stationary range is readonly