     oldp = @stack[i]
     @stack[i] = p
     @emitter.emit 'did-update-progress', p
-    # if p.determinate changes, update the stack display
-    @emitter.emit 'did-update-stack' unless oldp.determinate is p.determinate
+    # if determinate-ness changes, update the stack display
+    @emitter.emit 'did-update-stack' unless oldp.progress*p.progress > 0
 
   emptyStack: () ->
     @stack = []


  emptyProgress: (id = 'empty') ->
    id: id
    determinate: true
    progress: 0

  indeterminateProgress: (id = 'indeterminate') ->
    id: id
    determinate: false

  # update logic
  hasNoDeterminateBars: ->
    @stack.filter((p) => p.determinate).length is 0

  onDidUpdateStack: (f) -> @emitter.on 'did-update-stack', f


# Properties of a progress bar object:
#
#    .id          - A string uniquely identifing the progress bar. Required.
#    .progress    - Number ∈ [-∞, 1]. If negative, the progress bar will be
#                   indeterminate.
#    .leftText    - String displayed to the left of the progress bar (e.g. name).
#    .rightText   - String displayed to the right of the progress bar (e.g. remaining time).
#    .msg         - String displayed when hovering over the progress bar in the stack.
