diff --git a/pkg/gui/context/context.go b/pkg/gui/context/context.go index 5f7c8f163..e33a6c253 100644 --- a/pkg/gui/context/context.go +++ b/pkg/gui/context/context.go @@ -137,6 +137,12 @@ func (self *ViewContextMap) Set(viewName string, context types.Context) { self.content[viewName] = context } +func (self *ViewContextMap) Entries() map[string]types.Context { + self.Lock() + defer self.Unlock() + return self.content +} + type TabContext struct { Tab string Contexts []types.Context diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 7dab1dc99..84203c9e5 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -323,6 +323,8 @@ func (gui *Gui) resetState(filterPath string, reuseState bool) { if state := gui.RepoStateMap[Repo(currentDir)]; state != nil { gui.State = state gui.State.ViewsSetup = false + gui.syncViewContexts() + return } } else { gui.c.Log.Error(err) @@ -341,11 +343,6 @@ func (gui *Gui) resetState(filterPath string, reuseState bool) { viewContextMap := context.NewViewContextMap() for viewName, context := range initialViewContextMapping(contextTree) { viewContextMap.Set(viewName, context) - view, err := gui.g.View(viewName) - if err != nil { - panic(err) - } - view.Context = string(context.GetKey()) } gui.State = &GuiRepoState{ @@ -380,9 +377,21 @@ func (gui *Gui) resetState(filterPath string, reuseState bool) { Contexts: contextTree, } + gui.syncViewContexts() + gui.RepoStateMap[Repo(currentDir)] = gui.State } +func (gui *Gui) syncViewContexts() { + for viewName, context := range gui.State.ViewContextMap.Entries() { + view, err := gui.g.View(viewName) + if err != nil { + panic(err) + } + view.Context = string(context.GetKey()) + } +} + func initialViewContextMapping(contextTree *context.ContextTree) map[string]types.Context { return map[string]types.Context{ "status": contextTree.Status,