Auto-start playback, guard view rebuilds, and clean window close
This commit is contained in:
parent
fc1e91bda6
commit
e727b8ea09
29
main.go
29
main.go
|
|
@ -599,7 +599,7 @@ func (s *appState) showPlayerView() {
|
|||
if err != nil || r == nil {
|
||||
return
|
||||
}
|
||||
path := r.URI().Path()
|
||||
path := uriPath(r.URI())
|
||||
r.Close()
|
||||
go s.loadVideo(path)
|
||||
}, s.window)
|
||||
|
|
@ -1989,10 +1989,6 @@ func runGUI() {
|
|||
a.Settings().SetTheme(&ui.MonoTheme{})
|
||||
logging.Debug(logging.CatUI, "created fyne app: %#v", a)
|
||||
w := a.NewWindow("VT Player")
|
||||
w.SetOnClosed(func() {
|
||||
state.onClose()
|
||||
a.Quit()
|
||||
})
|
||||
if icon := utils.LoadAppIcon(); icon != nil {
|
||||
a.SetIcon(icon)
|
||||
w.SetIcon(icon)
|
||||
|
|
@ -2105,6 +2101,11 @@ func runGUI() {
|
|||
|
||||
// Stats update loop disabled in player-only mode to avoid view churn.
|
||||
|
||||
w.SetOnClosed(func() {
|
||||
state.onClose()
|
||||
a.Quit()
|
||||
})
|
||||
|
||||
w.ShowAndRun()
|
||||
}
|
||||
|
||||
|
|
@ -3438,11 +3439,9 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
|||
state.currentFrame = sourceFrame
|
||||
}
|
||||
|
||||
var img *canvas.Image
|
||||
img := canvas.NewImageFromResource(nil)
|
||||
if sourceFrame != "" {
|
||||
img = canvas.NewImageFromFile(sourceFrame)
|
||||
} else {
|
||||
img = canvas.NewImageFromResource(nil)
|
||||
}
|
||||
img.FillMode = canvas.ImageFillContain
|
||||
// Don't set rigid MinSize on image - it will scale to container
|
||||
|
|
@ -3506,6 +3505,7 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
|||
}
|
||||
|
||||
var controls fyne.CanvasObject
|
||||
autoStarted := false
|
||||
if usePlayer {
|
||||
var volIcon *widget.Button
|
||||
var updatingVolume bool
|
||||
|
|
@ -3518,7 +3518,9 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
|||
return false
|
||||
}
|
||||
state.playSess.SetVolume(state.playerVolume)
|
||||
state.playerPaused = true
|
||||
state.playerPaused = false
|
||||
state.playSess.Play()
|
||||
autoStarted = true
|
||||
}
|
||||
return state.playSess != nil
|
||||
}
|
||||
|
|
@ -3606,6 +3608,15 @@ func buildVideoPane(state *appState, min fyne.Size, src *videoSource, onCover fu
|
|||
container.NewHBox(playBtn, fullBtn, coverBtn, importBtn, layout.NewSpacer(), volBox),
|
||||
progress,
|
||||
)
|
||||
|
||||
// Auto-start playback once when view is built
|
||||
if !autoStarted {
|
||||
if ensureSession() {
|
||||
state.playSess.Play()
|
||||
state.playerPaused = false
|
||||
fmt.Printf("▶ Auto-start playback\n")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
slider := widget.NewSlider(0, math.Max(1, float64(len(src.PreviewFrames)-1)))
|
||||
slider.Step = 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user