diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 5a104352b..37c54a655 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -115,7 +115,7 @@ func (gui *Gui) resetHelpersAndControllers() { Confirmation: helpers.NewConfirmationHelper(helperCommon), Mode: modeHelper, AppStatus: appStatusHelper, - InlineStatus: helpers.NewInlineStatusHelper(helperCommon), + InlineStatus: helpers.NewInlineStatusHelper(helperCommon, windowHelper), WindowArrangement: helpers.NewWindowArrangementHelper( gui.c, windowHelper, diff --git a/pkg/gui/controllers/helpers/inline_status_helper.go b/pkg/gui/controllers/helpers/inline_status_helper.go index d4435e5b9..7417ee5c9 100644 --- a/pkg/gui/controllers/helpers/inline_status_helper.go +++ b/pkg/gui/controllers/helpers/inline_status_helper.go @@ -4,6 +4,7 @@ import ( "time" "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/utils" "github.com/sasha-s/go-deadlock" @@ -12,13 +13,15 @@ import ( type InlineStatusHelper struct { c *HelperCommon + windowHelper *WindowHelper contextsWithInlineStatus map[types.ContextKey]*inlineStatusInfo mutex *deadlock.Mutex } -func NewInlineStatusHelper(c *HelperCommon) *InlineStatusHelper { +func NewInlineStatusHelper(c *HelperCommon, windowHelper *WindowHelper) *InlineStatusHelper { return &InlineStatusHelper{ c: c, + windowHelper: windowHelper, contextsWithInlineStatus: make(map[types.ContextKey]*inlineStatusInfo), mutex: &deadlock.Mutex{}, } @@ -61,18 +64,33 @@ func (self inlineStatusHelperTask) Continue() { } func (self *InlineStatusHelper) WithInlineStatus(opts InlineStatusOpts, f func(gocui.Task) error) { - self.c.OnWorker(func(task gocui.Task) { - self.start(opts) + context := self.c.ContextForKey(opts.ContextKey) + view := context.GetView() + visible := view.Visible && self.windowHelper.TopViewInWindow(context.GetWindowName()) == view + if visible { + self.c.OnWorker(func(task gocui.Task) { + self.start(opts) - err := f(inlineStatusHelperTask{task, self, opts}) - if err != nil { - self.c.OnUIThread(func() error { - return self.c.Error(err) - }) - } + err := f(inlineStatusHelperTask{task, self, opts}) + if err != nil { + self.c.OnUIThread(func() error { + return self.c.Error(err) + }) + } - self.stop(opts) - }) + self.stop(opts) + }) + } else { + message := presentation.ItemOperationToString(opts.Operation, self.c.Tr) + _ = self.c.WithWaitingStatus(message, func(t gocui.Task) error { + // We still need to set the item operation, because it might be used + // for other (non-presentation) purposes + self.c.State().SetItemOperation(opts.Item, opts.Operation) + defer self.c.State().ClearItemOperation(opts.Item) + + return f(t) + }) + } } func (self *InlineStatusHelper) start(opts InlineStatusOpts) { diff --git a/pkg/gui/presentation/branches.go b/pkg/gui/presentation/branches.go index a2e9f139f..a2bb97ed2 100644 --- a/pkg/gui/presentation/branches.go +++ b/pkg/gui/presentation/branches.go @@ -163,7 +163,7 @@ func ColoredBranchStatus(branch *models.Branch, itemOperation types.ItemOperatio } func BranchStatus(branch *models.Branch, itemOperation types.ItemOperation, tr *i18n.TranslationSet, now time.Time) string { - itemOperationStr := itemOperationToString(itemOperation, tr) + itemOperationStr := ItemOperationToString(itemOperation, tr) if itemOperationStr != "" { return itemOperationStr + " " + utils.Loader(now) } diff --git a/pkg/gui/presentation/item_operations.go b/pkg/gui/presentation/item_operations.go index afa48da4f..85b81a123 100644 --- a/pkg/gui/presentation/item_operations.go +++ b/pkg/gui/presentation/item_operations.go @@ -5,7 +5,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/i18n" ) -func itemOperationToString(itemOperation types.ItemOperation, tr *i18n.TranslationSet) string { +func ItemOperationToString(itemOperation types.ItemOperation, tr *i18n.TranslationSet) string { switch itemOperation { case types.ItemOperationNone: return "" diff --git a/pkg/gui/presentation/tags.go b/pkg/gui/presentation/tags.go index c210bdebc..2d3a73755 100644 --- a/pkg/gui/presentation/tags.go +++ b/pkg/gui/presentation/tags.go @@ -37,7 +37,7 @@ func getTagDisplayStrings(t *models.Tag, itemOperation types.ItemOperation, diff } descriptionColor := style.FgYellow descriptionStr := descriptionColor.Sprint(t.Description()) - itemOperationStr := itemOperationToString(itemOperation, tr) + itemOperationStr := ItemOperationToString(itemOperation, tr) if itemOperationStr != "" { descriptionStr = style.FgCyan.Sprint(itemOperationStr+" "+utils.Loader(time.Now())) + " " + descriptionStr }