diff --git a/dlgs_windows.go b/dlgs_windows.go index b0a9686..cba2574 100644 --- a/dlgs_windows.go +++ b/dlgs_windows.go @@ -2,7 +2,9 @@ package dialog import ( "fmt" + "path" "reflect" + "slices" "syscall" "unicode/utf16" "unsafe" @@ -62,7 +64,17 @@ func (b *FileBuilder) load() (string, error) { func (b *FileBuilder) save() (string, error) { d := openfile(w32.OFN_OVERWRITEPROMPT|w32.OFN_NOCHANGEDIR, b) if w32.GetSaveFileName(d.opf) { - return d.Filename(), nil + filename := d.Filename() + filterExt := b.Filters[d.opf.FilterIndex-1].Extensions + fileext := path.Ext(filename) + if len(fileext) > 0 { + fileext = fileext[1:] + } + if slices.Contains(filterExt, fileext) { + return filename, nil + } + + return filename + "." + filterExt[0], nil } return "", err() } diff --git a/go.mod b/go.mod index ffa1366..dcbe319 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,16 @@ module github.com/sqweek/dialog +go 1.26 + +require ( + github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d + github.com/skelterjohn/go.wde v0.0.0-20190318181201-adc3f78cdb45 +) + require ( - github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf + github.com/AllenDang/w32 v0.0.0-20180428130237-ad0a36d80adc // indirect + github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298 // indirect + github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966 // indirect + github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc // indirect + github.com/BurntSushi/xgbutil v0.0.0-20190907113008-ad855c713046 // indirect ) diff --git a/go.sum b/go.sum index 842aef2..e14ba1a 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,14 @@ -github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf h1:FPsprx82rdrX2jiKyS17BH6IrTmUBYqZa/CXT4uvb+I= -github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I= +github.com/AllenDang/w32 v0.0.0-20180428130237-ad0a36d80adc h1:w3fW4b1hPf6/cfdQQ/vu9V8eBeQmuLZIaUMj81nIzYQ= +github.com/AllenDang/w32 v0.0.0-20180428130237-ad0a36d80adc/go.mod h1:1rHKulT5eD2DzdKxDXUZRKtBfkTzLmTL42ZmEmOfyrs= +github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298 h1:1qlsVAQJXZHsaM8b6OLVo6muQUQd4CwkH/D3fnnbHXA= +github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ= +github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966 h1:lTG4HQym5oPKjL7nGs+csTgiDna685ZXjxijkne828g= +github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966/go.mod h1:Mid70uvE93zn9wgF92A/r5ixgnvX8Lh68fxp9KQBaI0= +github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc h1:7D+Bh06CRPCJO3gr2F7h1sriovOZ8BMhca2Rg85c2nk= +github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/BurntSushi/xgbutil v0.0.0-20190907113008-ad855c713046 h1:O/r2Sj+8QcMF7V5IcmiE2sMFV2q3J47BEirxbXJAdzA= +github.com/BurntSushi/xgbutil v0.0.0-20190907113008-ad855c713046/go.mod h1:uw9h2sd4WWHOPdJ13MQpwK5qYWKYDumDqxWWIknEQ+k= +github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d h1:2xp1BQbqcDDaikHnASWpVZRjibOxu7y9LhAv04whugI= +github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I= +github.com/skelterjohn/go.wde v0.0.0-20190318181201-adc3f78cdb45 h1:+iBDFztSlypenVQoWsHMmhfn6PWICRvB14LpQFozfS0= +github.com/skelterjohn/go.wde v0.0.0-20190318181201-adc3f78cdb45/go.mod h1:zXxNsJHeUYIqpg890APBNEn9GoCbA4Cdnvuv3mx4fBk=