From 17fa580ecd762024a3c854de4321d24bc9d6bc81 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 2 Jul 2014 10:11:35 -0600 Subject: [PATCH] Ignore 'scroll' events when an update is pending This prevents feedback loops where we handle stale 'scroll' events for scrolls requested in the model layer. It prevents jitter when autoscrolling with the cursor. --- spec/editor-component-spec.coffee | 2 +- src/editor-component.coffee | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/editor-component-spec.coffee b/spec/editor-component-spec.coffee index 2b1e3c93e..0fbdb8858 100644 --- a/spec/editor-component-spec.coffee +++ b/spec/editor-component-spec.coffee @@ -724,11 +724,11 @@ describe "EditorComponent", -> # Add decorations that are out of range marker2 = editor.displayBuffer.markBufferRange([[9, 0], [9, 0]]) editor.addDecorationForMarker(marker2, type: ['gutter', 'line'], class: 'b') + runSetImmediateCallbacks() # Scroll decorations into view verticalScrollbarNode.scrollTop = 2.5 * lineHeightInPixels verticalScrollbarNode.dispatchEvent(new UIEvent('scroll')) - runSetImmediateCallbacks() expect(lineAndLineNumberHaveClass(9, 'b')).toBe true # Fold a line to move the decorations diff --git a/src/editor-component.coffee b/src/editor-component.coffee index e101e00f4..714f72735 100644 --- a/src/editor-component.coffee +++ b/src/editor-component.coffee @@ -529,7 +529,7 @@ EditorComponent = React.createClass onVerticalScroll: (scrollTop) -> {editor} = @props - return if scrollTop is editor.getScrollTop() + return if @updateRequested or scrollTop is editor.getScrollTop() animationFramePending = @pendingScrollTop? @pendingScrollTop = scrollTop @@ -542,7 +542,7 @@ EditorComponent = React.createClass onHorizontalScroll: (scrollLeft) -> {editor} = @props - return if scrollLeft is editor.getScrollLeft() + return if @updateRequested or scrollLeft is editor.getScrollLeft() animationFramePending = @pendingScrollLeft? @pendingScrollLeft = scrollLeft