mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 23:48:05 +03:00
Handle focus at the host element level
Detecting focus and blur at the level of the input is creating problems when we blur and then immediately refocus. This is simpler.
This commit is contained in:
parent
62c0db11ee
commit
eb19989ecd
@ -18,8 +18,6 @@ InputComponent = React.createClass
|
||||
node = @getDOMNode()
|
||||
node.addEventListener 'paste', @onPaste
|
||||
node.addEventListener 'compositionupdate', @onCompositionUpdate
|
||||
node.addEventListener 'focus', @onFocus
|
||||
node.addEventListener 'blur', @onBlur
|
||||
|
||||
# Don't let text accumulate in the input forever, but avoid excessive reflows
|
||||
componentDidUpdate: ->
|
||||
@ -37,11 +35,5 @@ InputComponent = React.createClass
|
||||
onPaste: (e) ->
|
||||
e.preventDefault()
|
||||
|
||||
onFocus: ->
|
||||
@props.onFocus?()
|
||||
|
||||
onBlur: ->
|
||||
@props.onBlur?()
|
||||
|
||||
focus: ->
|
||||
@getDOMNode().focus()
|
||||
|
@ -107,8 +107,6 @@ TextEditorComponent = React.createClass
|
||||
ref: 'input'
|
||||
className: 'hidden-input'
|
||||
style: hiddenInputStyle
|
||||
onFocus: @onInputFocused
|
||||
onBlur: @onInputBlurred
|
||||
|
||||
LinesComponent {
|
||||
ref: 'lines',
|
||||
@ -378,7 +376,6 @@ TextEditorComponent = React.createClass
|
||||
listenForDOMEvents: ->
|
||||
node = @getDOMNode()
|
||||
node.addEventListener 'mousewheel', @onMouseWheel
|
||||
node.addEventListener 'focus', @onFocus # For some reason, React's built in focus events seem to bubble
|
||||
node.addEventListener 'textInput', @onTextInput
|
||||
@refs.scrollView.getDOMNode().addEventListener 'mousedown', @onMouseDown
|
||||
|
||||
@ -432,8 +429,13 @@ TextEditorComponent = React.createClass
|
||||
subscriptions.add atom.config.observe scopeDescriptor, 'editor.showLineNumbers', @setShowLineNumbers
|
||||
subscriptions.add atom.config.observe scopeDescriptor, 'editor.scrollSensitivity', @setScrollSensitivity
|
||||
|
||||
onFocus: ->
|
||||
@refs.input.focus() if @isMounted()
|
||||
focused: ->
|
||||
if @isMounted()
|
||||
@setState(focused: true)
|
||||
@refs.input.focus()
|
||||
|
||||
blurred: ->
|
||||
@setState(focused: false)
|
||||
|
||||
onTextInput: (event) ->
|
||||
event.stopPropagation()
|
||||
@ -456,12 +458,6 @@ TextEditorComponent = React.createClass
|
||||
|
||||
inputNode.value = event.data if editor.insertText(event.data)
|
||||
|
||||
onInputFocused: ->
|
||||
@setState(focused: true)
|
||||
|
||||
onInputBlurred: ->
|
||||
@setState(focused: false)
|
||||
|
||||
onVerticalScroll: (scrollTop) ->
|
||||
{editor} = @props
|
||||
|
||||
|
@ -91,7 +91,7 @@ class TextEditorElement extends HTMLElement
|
||||
|
||||
focused: ->
|
||||
if @component?
|
||||
@component.onFocus()
|
||||
@component.focused()
|
||||
else
|
||||
@focusOnAttach = true
|
||||
|
||||
@ -99,6 +99,7 @@ class TextEditorElement extends HTMLElement
|
||||
event.stopImmediatePropagation() if @contains(event.relatedTarget)
|
||||
|
||||
blurred: (event) ->
|
||||
@component.blurred()
|
||||
event.stopImmediatePropagation() if @contains(event.relatedTarget)
|
||||
|
||||
addGrammarScopeAttribute: ->
|
||||
|
Loading…
Reference in New Issue
Block a user