From 471ea397582775476d5636c6c5179b89e411e4e9 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 17 Mar 2024 17:57:16 +0100 Subject: Fix inline status removal when recording demos --- pkg/gui/controllers/helpers/inline_status_helper.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/gui/controllers/helpers/inline_status_helper.go b/pkg/gui/controllers/helpers/inline_status_helper.go index 2476a57cf..7bc8cb456 100644 --- a/pkg/gui/controllers/helpers/inline_status_helper.go +++ b/pkg/gui/controllers/helpers/inline_status_helper.go @@ -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) { -- cgit v1.2.3