From fb7f51d3efae2726e8e077c4c508b9c3ccb707de Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 17 Feb 2024 08:43:50 -0800 Subject: [PATCH] add focus traversal to genre list in album filter panel --- ui/widgets/albumfilterbutton.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/ui/widgets/albumfilterbutton.go b/ui/widgets/albumfilterbutton.go index 70e5d5f..59ace53 100644 --- a/ui/widgets/albumfilterbutton.go +++ b/ui/widgets/albumfilterbutton.go @@ -241,7 +241,11 @@ func NewGenreFilterSubsection(onChanged func([]string), initialSelectedGenres [] return len(g.genreListViewModel) }, func() fyne.CanvasObject { - return newGenreListViewRow(g.onGenreSelected) + row := newGenreListViewRow(g.onGenreSelected) + row.OnFocusNeighbor = func(up bool) { + g.genreListView.FocusNeighbor(row.ItemID(), up) + } + return row }, func(id widget.ListItemID, obj fyne.CanvasObject) { g.listModelMutex.RLock() @@ -251,9 +255,10 @@ func NewGenreFilterSubsection(onChanged func([]string), initialSelectedGenres [] _, selected := g.selectedGenres[genre] g.selectedGenresMutex.RUnlock() row := obj.(*genreListViewRow) - row.ID = id - row.Text = genre - row.Checked = selected + g.genreListView.SetItemForID(id, row) + row.ListItemID = id + row.Content.(*widget.Check).Text = genre + row.Content.(*widget.Check).Checked = selected row.Refresh() }, ) @@ -361,16 +366,18 @@ func (g *GenreFilterSubsection) CreateRenderer() fyne.WidgetRenderer { } type genreListViewRow struct { - widget.Check - - ID widget.ListItemID + FocusListRowBase } func newGenreListViewRow(onChanged func(widget.ListItemID, bool)) *genreListViewRow { g := &genreListViewRow{} g.ExtendBaseWidget(g) - g.OnChanged = func(b bool) { - onChanged(g.ID, b) + g.Content = widget.NewCheck("", func(b bool) { + onChanged(g.ItemID(), b) + }) + g.OnTapped = func() { + chk := g.Content.(*widget.Check) + chk.SetChecked(!chk.Checked) } return g }