Many document editors (GoogleDocs, LO Writer) do not allow you to fully de-select the document. VE does but this can be quite confusing to users as it results in most tools becoming disabled (as they require a cursor position to be usable).
A brief history of NullSelections:
- In the distant past, the document always had a model range, and blurring the document would not change this, so click an insert tool would just insert content at the last known offset. This was slightly unexpected as there was no cursor on the page to tell you where the content was going to be inserted.
- Because of this and other issues with the model/view selections being out of sync we introduced a NullSelection to represent the state of there being no native selection on the document.
- Separately we had an iFrame solution for allowing multiple selections on the page (for inspectors). Once this became un-maintainable we came up with fake "de-activated" selections that drew boxes using the getClientRects API
Using fake "de-activated" selections there is now no reason we can't force the document to never have a null-selection, and just show these fake selections whenever the real native selection is removed from the document.
For some use cases, such as Structured Discussion, where the VE surface behaves more like a textarea, it will probably make sense to keep the NullSelection behaviour.