From f95b49cd6b4f7c8e322f260b60abe12b67acc6ec Mon Sep 17 00:00:00 2001 From: Dawid Dziurla Date: Mon, 2 Sep 2019 15:49:13 +0200 Subject: [PATCH] gui: actually pop stack and keep it fit --- pkg/gui/confirmation_panel.go | 2 +- pkg/gui/layout.go | 2 +- pkg/gui/main_panel.go | 4 ++-- pkg/gui/menu_panel.go | 2 +- pkg/gui/subprocess.go | 2 ++ pkg/gui/view_helpers.go | 12 +++++++----- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go index 64753b74..ff63cba1 100644 --- a/pkg/gui/confirmation_panel.go +++ b/pkg/gui/confirmation_panel.go @@ -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 } diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index c62e5965..aa90d771 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -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 } } diff --git a/pkg/gui/main_panel.go b/pkg/gui/main_panel.go index dc3e2a52..6b59ef73 100644 --- a/pkg/gui/main_panel.go +++ b/pkg/gui/main_panel.go @@ -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) } diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index 0602bdab..5406cf84 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -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 } diff --git a/pkg/gui/subprocess.go b/pkg/gui/subprocess.go index 6efa8ac2..404c2b82 100644 --- a/pkg/gui/subprocess.go +++ b/pkg/gui/subprocess.go @@ -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 { diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 1268deba..eeb53fd0 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -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()) }