summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-01-13 20:30:18 +0100
committerStefan Haller <stefan@haller-berlin.de>2024-01-14 17:45:35 +0100
commit83337d9fa8ede87b42c5ac5133f5f8c1165ae329 (patch)
tree75f8ff6819c8d6775d4e0bfa0e540d30c20d5ebe /pkg
parent84e1d15079ab688d3a7379868c8b6b71a3a6edb1 (diff)
Allow showing Disabled errors as error panel instead of toast
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/context/menu_context.go4
-rw-r--r--pkg/gui/controllers/local_commits_controller.go2
-rw-r--r--pkg/gui/keybindings.go4
-rw-r--r--pkg/gui/types/common.go6
-rw-r--r--pkg/integration/tests/interactive_rebase/quick_start.go5
5 files changed, 19 insertions, 2 deletions
diff --git a/pkg/gui/context/menu_context.go b/pkg/gui/context/menu_context.go
index d7c982651..b5c1a3c20 100644
--- a/pkg/gui/context/menu_context.go
+++ b/pkg/gui/context/menu_context.go
@@ -173,6 +173,10 @@ func (self *MenuContext) GetKeybindings(opts types.KeybindingsOpts) []*types.Bin
func (self *MenuContext) OnMenuPress(selectedItem *types.MenuItem) error {
if selectedItem != nil && selectedItem.DisabledReason != nil {
+ if selectedItem.DisabledReason.ShowErrorInPanel {
+ return self.c.ErrorMsg(selectedItem.DisabledReason.Text)
+ }
+
self.c.ErrorToast(self.c.Tr.DisabledMenuItemPrefix + selectedItem.DisabledReason.Text)
return nil
}
diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go
index ea2038f71..97151f4fe 100644
--- a/pkg/gui/controllers/local_commits_controller.go
+++ b/pkg/gui/controllers/local_commits_controller.go
@@ -890,7 +890,7 @@ func (self *LocalCommitsController) notMidRebase() *types.DisabledReason {
// For getting disabled reason
func (self *LocalCommitsController) canFindCommitForQuickStart() *types.DisabledReason {
if _, err := self.findCommitForQuickStartInteractiveRebase(); err != nil {
- return &types.DisabledReason{Text: err.Error()}
+ return &types.DisabledReason{Text: err.Error(), ShowErrorInPanel: true}
}
return nil
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 4a64dbde5..26ce8ec91 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -416,6 +416,10 @@ func (gui *Gui) callKeybindingHandler(binding *types.Binding) error {
disabledReason = binding.GetDisabledReason()
}
if disabledReason != nil {
+ if disabledReason.ShowErrorInPanel {
+ return gui.c.ErrorMsg(disabledReason.Text)
+ }
+
gui.c.ErrorToast(gui.Tr.DisabledMenuItemPrefix + disabledReason.Text)
return nil
}
diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go
index 79b4e153c..9053e43f9 100644
--- a/pkg/gui/types/common.go
+++ b/pkg/gui/types/common.go
@@ -203,6 +203,12 @@ type MenuSection struct {
type DisabledReason struct {
Text string
+
+ // When trying to invoke a disabled key binding or menu item, we normally
+ // show the disabled reason as a toast; setting this to true shows it as an
+ // error panel instead. This is useful if the text is very long, or if it is
+ // important enough to show it more prominently, or both.
+ ShowErrorInPanel bool
}
type MenuItem struct {
diff --git a/pkg/integration/tests/interactive_rebase/quick_start.go b/pkg/integration/tests/interactive_rebase/quick_start.go
index 9e95f961e..d0454d6cf 100644
--- a/pkg/integration/tests/interactive_rebase/quick_start.go
+++ b/pkg/integration/tests/interactive_rebase/quick_start.go
@@ -52,7 +52,10 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
// Verify we can't quick start from main
Press(keys.Commits.StartInteractiveRebase)
- t.ExpectToast(Equals("Disabled: Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`."))
+ t.ExpectPopup().Alert().
+ Title(Equals("Error")).
+ Content(Equals("Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `e`.")).
+ Confirm()
t.Views().Branches().
Focus().