mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 16:08:24 +03:00
Don't make hidden input a child of Editor's scrollView
If the input element is a child of the scroll view, then focusing it can end up changing the scroll position of the view behind our backs. We *only* want to scroll the view via our interface on editor, because a bunch of of special code needs to run when we scroll. We can't just have the browser scrolling that view around willy-nilly.
This commit is contained in:
parent
1850da70e3
commit
312f64d200
@ -882,6 +882,12 @@ describe "Editor", ->
|
|||||||
editor.selectAll()
|
editor.selectAll()
|
||||||
expect(editor.scrollTop()).toBe 0
|
expect(editor.scrollTop()).toBe 0
|
||||||
|
|
||||||
|
# regression: does not scroll the scroll view when the editor is refocused
|
||||||
|
editor.hiddenInput.blur()
|
||||||
|
editor.hiddenInput.focus()
|
||||||
|
expect(editor.scrollTop()).toBe 0
|
||||||
|
expect(editor.scrollView.scrollTop()).toBe 0
|
||||||
|
|
||||||
# does auto-scroll when the selection is cleared
|
# does auto-scroll when the selection is cleared
|
||||||
editor.moveCursorDown()
|
editor.moveCursorDown()
|
||||||
expect(editor.scrollTop()).toBeGreaterThan(0)
|
expect(editor.scrollTop()).toBeGreaterThan(0)
|
||||||
|
@ -32,20 +32,18 @@ class CursorView extends View
|
|||||||
super
|
super
|
||||||
|
|
||||||
updateAppearance: (options={}) ->
|
updateAppearance: (options={}) ->
|
||||||
|
autoscroll = options.autoscroll ? true
|
||||||
screenPosition = @getScreenPosition()
|
screenPosition = @getScreenPosition()
|
||||||
pixelPosition = @getPixelPosition()
|
pixelPosition = @getPixelPosition()
|
||||||
@css(pixelPosition)
|
@css(pixelPosition)
|
||||||
|
@autoscroll() if @cursor.isLastCursor() and autoscroll
|
||||||
if @cursor == @editor.getLastCursor()
|
|
||||||
@autoscroll() if options.autoscroll ? true
|
|
||||||
@editor.hiddenInput.css(pixelPosition)
|
|
||||||
|
|
||||||
@setVisible(@cursor.isVisible() and not @editor.isFoldedAtScreenRow(screenPosition.row))
|
@setVisible(@cursor.isVisible() and not @editor.isFoldedAtScreenRow(screenPosition.row))
|
||||||
|
|
||||||
getPixelPosition: ->
|
getPixelPosition: ->
|
||||||
@editor.pixelPositionForScreenPosition(@getScreenPosition())
|
@editor.pixelPositionForScreenPosition(@getScreenPosition())
|
||||||
|
|
||||||
autoscroll: ->
|
autoscroll: ->
|
||||||
|
pixelPosition =
|
||||||
@editor.scrollTo(@getPixelPosition())
|
@editor.scrollTo(@getPixelPosition())
|
||||||
|
|
||||||
setVisible: (visible) ->
|
setVisible: (visible) ->
|
||||||
|
@ -49,6 +49,9 @@ class Cursor
|
|||||||
|
|
||||||
isVisible: -> @visible
|
isVisible: -> @visible
|
||||||
|
|
||||||
|
isLastCursor: ->
|
||||||
|
this == @editor.getLastCursor()
|
||||||
|
|
||||||
clearSelection: ->
|
clearSelection: ->
|
||||||
if @selection
|
if @selection
|
||||||
@selection.clear() unless @selection.retainSelection
|
@selection.clear() unless @selection.retainSelection
|
||||||
|
@ -18,9 +18,9 @@ class Editor extends View
|
|||||||
@content: (params) ->
|
@content: (params) ->
|
||||||
@div class: @classes(params), tabindex: -1, =>
|
@div class: @classes(params), tabindex: -1, =>
|
||||||
@subview 'gutter', new Gutter
|
@subview 'gutter', new Gutter
|
||||||
|
@input class: 'hidden-input', outlet: 'hiddenInput'
|
||||||
@div class: 'scroll-view', outlet: 'scrollView', =>
|
@div class: 'scroll-view', outlet: 'scrollView', =>
|
||||||
@div class: 'lines', outlet: 'renderedLines', =>
|
@div class: 'lines', outlet: 'renderedLines', =>
|
||||||
@input class: 'hidden-input', outlet: 'hiddenInput'
|
|
||||||
@div class: 'vertical-scrollbar', outlet: 'verticalScrollbar', =>
|
@div class: 'vertical-scrollbar', outlet: 'verticalScrollbar', =>
|
||||||
@div outlet: 'verticalScrollbarContent'
|
@div outlet: 'verticalScrollbarContent'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user