From 0a48c3cecee6241977cb0e8a0f339817b0de8271 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 11:50:11 -0400 Subject: [PATCH 1/8] Separate TextEditor keyboard enablement from readOnly state --- src/text-editor.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/text-editor.js b/src/text-editor.js index 2490ab94b..bf2150eb1 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -130,6 +130,7 @@ class TextEditor { this.decorationManager = params.decorationManager this.selectionsMarkerLayer = params.selectionsMarkerLayer this.mini = (params.mini != null) ? params.mini : false + this.enableKeyboardInput = (params.enableKeyboardInput != null) ? params.enableKeyboardInput : true this.readOnly = (params.readOnly != null) ? params.readOnly : false this.placeholderText = params.placeholderText this.showLineNumbers = params.showLineNumbers @@ -416,6 +417,14 @@ class TextEditor { } break + case 'enableKeyboardInput': + if (value !== this.enableKeyboardInput) { + this.enableKeyboardInput = value + if (this.component != null) { + this.component.scheduleUpdate() + } + } + case 'placeholderText': if (value !== this.placeholderText) { this.placeholderText = value @@ -547,6 +556,7 @@ class TextEditor { preferredLineLength: this.preferredLineLength, mini: this.mini, readOnly: this.readOnly, + enableKeyboardInput: this.enableKeyboardInput, editorWidthInChars: this.editorWidthInChars, width: this.width, maxScreenLineLength: this.maxScreenLineLength, @@ -988,6 +998,12 @@ class TextEditor { isReadOnly () { return this.readOnly } + enableKeyboardInput (enabled) { + this.update({enableKeyboardInput: enabled}) + } + + isKeyboardInputEnabled () { return this.keyboardInputEnabled } + onDidChangeMini (callback) { return this.emitter.on('did-change-mini', callback) } From 6ee477a3294e7c48f55c6e4f10c57b11f966821d Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 11:50:53 -0400 Subject: [PATCH 2/8] Disable the hidden input when the model is readOnly or keyboard disabled --- src/text-editor-component.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index fe6b9db44..878ba010e 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -2965,11 +2965,11 @@ class TextEditorComponent { } setInputEnabled (inputEnabled) { - this.props.model.update({readOnly: !inputEnabled}) + this.props.model.update({enableKeyboardInput: inputEnabled}) } - isInputEnabled (inputEnabled) { - return !this.props.model.isReadOnly() + isInputEnabled () { + return !this.props.model.isReadOnly() && this.props.model.isKeyboardInputEnabled() } getHiddenInput () { From 15457685226ffab6e6c1b0a4a99967a645cd94ce Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 13:23:12 -0400 Subject: [PATCH 3/8] Derive the `readonly` attribute from `model.isReadOnly()` --- src/text-editor-component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index 878ba010e..1f293bafb 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -477,7 +477,7 @@ class TextEditorComponent { attributes.mini = '' } - if (!this.isInputEnabled()) { + if (!model.isReadOnly()) { attributes.readonly = '' } From 1def646e099fc0e4d209fef06a75e5003ad479f2 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 13:35:30 -0400 Subject: [PATCH 4/8] Return the property we're actually setting --- src/text-editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor.js b/src/text-editor.js index bf2150eb1..2cf8820b4 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -1002,7 +1002,7 @@ class TextEditor { this.update({enableKeyboardInput: enabled}) } - isKeyboardInputEnabled () { return this.keyboardInputEnabled } + isKeyboardInputEnabled () { return this.enableKeyboardInput } onDidChangeMini (callback) { return this.emitter.on('did-change-mini', callback) From 4e9544583b8c6514d043372d94774cceb6b4485e Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 14:01:56 -0400 Subject: [PATCH 5/8] Can't use the same name for the property and method --- src/text-editor-component.js | 2 +- src/text-editor.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index 1f293bafb..ed41534fd 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -2965,7 +2965,7 @@ class TextEditorComponent { } setInputEnabled (inputEnabled) { - this.props.model.update({enableKeyboardInput: inputEnabled}) + this.props.model.update({keyboardInputEnabled: inputEnabled}) } isInputEnabled () { diff --git a/src/text-editor.js b/src/text-editor.js index 2cf8820b4..9b99ebc3e 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -130,7 +130,7 @@ class TextEditor { this.decorationManager = params.decorationManager this.selectionsMarkerLayer = params.selectionsMarkerLayer this.mini = (params.mini != null) ? params.mini : false - this.enableKeyboardInput = (params.enableKeyboardInput != null) ? params.enableKeyboardInput : true + this.keyboardInputEnabled = (params.keyboardInputEnabled != null) ? params.keyboardInputEnabled : true this.readOnly = (params.readOnly != null) ? params.readOnly : false this.placeholderText = params.placeholderText this.showLineNumbers = params.showLineNumbers @@ -417,9 +417,9 @@ class TextEditor { } break - case 'enableKeyboardInput': - if (value !== this.enableKeyboardInput) { - this.enableKeyboardInput = value + case 'keyboardInputEnabled': + if (value !== this.keyboardInputEnabled) { + this.keyboardInputEnabled = value if (this.component != null) { this.component.scheduleUpdate() } @@ -556,7 +556,7 @@ class TextEditor { preferredLineLength: this.preferredLineLength, mini: this.mini, readOnly: this.readOnly, - enableKeyboardInput: this.enableKeyboardInput, + keyboardInputEnabled: this.keyboardInputEnabled, editorWidthInChars: this.editorWidthInChars, width: this.width, maxScreenLineLength: this.maxScreenLineLength, @@ -999,10 +999,10 @@ class TextEditor { isReadOnly () { return this.readOnly } enableKeyboardInput (enabled) { - this.update({enableKeyboardInput: enabled}) + this.update({keyboardInputEnabled: enabled}) } - isKeyboardInputEnabled () { return this.enableKeyboardInput } + isKeyboardInputEnabled () { return this.keyboardInputEnabled } onDidChangeMini (callback) { return this.emitter.on('did-change-mini', callback) From 0c2f458497087de76187256ad9e8145ec85039a1 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 14:13:38 -0400 Subject: [PATCH 6/8] Boolean logic, my old enemy --- src/text-editor-component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index ed41534fd..2579bcfd0 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -477,7 +477,7 @@ class TextEditorComponent { attributes.mini = '' } - if (!model.isReadOnly()) { + if (model.isReadOnly()) { attributes.readonly = '' } From 48a622cc74f4ac1c742841948e829bb0ebb42620 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 14:23:17 -0400 Subject: [PATCH 7/8] Increment the version of the readOnly serialization key --- src/text-editor.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/text-editor.js b/src/text-editor.js index 9b99ebc3e..953505083 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -107,6 +107,13 @@ class TextEditor { } state.assert = atomEnvironment.assert.bind(atomEnvironment) + + // Semantics of the readOnly flag have changed since its introduction. + // Only respect readOnly2, which has been set with the current readOnly semantics. + delete state.readOnly + state.readOnly = state.readOnly2 + delete state.readOnly2 + const editor = new TextEditor(state) if (state.registered) { const disposable = atomEnvironment.textEditors.add(editor) @@ -555,7 +562,7 @@ class TextEditor { softWrapAtPreferredLineLength: this.softWrapAtPreferredLineLength, preferredLineLength: this.preferredLineLength, mini: this.mini, - readOnly: this.readOnly, + readOnly2: this.readOnly, // readOnly encompassed both readOnly and keyboardInputEnabled keyboardInputEnabled: this.keyboardInputEnabled, editorWidthInChars: this.editorWidthInChars, width: this.width, From a0c68ec70b5a6e87e1ffcba0d61a63efc4b6aa60 Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Thu, 12 Apr 2018 14:43:13 -0400 Subject: [PATCH 8/8] :shirt: restore missing break --- src/text-editor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/text-editor.js b/src/text-editor.js index 953505083..b1e0980f8 100644 --- a/src/text-editor.js +++ b/src/text-editor.js @@ -431,6 +431,7 @@ class TextEditor { this.component.scheduleUpdate() } } + break case 'placeholderText': if (value !== this.placeholderText) {