From 794a60b9f8976452add3885f5a07af7f6f5362e4 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 23 May 2018 01:36:21 +0100 Subject: [PATCH] refocus editor immediately after executing commands and persist selections correctly across blur/focus --- .../views/rooms/MessageComposerInput.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index cb015dd0ba..3a0329c399 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -1005,12 +1005,13 @@ export default class MessageComposerInput extends React.Component { this.historyManager.save(editorState, this.state.isRichTextEnabled ? 'rich' : 'markdown'); this.setState({ editorState: this.createEditorState(), + }, ()=>{ + this.refs.editor.focus(); }); } if (cmd.promise) { cmd.promise.then(()=>{ console.log("Command success."); - this.refs.editor.focus(); }, (err)=>{ console.error("Command failure: %s", err); const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); @@ -1499,6 +1500,18 @@ export default class MessageComposerInput extends React.Component { this.handleKeyCommand('toggle-mode'); }; + onBlur = (e) => { + this.selection = this.state.editorState.selection; + }; + + onFocus = (e) => { + if (this.selection) { + const change = this.state.editorState.change().select(this.selection); + this.onChange(change); + delete this.selection; + } + }; + render() { const activeEditorState = this.state.originalEditorState || this.state.editorState; @@ -1532,6 +1545,8 @@ export default class MessageComposerInput extends React.Component { onChange={this.onChange} onKeyDown={this.onKeyDown} onPaste={this.onPaste} + onBlur={this.onBlur} + onFocus={this.onFocus} renderNode={this.renderNode} renderMark={this.renderMark} spellCheck={true}