diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go index e2df8438..4c3b761a 100644 --- a/pkg/gui/confirmation_panel.go +++ b/pkg/gui/confirmation_panel.go @@ -15,25 +15,27 @@ import ( func (gui *Gui) wrappedConfirmationFunction(function func(*gocui.Gui, *gocui.View) error) func(*gocui.Gui, *gocui.View) error { return func(g *gocui.Gui, v *gocui.View) error { + if err := gui.closeConfirmationPrompt(); err != nil { + return err + } + if function != nil { if err := function(g, v); err != nil { return err } } - return gui.closeConfirmationPrompt() + + return nil } } func (gui *Gui) closeConfirmationPrompt() error { - view, err := gui.g.View("confirmation") - if err != nil { - return nil // if it's already been closed we can just return - } - if err := gui.returnFocus(gui.g, view); err != nil { + if err := gui.returnFocus(gui.g, gui.Views.Confirmation); err != nil { return err } gui.g.DeleteViewKeybindings("confirmation") - return gui.g.DeleteView("confirmation") + gui.Views.Confirmation.Visible = false + return nil } func (gui *Gui) getMessageHeight(wrap bool, message string, width int) int { @@ -62,42 +64,36 @@ func (gui *Gui) getConfirmationPanelDimensions(g *gocui.Gui, wrap bool, prompt s func (gui *Gui) createPromptPanel(g *gocui.Gui, currentView *gocui.View, title string, handleConfirm func(*gocui.Gui, *gocui.View) error) error { gui.onNewPopupPanel() - confirmationView, err := gui.prepareConfirmationPanel(currentView, title, "", false) + err := gui.prepareConfirmationPanel(currentView, title, "", false) if err != nil { return err } - confirmationView.Editable = true + gui.Views.Confirmation.Editable = true return gui.setKeyBindings(g, handleConfirm, nil) } -func (gui *Gui) prepareConfirmationPanel(currentView *gocui.View, title, prompt string, hasLoader bool) (*gocui.View, error) { +func (gui *Gui) prepareConfirmationPanel(currentView *gocui.View, title, prompt string, hasLoader bool) error { x0, y0, x1, y1 := gui.getConfirmationPanelDimensions(gui.g, true, prompt) - confirmationView, err := gui.g.SetView("confirmation", x0, y0, x1, y1, 0) + confirmationView := gui.Views.Confirmation + _, err := gui.g.SetView("confirmation", x0, y0, x1, y1, 0) if err != nil { - if err.Error() != "unknown view" { - return nil, err - } - confirmationView.HasLoader = hasLoader - gui.g.StartTicking() - confirmationView.Title = title - confirmationView.Wrap = true - confirmationView.FgColor = gocui.ColorDefault + return err } + confirmationView.HasLoader = hasLoader + if hasLoader { + gui.g.StartTicking() + } + confirmationView.Title = title + confirmationView.Visible = true gui.g.Update(func(g *gocui.Gui) error { return gui.switchFocus(gui.g, currentView, confirmationView, false) }) - return confirmationView, nil + return nil } func (gui *Gui) onNewPopupPanel() { - viewNames := []string{ - "commitMessage", - "credentials", - "menu", - } - for _, viewName := range viewNames { - _, _ = gui.g.SetViewOnBottom(viewName) - } + gui.Views.Menu.Visible = false + gui.Views.Confirmation.Visible = false } // it is very important that within this function we never include the original prompt in any error messages, because it may contain e.g. a user password @@ -110,17 +106,16 @@ func (gui *Gui) createConfirmationPanel(g *gocui.Gui, currentView *gocui.View, t func (gui *Gui) createPopupPanel(g *gocui.Gui, currentView *gocui.View, title, prompt string, hasLoader bool, handleConfirm, handleClose func(*gocui.Gui, *gocui.View) error) error { gui.onNewPopupPanel() g.Update(func(g *gocui.Gui) error { - // delete the existing confirmation panel if it exists - if view, _ := g.View("confirmation"); view != nil { + if gui.currentViewName() == "confirmation" { if err := gui.closeConfirmationPrompt(); err != nil { gui.Log.Error(err.Error()) } } - confirmationView, err := gui.prepareConfirmationPanel(currentView, title, prompt, hasLoader) + err := gui.prepareConfirmationPanel(currentView, title, prompt, hasLoader) if err != nil { return err } - confirmationView.Editable = false + gui.Views.Confirmation.Editable = false if err := gui.renderString(g, "confirmation", prompt); err != nil { return err } diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index 40bb30ac..adb35818 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -57,10 +57,7 @@ func (gui *Gui) handleMenuClose(g *gocui.Gui, v *gocui.View) error { return err } } - err := g.DeleteView("menu") - if err != nil { - return err - } + gui.Views.Menu.Visible = false return gui.returnFocus(g, v) } @@ -73,7 +70,8 @@ func (gui *Gui) createMenu(title string, items interface{}, itemCount int, handl } x0, y0, x1, y1 := gui.getConfirmationPanelDimensions(gui.g, false, list) - menuView, _ := gui.g.SetView("menu", x0, y0, x1, y1, 0) + _, _ = gui.g.SetView("menu", x0, y0, x1, y1, 0) + menuView := gui.Views.Menu menuView.Title = title menuView.FgColor = gocui.ColorDefault menuView.Clear() @@ -85,11 +83,7 @@ func (gui *Gui) createMenu(title string, items interface{}, itemCount int, handl if err := handlePress(selectedLine); err != nil { return err } - if _, err := gui.g.View("menu"); err == nil { - if _, err := gui.g.SetViewOnBottom("menu"); err != nil { - return err - } - } + menuView.Visible = false return gui.returnFocus(gui.g, menuView) } @@ -105,11 +99,7 @@ func (gui *Gui) createMenu(title string, items interface{}, itemCount int, handl } gui.g.Update(func(g *gocui.Gui) error { - if _, err := gui.g.View("menu"); err == nil { - if _, err := g.SetViewOnTop("menu"); err != nil { - return err - } - } + menuView.Visible = true currentView := gui.g.CurrentView() return gui.switchFocus(gui.g, currentView, menuView, false) }) diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 6e1a62cf..a594ccb5 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -142,9 +142,6 @@ func (gui *Gui) switchFocus(g *gocui.Gui, oldView, newView *gocui.View, returnin if _, err := g.SetCurrentView(newView.Name()); err != nil { return err } - if _, err := g.SetViewOnTop(newView.Name()); err != nil { - return err - } g.Cursor = newView.Editable diff --git a/pkg/gui/views.go b/pkg/gui/views.go index 3f83dd29..3de54c26 100644 --- a/pkg/gui/views.go +++ b/pkg/gui/views.go @@ -106,6 +106,7 @@ func (gui *Gui) createAllViews() error { } gui.Views.Confirmation.Visible = false + gui.Views.Confirmation.Wrap = true gui.Views.Menu.Visible = false gui.Views.Limit.Visible = false