From 321fdf06212efba3dfc6dbae6455ced670a4b1b0 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Fri, 3 Mar 2023 20:59:59 -0800 Subject: [PATCH] tracklist column visibility menu can be dismissed with escape key --- ui/controller/controller.go | 3 +++ ui/widgets/listheader.go | 6 +++++- ui/widgets/tracklist.go | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ui/controller/controller.go b/ui/controller/controller.go index 41c37f8..f851dde 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -87,6 +87,9 @@ func (m *Controller) ConnectTracklistActions(tracklist *widgets.Tracklist) { tracklist.OnShowArtistPage = func(artistID string) { m.NavigateTo(ArtistRoute(artistID)) } + tracklist.OnColumnVisibilityMenuShown = func(pop *widget.PopUp) { + m.ClosePopUpOnEscape(pop) + } } func (m *Controller) PromptForFirstServer() { diff --git a/ui/widgets/listheader.go b/ui/widgets/listheader.go index 4fdedc8..d0f3794 100644 --- a/ui/widgets/listheader.go +++ b/ui/widgets/listheader.go @@ -20,7 +20,8 @@ type ListColumn struct { type ListHeader struct { widget.BaseWidget - OnColumnVisibilityChanged func(int, bool) + OnColumnVisibilityChanged func(int, bool) + OnColumnVisibilityMenuShown func(*widget.PopUp) columns []ListColumn columnVisible []bool @@ -84,6 +85,9 @@ func (l *ListHeader) TappedSecondary(e *fyne.PointEvent) { } pop := widget.NewPopUp(l.popUpMenu, fyne.CurrentApp().Driver().CanvasForObject(l)) pop.ShowAtPosition(e.AbsolutePosition) + if l.OnColumnVisibilityMenuShown != nil { + l.OnColumnVisibilityMenuShown(pop) + } } func (l *ListHeader) setupPopUpMenu() { diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 876f623..870f455 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -49,6 +49,8 @@ type Tracklist struct { OnShowArtistPage func(artistID string) OnShowAlbumPage func(albumID string) + OnColumnVisibilityMenuShown func(*widget.PopUp) + visibleColumns []bool selectionMgr util.ListSelectionManager @@ -69,6 +71,11 @@ func NewTracklist(tracks []*subsonic.Child) *Tracklist { t.colLayout = layouts.NewColumnsLayout([]float32{35, -1, -1, -1, 60, 60, 47, 65, 75}) t.buildHeader() t.hdr.OnColumnVisibilityChanged = t.setColumnVisible + t.hdr.OnColumnVisibilityMenuShown = func(pop *widget.PopUp) { + if t.OnColumnVisibilityMenuShown != nil { + t.OnColumnVisibilityMenuShown(pop) + } + } playingIcon := container.NewCenter(container.NewHBox(NewHSpace(2), widget.NewIcon(theme.MediaPlayIcon()))) t.list = widget.NewList( func() int { return len(t.Tracks) },