Harden phone entry click state
This commit is contained in:
@@ -645,13 +645,21 @@ func (u *ui) filter() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
u.visible = visible
|
u.visible = visible
|
||||||
if len(u.entryClicks) < len(u.visible) {
|
u.ensureEntryClicks()
|
||||||
u.entryClicks = make([]widget.Clickable, len(u.visible))
|
}
|
||||||
|
|
||||||
|
func (u *ui) ensureEntryClicks() {
|
||||||
|
if len(u.entryClicks) >= len(u.visible) {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
next := make([]widget.Clickable, len(u.visible))
|
||||||
|
copy(next, u.entryClicks)
|
||||||
|
u.entryClicks = next
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *ui) visibleEntrySnapshot() ([]entry, []*widget.Clickable) {
|
func (u *ui) visibleEntrySnapshot() ([]entry, []*widget.Clickable) {
|
||||||
visible := append([]entry(nil), u.visible...)
|
visible := append([]entry(nil), u.visible...)
|
||||||
|
u.ensureEntryClicks()
|
||||||
clicks := make([]*widget.Clickable, len(visible))
|
clicks := make([]*widget.Clickable, len(visible))
|
||||||
for i := range visible {
|
for i := range visible {
|
||||||
clicks[i] = &u.entryClicks[i]
|
clicks[i] = &u.entryClicks[i]
|
||||||
|
|||||||
@@ -849,6 +849,28 @@ func TestUIVisibleEntrySnapshotIsStableAfterVisibleMutation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUIVisibleEntrySnapshotRegrowsClickableState(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
u := newUIWithModel("phone", vault.Model{
|
||||||
|
Entries: []vault.Entry{
|
||||||
|
{ID: "1", Title: "Alpha", Path: []string{"Crew", "Internet"}},
|
||||||
|
{ID: "2", Title: "Beta", Path: []string{"Crew", "Internet"}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
u.state.NavigateToPath([]string{"Crew", "Internet"})
|
||||||
|
u.filter()
|
||||||
|
u.entryClicks = u.entryClicks[:1]
|
||||||
|
|
||||||
|
visible, clicks := u.visibleEntrySnapshot()
|
||||||
|
if len(visible) != 2 || len(clicks) != 2 {
|
||||||
|
t.Fatalf("snapshot lengths = (%d, %d), want (2, 2)", len(visible), len(clicks))
|
||||||
|
}
|
||||||
|
if clicks[1] == nil {
|
||||||
|
t.Fatal("regrown click pointer = nil, want usable clickable state")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUIPhoneBackReturnsFromSubscreenToEntries(t *testing.T) {
|
func TestUIPhoneBackReturnsFromSubscreenToEntries(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user