From f6ee1601869a004289b9633d4888ccb08608d65f Mon Sep 17 00:00:00 2001 From: Abe Jellinek Date: Thu, 16 May 2024 11:07:47 -0400 Subject: [PATCH] editable-text: Reset state after programmatic blur() Regardless of whether the window is active. Fully fixes #4101 --- .../content/zotero/elements/editableText.js | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/chrome/content/zotero/elements/editableText.js b/chrome/content/zotero/elements/editableText.js index 5e30b8df56..d6cbf2c488 100644 --- a/chrome/content/zotero/elements/editableText.js +++ b/chrome/content/zotero/elements/editableText.js @@ -316,16 +316,19 @@ this._ignoredWindowInactiveBlur = true; return; } - this._ignoredWindowInactiveBlur = false; - - this.dispatchEvent(new Event('blur')); - this.classList.remove("focused"); - this._input.scrollLeft = 0; - this._input.setSelectionRange(0, 0); - this.removeAttribute("mousedown"); - delete this._input.dataset.initialValue; + this._resetStateAfterBlur(); }; + _resetStateAfterBlur() { + this._ignoredWindowInactiveBlur = false; + this.dispatchEvent(new Event('blur')); + this.classList.remove('focused'); + this._input.scrollLeft = 0; + this._input.setSelectionRange(0, 0); + this.removeAttribute('mousedown'); + delete this._input.dataset.initialValue; + } + _handleKeyDown = (event) => { if (event.key === 'Enter') { if (this.multiline === event.shiftKey) { @@ -390,6 +393,10 @@ blur() { this._input?.blur(); + + // This is a programmatic blur, so reset our state even if the + // window is inactive + this._resetStateAfterBlur(); } get focused() {