Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 5da13ea

Browse files
authored
Merge pull request #4173 from matrix-org/jryans/chrome-compose-flicker
Fix composer touch bar flickering on keypress in Chrome
2 parents 847f92b + 7ad8eeb commit 5da13ea

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

src/editor/caret.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,27 @@ function setDocumentRangeSelection(editor, model, range) {
3838
}
3939

4040
export function setCaretPosition(editor, model, caretPosition) {
41-
const sel = document.getSelection();
42-
sel.removeAllRanges();
4341
const range = document.createRange();
4442
const {node, offset} = getNodeAndOffsetForPosition(editor, model, caretPosition);
4543
range.setStart(node, offset);
4644
range.collapse(true);
45+
46+
const sel = document.getSelection();
47+
if (sel.rangeCount === 1) {
48+
const existingRange = sel.getRangeAt(0);
49+
if (
50+
existingRange.startContainer === range.startContainer &&
51+
existingRange.startOffset === range.startOffset &&
52+
existingRange.collapsed === range.collapsed
53+
) {
54+
// If the selection matches, it's important to leave it alone.
55+
// Recreating the selection state in at least Chrome can cause
56+
// strange side effects, like touch bar flickering on every key.
57+
// See https://github.com/vector-im/riot-web/issues/9299
58+
return;
59+
}
60+
}
61+
sel.removeAllRanges();
4762
sel.addRange(range);
4863
}
4964

0 commit comments

Comments
 (0)