Steamrolled errors under panic() in Combobox/Listbox.Append()/InsertBefore() because screw Windows being different.
This commit is contained in:
parent
a7ec908ebd
commit
b9f0ad90ec
19
combobox.go
19
combobox.go
|
@ -36,25 +36,23 @@ func NewEditableCombobox(items ...string) *Combobox {
|
|||
}
|
||||
|
||||
// Append adds items to the end of the Combobox's list.
|
||||
func (c *Combobox) Append(what ...string) (err error) {
|
||||
// Append will panic if something goes wrong on platforms that do not abort themselves.
|
||||
func (c *Combobox) Append(what ...string) {
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
|
||||
if c.created {
|
||||
for i, s := range what {
|
||||
err := c.sysData.append(s)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error adding element %d in Combobox.Append() (%q): %v", i, s, err)
|
||||
c.sysData.append(s)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return
|
||||
}
|
||||
c.initItems = append(c.initItems, what...)
|
||||
return nil
|
||||
}
|
||||
|
||||
// InsertBefore inserts a new item in the Combobox before the item at the given position. It panics if the given index is out of bounds.
|
||||
func (c *Combobox) InsertBefore(what string, before int) (err error) {
|
||||
// InsertBefore will also panic if something goes wrong on platforms that do not abort themselves.
|
||||
func (c *Combobox) InsertBefore(what string, before int) {
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
|
||||
|
@ -64,7 +62,8 @@ func (c *Combobox) InsertBefore(what string, before int) (err error) {
|
|||
if before < 0 || before >= c.sysData.len() {
|
||||
goto badrange
|
||||
}
|
||||
return c.sysData.insertBefore(what, before)
|
||||
c.sysData.insertBefore(what, before)
|
||||
return
|
||||
}
|
||||
if before < 0 || before >= len(c.initItems) {
|
||||
goto badrange
|
||||
|
@ -73,7 +72,7 @@ func (c *Combobox) InsertBefore(what string, before int) (err error) {
|
|||
m = append(m, c.initItems[:before]...)
|
||||
m = append(m, what)
|
||||
c.initItems = append(m, c.initItems[before:]...)
|
||||
return nil
|
||||
return
|
||||
badrange:
|
||||
panic(fmt.Errorf("index %d out of range in Combobox.InsertBefore()", before))
|
||||
}
|
||||
|
|
19
listbox.go
19
listbox.go
|
@ -28,25 +28,23 @@ func NewListbox(multiple bool, items ...string) (l *Listbox) {
|
|||
}
|
||||
|
||||
// Append adds items to the end of the Listbox's list.
|
||||
func (l *Listbox) Append(what ...string) (err error) {
|
||||
// Append will panic if something goes wrong on platforms that do not abort themselves.
|
||||
func (l *Listbox) Append(what ...string) {
|
||||
l.lock.Lock()
|
||||
defer l.lock.Unlock()
|
||||
|
||||
if l.created {
|
||||
for i, s := range what {
|
||||
err := l.sysData.append(s)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error adding element %d in Listbox.Append() (%q): %v", i, s, err)
|
||||
l.sysData.append(s)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return
|
||||
}
|
||||
l.initItems = append(l.initItems, what...)
|
||||
return nil
|
||||
}
|
||||
|
||||
// InsertBefore inserts a new item in the Listbox before the item at the given position. It panics if the given index is out of bounds.
|
||||
func (l *Listbox) InsertBefore(what string, before int) (err error) {
|
||||
// InsertBefore will also panic if something goes wrong on platforms that do not abort themselves.
|
||||
func (l *Listbox) InsertBefore(what string, before int) {
|
||||
l.lock.Lock()
|
||||
defer l.lock.Unlock()
|
||||
|
||||
|
@ -56,7 +54,8 @@ func (l *Listbox) InsertBefore(what string, before int) (err error) {
|
|||
if before < 0 || before >= l.sysData.len() {
|
||||
goto badrange
|
||||
}
|
||||
return l.sysData.insertBefore(what, before)
|
||||
l.sysData.insertBefore(what, before)
|
||||
return
|
||||
}
|
||||
if before < 0 || before >= len(l.initItems) {
|
||||
goto badrange
|
||||
|
@ -65,7 +64,7 @@ func (l *Listbox) InsertBefore(what string, before int) (err error) {
|
|||
m = append(m, l.initItems[:before]...)
|
||||
m = append(m, what)
|
||||
l.initItems = append(m, l.initItems[before:]...)
|
||||
return nil
|
||||
return
|
||||
badrange:
|
||||
panic(fmt.Errorf("index %d out of range in Listbox.InsertBefore()", before))
|
||||
}
|
||||
|
|
|
@ -40,10 +40,10 @@ func (c *cSysData) isChecked() bool {
|
|||
func (c *cSysData) text() string {
|
||||
panic(runtime.GOOS + " sysData does not define text()")
|
||||
}
|
||||
func (c *cSysData) append(string) error {
|
||||
func (c *cSysData) append(string) {
|
||||
panic(runtime.GOOS + " sysData does not define append()")
|
||||
}
|
||||
func (c *cSysData) insertBefore(string, int) error {
|
||||
func (c *cSysData) insertBefore(string, int) {
|
||||
panic(runtime.GOOS + " sysData does not define insertBefore()")
|
||||
}
|
||||
func (c *cSysData) selectedIndex() int {
|
||||
|
|
|
@ -387,7 +387,7 @@ func (s *sysData) text() string {
|
|||
return <-ret
|
||||
}
|
||||
|
||||
func (s *sysData) append(what string) error {
|
||||
func (s *sysData) append(what string) {
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
uitask <- func() {
|
||||
|
@ -395,10 +395,9 @@ func (s *sysData) append(what string) error {
|
|||
ret <- struct{}{}
|
||||
}
|
||||
<-ret
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) insertBefore(what string, before int) error {
|
||||
func (s *sysData) insertBefore(what string, before int) {
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
uitask <- func() {
|
||||
|
@ -406,7 +405,6 @@ func (s *sysData) insertBefore(what string, before int) error {
|
|||
ret <- struct{}{}
|
||||
}
|
||||
<-ret
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) selectedIndex() int {
|
||||
|
|
|
@ -216,7 +216,7 @@ func (s *sysData) text() string {
|
|||
return <-ret
|
||||
}
|
||||
|
||||
func (s *sysData) append(what string) error {
|
||||
func (s *sysData) append(what string) {
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
uitask <- func() {
|
||||
|
@ -224,10 +224,9 @@ func (s *sysData) append(what string) error {
|
|||
ret <- struct{}{}
|
||||
}
|
||||
<-ret
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) insertBefore(what string, before int) error {
|
||||
func (s *sysData) insertBefore(what string, before int) {
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
uitask <- func() {
|
||||
|
@ -235,7 +234,6 @@ func (s *sysData) insertBefore(what string, before int) error {
|
|||
ret <- struct{}{}
|
||||
}
|
||||
<-ret
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) selectedIndex() int {
|
||||
|
|
|
@ -317,7 +317,7 @@ func (s *sysData) text() (str string) {
|
|||
return syscall.UTF16ToString(tc)
|
||||
}
|
||||
|
||||
func (s *sysData) append(what string) (err error) {
|
||||
func (s *sysData) append(what string) {
|
||||
ret := make(chan uiret)
|
||||
defer close(ret)
|
||||
uitask <- &uimsg{
|
||||
|
@ -332,14 +332,13 @@ func (s *sysData) append(what string) (err error) {
|
|||
}
|
||||
r := <-ret
|
||||
if r.ret == uintptr(classTypes[s.ctype].addSpaceErr) {
|
||||
return fmt.Errorf("out of space adding item to combobox/listbox (last error: %v)", r.err)
|
||||
panic(fmt.Errorf("out of space adding item to combobox/listbox (last error: %v)", r.err))
|
||||
} else if r.ret == uintptr(classTypes[s.ctype].selectedIndexErr) {
|
||||
return fmt.Errorf("failed to add item to combobox/listbox (last error: %v)", r.err)
|
||||
panic(fmt.Errorf("failed to add item to combobox/listbox (last error: %v)", r.err))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) insertBefore(what string, index int) (err error) {
|
||||
func (s *sysData) insertBefore(what string, index int) {
|
||||
ret := make(chan uiret)
|
||||
defer close(ret)
|
||||
uitask <- &uimsg{
|
||||
|
@ -354,11 +353,10 @@ func (s *sysData) insertBefore(what string, index int) (err error) {
|
|||
}
|
||||
r := <-ret
|
||||
if r.ret == uintptr(classTypes[s.ctype].addSpaceErr) {
|
||||
return fmt.Errorf("out of space adding item to combobox/listbox (last error: %v)", r.err)
|
||||
panic(fmt.Errorf("out of space adding item to combobox/listbox (last error: %v)", r.err))
|
||||
} else if r.ret == uintptr(classTypes[s.ctype].selectedIndexErr) {
|
||||
return fmt.Errorf("failed to add item to combobox/listbox (last error: %v)", r.err)
|
||||
panic(fmt.Errorf("failed to add item to combobox/listbox (last error: %v)", r.err))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *sysData) selectedIndex() int {
|
||||
|
|
Loading…
Reference in New Issue