gui: actually pop stack and keep it fit

This commit is contained in:
Dawid Dziurla 2019-09-02 15:49:13 +02:00
parent c2ea933059
commit f95b49cd6b
No known key found for this signature in database
GPG key ID: 7B6D8368172E9B0B
6 changed files with 14 additions and 10 deletions

View file

@ -84,7 +84,7 @@ func (gui *Gui) prepareConfirmationPanel(currentView *gocui.View, title, prompt
confirmationView.FgColor = gocui.ColorWhite
}
gui.g.Update(func(g *gocui.Gui) error {
return gui.switchFocus(gui.g, currentView, confirmationView)
return gui.switchFocus(gui.g, currentView, confirmationView, false)
})
return confirmationView, nil
}

View file

@ -282,7 +282,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
}
}
if err := gui.switchFocus(gui.g, nil, v); err != nil {
if err := gui.switchFocus(gui.g, nil, v, false); err != nil {
return err
}
}

View file

@ -101,7 +101,7 @@ func (gui *Gui) handleEnterMain(g *gocui.Gui, v *gocui.View) error {
mainView := gui.getMainView()
mainView.ParentView = v
return gui.switchFocus(gui.g, v, mainView)
return gui.switchFocus(gui.g, v, mainView, false)
}
func (gui *Gui) handleExitMain(g *gocui.Gui, v *gocui.View) error {
@ -122,5 +122,5 @@ func (gui *Gui) handleMainClick(g *gocui.Gui, v *gocui.View) error {
v.ParentView = currentView
}
return gui.switchFocus(gui.g, currentView, v)
return gui.switchFocus(gui.g, currentView, v, false)
}

View file

@ -110,7 +110,7 @@ func (gui *Gui) createMenu(title string, items interface{}, itemCount int, handl
}
}
currentView := gui.g.CurrentView()
return gui.switchFocus(gui.g, currentView, menuView)
return gui.switchFocus(gui.g, currentView, menuView, false)
})
return nil
}

View file

@ -30,6 +30,8 @@ func (gui *Gui) RunWithSubprocesses() error {
return err
}
// pop here so we don't stack up view names
gui.State.PreviousViews.Pop()
// ensuring we render e.g. the logs of the currently selected item upon return
gui.State.Panels.Main.ObjectKey = ""
} else {

View file

@ -41,7 +41,8 @@ func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
panic(err)
}
gui.resetMainView()
return gui.switchFocus(g, v, focusedView)
gui.State.PreviousViews.Pop()
return gui.switchFocus(g, v, focusedView, false)
}
func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
@ -66,7 +67,8 @@ func (gui *Gui) previousView(g *gocui.Gui, v *gocui.View) error {
panic(err)
}
gui.resetMainView()
return gui.switchFocus(g, v, focusedView)
gui.State.PreviousViews.Pop()
return gui.switchFocus(g, v, focusedView, false)
}
func (gui *Gui) resetMainView() {
@ -112,15 +114,15 @@ func (gui *Gui) returnFocus(g *gocui.Gui, v *gocui.View) error {
gui.Log.Error(err)
}
}
return gui.switchFocus(g, v, previousView)
return gui.switchFocus(g, v, previousView, true)
}
// pass in oldView = nil if you don't want to be able to return to your old view
// TODO: move some of this logic into our onFocusLost and onFocus hooks
func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View) error {
func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View, returning bool) error {
// we assume we'll never want to return focus to a popup panel i.e.
// we should never stack popup panels
if oldView != nil && !gui.isPopupPanel(oldView.Name()) {
if oldView != nil && !gui.isPopupPanel(oldView.Name()) && !returning {
gui.State.PreviousViews.Push(oldView.Name())
}