From fd4d55089b1bf16615492543998d540fda7d0fe5 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 13 Jun 2024 10:01:35 +0200 Subject: [PATCH] Clear keybinding functions in resetHelpersAndControllers When switching to a repo that was open before, the context tree is reused, so before adding keybinding functions to those contexts again, we need to clear the old ones. --- pkg/gui/context/base_context.go | 5 +++++ pkg/gui/controllers.go | 4 ++++ pkg/gui/types/context.go | 1 + .../tests/ui/keybinding_suggestions_when_switching_repos.go | 3 --- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/gui/context/base_context.go b/pkg/gui/context/base_context.go index acece19942a..60b1886afdf 100644 --- a/pkg/gui/context/base_context.go +++ b/pkg/gui/context/base_context.go @@ -130,6 +130,11 @@ func (self *BaseContext) AddMouseKeybindingsFn(fn types.MouseKeybindingsFn) { self.mouseKeybindingsFns = append(self.mouseKeybindingsFns, fn) } +func (self *BaseContext) ClearAllBindingsFn() { + self.keybindingsFns = []types.KeybindingsFn{} + self.mouseKeybindingsFns = []types.MouseKeybindingsFn{} +} + func (self *BaseContext) AddOnClickFn(fn func() error) { if fn != nil { self.onClickFn = fn diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 1dbf9b7d7d8..d6ac5a26870 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -20,6 +20,10 @@ func (gui *Gui) Helpers() *helpers.Helpers { // in the keybinding menu: the earlier that the controller is attached to a context, // the lower in the list the keybindings will appear. func (gui *Gui) resetHelpersAndControllers() { + for _, context := range gui.Contexts().Flatten() { + context.ClearAllBindingsFn() + } + helperCommon := gui.c recordDirectoryHelper := helpers.NewRecordDirectoryHelper(helperCommon) reposHelper := helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo) diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index 63c759eb6ae..8d53bb6dbce 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -71,6 +71,7 @@ type IBaseContext interface { AddKeybindingsFn(KeybindingsFn) AddMouseKeybindingsFn(MouseKeybindingsFn) + ClearAllBindingsFn() // This is a bit of a hack at the moment: we currently only set an onclick function so that // our list controller can come along and wrap it in a list-specific click handler. diff --git a/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go index 2bf4e53c9c8..62cb16b60d9 100644 --- a/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go +++ b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go @@ -37,9 +37,6 @@ var KeybindingSuggestionsWhenSwitchingRepos = NewIntegrationTest(NewIntegrationT switchToRepo("repo") t.Views().Options().Content( - /* EXPECTED: Equals("Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: ")) - ACTUAL (all keybindings appear twice): */ - Equals("Commit: c | Stash: s | Reset: D | Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: | Keybindings: ? | Cancel: ")) }, })