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

Commit

Permalink
Merge pull request #6832 from SimonBrandner/fix/ff-esr-pills
Browse files Browse the repository at this point in the history
Fix pill deletion on Firefox 78
  • Loading branch information
turt2live authored Sep 18, 2021
2 parents 9c3439a + 36decbb commit 45058df
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/components/views/rooms/BasicMessageComposer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
handled = true;
} else if (event.key === Key.BACKSPACE || event.key === Key.DELETE) {
this.formatBarRef.current.hide();
handled = this.fakeDeletion(event.key === Key.BACKSPACE);
}

if (handled) {
Expand Down Expand Up @@ -564,6 +565,29 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
}
};

/**
* TODO: Remove when Debian moves to newer version of Firefox
* On Firefox 78 no event emitted when the user tries to delete pills.
* Therefore we need to fake what would normally happen
* @param direction in which to delete
* @returns handled
*/
private fakeDeletion(backward: boolean): boolean {
const selection = document.getSelection();
// Use the default handling for ranges
if (selection.type === "Range") return false;

this.modifiedFlag = true;
const { caret, text } = getCaretOffsetAndText(this.editorRef.current, selection);

// Do the deletion itself
if (backward) caret.offset--;
const newText = text.slice(0, caret.offset) + text.slice(caret.offset + 1);

this.props.model.update(newText, backward ? "deleteContentBackward" : "deleteContentForward", caret);
return true;
}

private async tabCompleteName(): Promise<void> {
try {
await new Promise<void>(resolve => this.setState({ showVisualBell: false }, resolve));
Expand Down

0 comments on commit 45058df

Please sign in to comment.