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 confirmationView.FgColor = gocui.ColorWhite
} }
gui.g.Update(func(g *gocui.Gui) error { 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 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 return err
} }
} }

View file

@ -101,7 +101,7 @@ func (gui *Gui) handleEnterMain(g *gocui.Gui, v *gocui.View) error {
mainView := gui.getMainView() mainView := gui.getMainView()
mainView.ParentView = v 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 { 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 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() currentView := gui.g.CurrentView()
return gui.switchFocus(gui.g, currentView, menuView) return gui.switchFocus(gui.g, currentView, menuView, false)
}) })
return nil return nil
} }

View file

@ -30,6 +30,8 @@ func (gui *Gui) RunWithSubprocesses() error {
return err 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 // ensuring we render e.g. the logs of the currently selected item upon return
gui.State.Panels.Main.ObjectKey = "" gui.State.Panels.Main.ObjectKey = ""
} else { } else {

View file

@ -41,7 +41,8 @@ func (gui *Gui) nextView(g *gocui.Gui, v *gocui.View) error {
panic(err) panic(err)
} }
gui.resetMainView() 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 { 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) panic(err)
} }
gui.resetMainView() gui.resetMainView()
return gui.switchFocus(g, v, focusedView) gui.State.PreviousViews.Pop()
return gui.switchFocus(g, v, focusedView, false)
} }
func (gui *Gui) resetMainView() { func (gui *Gui) resetMainView() {
@ -112,15 +114,15 @@ func (gui *Gui) returnFocus(g *gocui.Gui, v *gocui.View) error {
gui.Log.Error(err) 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 // 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 // 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 assume we'll never want to return focus to a popup panel i.e.
// we should never stack popup panels // 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()) gui.State.PreviousViews.Push(oldView.Name())
} }