diff --git a/main.go b/main.go index 5a73bac..66a9e93 100644 --- a/main.go +++ b/main.go @@ -7320,12 +7320,7 @@ func (u *ui) passwordLine(label, value string) layout.Widget { } func (u *ui) inlinePasswordToggle(gtx layout.Context, click *widget.Clickable, showing bool) layout.Dimensions { - icon := u.eyeIcon - desc := "Show password" - if showing { - icon = u.eyeOffIcon - desc = "Hide password" - } + icon, desc := u.passwordTogglePresentation(showing) btn := material.IconButton(u.theme, click, icon, desc) btn.Background = color.NRGBA{R: 239, G: 236, B: 229, A: 255} btn.Color = accentColor @@ -7334,6 +7329,13 @@ func (u *ui) inlinePasswordToggle(gtx layout.Context, click *widget.Clickable, s return btn.Layout(gtx) } +func (u *ui) passwordTogglePresentation(showing bool) (*widget.Icon, string) { + if showing { + return u.eyeIcon, "Hide password" + } + return u.eyeOffIcon, "Show password" +} + func (u *ui) detailPasswordValue() string { item, ok := u.selectedEntry() if !ok { diff --git a/main_test.go b/main_test.go index cebd319..6678494 100644 --- a/main_test.go +++ b/main_test.go @@ -8399,6 +8399,28 @@ func TestUIPasswordRevealTogglesDisplayedPasswordAndLockResetsIt(t *testing.T) { } } +func TestUIPasswordTogglePresentationMatchesVisibility(t *testing.T) { + t.Parallel() + + u := newUIWithModel("desktop", vault.Model{}) + + icon, desc := u.passwordTogglePresentation(false) + if icon != u.eyeOffIcon { + t.Fatal("passwordTogglePresentation(false) should use slashed eye icon") + } + if desc != "Show password" { + t.Fatalf("passwordTogglePresentation(false) desc = %q, want %q", desc, "Show password") + } + + icon, desc = u.passwordTogglePresentation(true) + if icon != u.eyeIcon { + t.Fatal("passwordTogglePresentation(true) should use unslashed eye icon") + } + if desc != "Hide password" { + t.Fatalf("passwordTogglePresentation(true) desc = %q, want %q", desc, "Hide password") + } +} + type memoryClipboardWriter struct { content string }