Merge pull request #4173 from matrix-org/jryans/chrome-compose-flicker

Fix composer touch bar flickering on keypress in Chrome
This commit is contained in:
J. Ryan Stinnett 2020-03-04 14:54:34 +00:00 committed by GitHub
commit 5da13ea253
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -38,12 +38,27 @@ function setDocumentRangeSelection(editor, model, range) {
}
export function setCaretPosition(editor, model, caretPosition) {
const sel = document.getSelection();
sel.removeAllRanges();
const range = document.createRange();
const {node, offset} = getNodeAndOffsetForPosition(editor, model, caretPosition);
range.setStart(node, offset);
range.collapse(true);
const sel = document.getSelection();
if (sel.rangeCount === 1) {
const existingRange = sel.getRangeAt(0);
if (
existingRange.startContainer === range.startContainer &&
existingRange.startOffset === range.startOffset &&
existingRange.collapsed === range.collapsed
) {
// If the selection matches, it's important to leave it alone.
// Recreating the selection state in at least Chrome can cause
// strange side effects, like touch bar flickering on every key.
// See https://github.com/vector-im/riot-web/issues/9299
return;
}
}
sel.removeAllRanges();
sel.addRange(range);
}