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
|
path string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *pane) hasVideo() bool { return p.path != "" }
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
gtk.Init(nil)
|
gtk.Init(nil)
|
||||||
|
|
||||||
|
|
@ -68,8 +70,7 @@ func main() {
|
||||||
applyCSS()
|
applyCSS()
|
||||||
preferDark()
|
preferDark()
|
||||||
|
|
||||||
setupDragDest(left, win)
|
setupDragDest(left, right, win)
|
||||||
setupDragDest(right, win)
|
|
||||||
|
|
||||||
win.Connect("destroy", func() {
|
win.Connect("destroy", func() {
|
||||||
if left.mpv != nil {
|
if left.mpv != nil {
|
||||||
|
|
@ -213,7 +214,7 @@ func chooseAndLoad(win *gtk.Window, p *pane) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadIntoPane(p *pane, filename string) {
|
func loadIntoPane(p *pane, filename string) {
|
||||||
if p.mpv == nil {
|
if !ensurePaneReady(p) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
p.path = filename
|
p.path = filename
|
||||||
|
|
@ -306,14 +307,59 @@ func setupDragDest(p *pane, win *gtk.Window) {
|
||||||
if ln == "" {
|
if ln == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if path := uriToPath(ln); path != "" {
|
assignPathToPane(ln, p, nil)
|
||||||
loadIntoPane(p, path)
|
break
|
||||||
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 {
|
func uriToPath(u string) string {
|
||||||
if u == "" {
|
if u == "" {
|
||||||
return ""
|
return ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user