forked from Leak_Technologies/VideoTools
Assign drags to first-empty pane and ensure mpv ready before load
This commit is contained in:
parent
29bc1ac19c
commit
bd1b90be03
|
|
@ -42,6 +42,8 @@ type pane struct {
|
|||
path string
|
||||
}
|
||||
|
||||
func (p *pane) hasVideo() bool { return p.path != "" }
|
||||
|
||||
func main() {
|
||||
gtk.Init(nil)
|
||||
|
||||
|
|
@ -68,8 +70,7 @@ func main() {
|
|||
applyCSS()
|
||||
preferDark()
|
||||
|
||||
setupDragDest(left, win)
|
||||
setupDragDest(right, win)
|
||||
setupDragDest(left, right, win)
|
||||
|
||||
win.Connect("destroy", func() {
|
||||
if left.mpv != nil {
|
||||
|
|
@ -213,7 +214,7 @@ func chooseAndLoad(win *gtk.Window, p *pane) {
|
|||
}
|
||||
|
||||
func loadIntoPane(p *pane, filename string) {
|
||||
if p.mpv == nil {
|
||||
if !ensurePaneReady(p) {
|
||||
return
|
||||
}
|
||||
p.path = filename
|
||||
|
|
@ -306,14 +307,59 @@ func setupDragDest(p *pane, win *gtk.Window) {
|
|||
if ln == "" {
|
||||
continue
|
||||
}
|
||||
if path := uriToPath(ln); path != "" {
|
||||
loadIntoPane(p, path)
|
||||
break
|
||||
}
|
||||
assignPathToPane(ln, p, nil)
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// decide which pane to load based on availability: left prefers first, right second.
|
||||
func assignPathToPane(uri string, left, right *pane) {
|
||||
path := uriToPath(uri)
|
||||
if path == "" {
|
||||
return
|
||||
}
|
||||
if left != nil && !left.hasVideo() {
|
||||
loadIntoPane(left, path)
|
||||
return
|
||||
}
|
||||
if right != nil && !right.hasVideo() {
|
||||
loadIntoPane(right, path)
|
||||
return
|
||||
}
|
||||
// default: replace left
|
||||
if left != nil {
|
||||
loadIntoPane(left, path)
|
||||
}
|
||||
}
|
||||
|
||||
func ensurePaneReady(p *pane) bool {
|
||||
if p == nil {
|
||||
return false
|
||||
}
|
||||
if p.mpv != nil {
|
||||
return true
|
||||
}
|
||||
mpv, err := mpvembed.New()
|
||||
if err != nil {
|
||||
log.Printf("mpv create: %v", err)
|
||||
return false
|
||||
}
|
||||
// Bind window if realized
|
||||
if w, err := p.area.GetWindow(); err == nil && w != nil {
|
||||
if xid := getWindowID(w); xid != 0 {
|
||||
_ = mpv.SetWID(xid)
|
||||
}
|
||||
}
|
||||
_ = mpv.SetOptionString("pause", "yes")
|
||||
if err := mpv.Initialize(); err != nil {
|
||||
log.Printf("mpv init: %v", err)
|
||||
return false
|
||||
}
|
||||
p.mpv = mpv
|
||||
return true
|
||||
}
|
||||
|
||||
func uriToPath(u string) string {
|
||||
if u == "" {
|
||||
return ""
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user