       oldScrollLeft = @scrollLeft
       @scrollLeft = scrollLeft
       @model.setScrollLeft(scrollLeft)
-      @updateHorizontalScrollState()
-      @updateHiddenInputState()
-      @updateCursorsState() unless oldScrollLeft?
-      @updateOverlaysState()
+      @shouldUpdateHorizontalScrollState = true
+      @shouldUpdateHiddenInputState = true
+      @shouldUpdateCursorsState = true unless oldScrollLeft?
+      @shouldUpdateOverlaysState = true
+
+      @emitDidUpdateState()
 
   setHorizontalScrollbarHeight: (horizontalScrollbarHeight) ->
     unless @measuredHorizontalScrollbarHeight is horizontalScrollbarHeight

        @startBlinkingCursors()
      else
        @stopBlinkingCursors(false)
      @updateFocusedState()
      @updateHiddenInputState()

  setScrollTop: (scrollTop) ->
    scrollTop = @constrainScrollTop(scrollTop)

      @disposables.remove(didChangePositionDisposable)
      @disposables.remove(didChangeVisibilityDisposable)
      @disposables.remove(didDestroyDisposable)
      @shouldUpdateHiddenInputState = true
      @updateCursorState(cursor, true)

      @emitDidUpdateState()

    @disposables.add(didChangePositionDisposable)
    @disposables.add(didChangeVisibilityDisposable)
