From 01b5bf144287c1b7191f47b2d85c58455c189057 Mon Sep 17 00:00:00 2001 From: Julien Giannone Date: Fri, 20 Nov 2020 07:47:37 +0000 Subject: [PATCH] [FIX] mail: fix text selection in composer using SHIFT and arrow keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit corrects the faulty SHIFT + ArrowKey selection behavior. task-2388650 closes odoo/odoo#62251 X-original-commit: d498f899aa2ef81acbcd035896b9fcc912e4d52b Signed-off-by: Alexandre Kühn (aku) --- .../components/composer_text_input/composer_text_input.js | 6 ++++-- addons/mail/static/src/models/composer/composer.js | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/mail/static/src/components/composer_text_input/composer_text_input.js b/addons/mail/static/src/components/composer_text_input/composer_text_input.js index a5f945835dd..1b264ca9985 100644 --- a/addons/mail/static/src/components/composer_text_input/composer_text_input.js +++ b/addons/mail/static/src/components/composer_text_input/composer_text_input.js @@ -97,8 +97,9 @@ class ComposerTextInput extends Component { saveStateInStore() { this.composer.update({ textInputContent: this._getContent(), - textInputCursorStart: this._getSelectionStart(), textInputCursorEnd: this._getSelectionEnd(), + textInputCursorStart: this._getSelectionStart(), + textInputSelectionDirection: this._textareaRef.el.selectionDirection, }); } @@ -159,7 +160,8 @@ class ComposerTextInput extends Component { this._textareaRef.el.value = this.composer.textInputContent; this._textareaRef.el.setSelectionRange( this.composer.textInputCursorStart, - this.composer.textInputCursorEnd + this.composer.textInputCursorEnd, + this.composer.textInputSelectionDirection, ); this._updateHeight(); } diff --git a/addons/mail/static/src/models/composer/composer.js b/addons/mail/static/src/models/composer/composer.js index 2e087a1bb72..49ed975d70e 100644 --- a/addons/mail/static/src/models/composer/composer.js +++ b/addons/mail/static/src/models/composer/composer.js @@ -45,6 +45,9 @@ function factory(dependencies) { } detectSuggestionDelimiter() { + if (this.textInputCursorStart !== this.textInputCursorEnd) { + return; + } const lastInputChar = this.textInputContent.substring(this.textInputCursorStart - 1, this.textInputCursorStart); const suggestionDelimiters = ['@', ':', '#', '/']; if (suggestionDelimiters.includes(lastInputChar) && !this.hasSuggestions) { @@ -1043,6 +1046,9 @@ function factory(dependencies) { textInputCursorStart: attr({ default: 0, }), + textInputSelectionDirection: attr({ + default: "none", + }), thread: one2one('mail.thread', { inverse: 'composer', }),