Fix inline status removal when recording demos

This commit is contained in:
Stefan Haller 2024-03-17 17:57:16 +01:00 committed by Jesse Duffield
parent c3f0b5cb4a
commit 471ea39758

View file

@ -131,12 +131,28 @@ func (self *InlineStatusHelper) stop(opts InlineStatusOpts) {
info.stop <- struct{}{}
delete(self.contextsWithInlineStatus, opts.ContextKey)
}
}
self.mutex.Unlock()
self.c.State().ClearItemOperation(opts.Item)
// When recording a demo we need to re-render the context again here to
// remove the inline status. In normal usage we don't want to do this
// because in the case of pushing a branch this would first reveal the ↑3↓7
// status from before the push for a brief moment, to be replaced by a green
// checkmark a moment later when the async refresh is done. This looks
// jarring, so normally we rely on the async refresh to redraw with the
// status removed. (In some rare cases, where there's no refresh at all, we
// need to redraw manually in the controller; see TagsController.push() for
// an example.)
//
// In demos, however, we turn all async refreshes into sync ones, because
// this looks better in demos. In this case the refresh happens while the
// status is still set, so we need to render again after removing it.
if self.c.InDemo() {
self.renderContext(opts.ContextKey)
}
}
func (self *InlineStatusHelper) renderContext(contextKey types.ContextKey) {