Stabilize queue back navigation
This commit is contained in:
parent
7226da0970
commit
e919339e3d
24
main.go
24
main.go
|
|
@ -816,6 +816,8 @@ type appState struct {
|
||||||
window fyne.Window
|
window fyne.Window
|
||||||
active string
|
active string
|
||||||
lastModule string
|
lastModule string
|
||||||
|
queueBackTarget string
|
||||||
|
queueLastRefresh time.Time
|
||||||
navigationHistory []string // Track module navigation history for back/forward buttons
|
navigationHistory []string // Track module navigation history for back/forward buttons
|
||||||
navigationHistoryPosition int // Current position in navigation history
|
navigationHistoryPosition int // Current position in navigation history
|
||||||
navigationHistorySuppress bool // Temporarily suppress history tracking during navigation
|
navigationHistorySuppress bool // Temporarily suppress history tracking during navigation
|
||||||
|
|
@ -1593,6 +1595,7 @@ func (s *appState) showMainMenu() {
|
||||||
s.stopPlayer()
|
s.stopPlayer()
|
||||||
s.stopQueueAutoRefresh()
|
s.stopQueueAutoRefresh()
|
||||||
s.active = ""
|
s.active = ""
|
||||||
|
s.queueBackTarget = ""
|
||||||
|
|
||||||
// Track navigation history
|
// Track navigation history
|
||||||
s.pushNavigationHistory("mainmenu")
|
s.pushNavigationHistory("mainmenu")
|
||||||
|
|
@ -1697,7 +1700,10 @@ func (s *appState) showMainMenu() {
|
||||||
func (s *appState) showQueue() {
|
func (s *appState) showQueue() {
|
||||||
s.stopPreview()
|
s.stopPreview()
|
||||||
s.stopPlayer()
|
s.stopPlayer()
|
||||||
s.lastModule = s.active
|
if s.active != "queue" {
|
||||||
|
s.lastModule = s.active
|
||||||
|
s.queueBackTarget = s.active
|
||||||
|
}
|
||||||
s.active = "queue"
|
s.active = "queue"
|
||||||
s.refreshQueueView()
|
s.refreshQueueView()
|
||||||
s.startQueueAutoRefresh()
|
s.startQueueAutoRefresh()
|
||||||
|
|
@ -1705,6 +1711,14 @@ func (s *appState) showQueue() {
|
||||||
|
|
||||||
// refreshQueueView rebuilds the queue UI while preserving scroll position and inline active conversion.
|
// refreshQueueView rebuilds the queue UI while preserving scroll position and inline active conversion.
|
||||||
func (s *appState) refreshQueueView() {
|
func (s *appState) refreshQueueView() {
|
||||||
|
if s.active == "queue" {
|
||||||
|
now := time.Now()
|
||||||
|
if !s.queueLastRefresh.IsZero() && now.Sub(s.queueLastRefresh) < 500*time.Millisecond {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s.queueLastRefresh = now
|
||||||
|
}
|
||||||
|
|
||||||
// Preserve current scroll offset if we already have a view
|
// Preserve current scroll offset if we already have a view
|
||||||
if s.queueScroll != nil {
|
if s.queueScroll != nil {
|
||||||
s.queueOffset = s.queueScroll.Offset
|
s.queueOffset = s.queueScroll.Offset
|
||||||
|
|
@ -1736,8 +1750,12 @@ func (s *appState) refreshQueueView() {
|
||||||
view, scroll := ui.BuildQueueView(
|
view, scroll := ui.BuildQueueView(
|
||||||
jobs,
|
jobs,
|
||||||
func() { // onBack
|
func() { // onBack
|
||||||
if s.lastModule != "" && s.lastModule != "queue" && s.lastModule != "menu" {
|
target := s.queueBackTarget
|
||||||
s.showModule(s.lastModule)
|
if target == "" {
|
||||||
|
target = s.lastModule
|
||||||
|
}
|
||||||
|
if target != "" && target != "queue" && target != "menu" {
|
||||||
|
s.showModule(target)
|
||||||
} else {
|
} else {
|
||||||
s.showMainMenu()
|
s.showMainMenu()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user