Fixed Listboxes on Mac OS X having an initial selection.

This commit is contained in:
Pietro Gagliardi 2014-04-12 22:05:34 -04:00
parent 274fa0c292
commit d4c79539af
7 changed files with 33 additions and 1 deletions

View File

@ -148,6 +148,8 @@ func (l *Listbox) make(window *sysData) (err error) {
for _, s := range l.initItems {
l.sysData.append(s)
}
// some platforms automatically select an item; undo that
l.sysData.selectIndices(nil)
l.created = true
return nil
}

View File

@ -241,6 +241,7 @@ var (
_selectedRowIndexes = sel_getUid("selectedRowIndexes")
_count = sel_getUid("count")
_numberOfRows = sel_getUid("numberOfRows")
_deselectAll = sel_getUid("deselectAll:")
)
func makeListbox(parentWindow C.id, alternate bool) C.id {
@ -315,3 +316,12 @@ func deleteListbox(listbox C.id, index int) {
func listboxLen(listbox C.id) int {
return int(C.objc_msgSend_intret_noargs(listboxInScrollView(listbox), _numberOfRows))
}
func selectListboxIndices(id C.id, indices []int) {
listbox := listboxInScrollView(id)
if len(indices) == 0 {
C.objc_msgSend_id(listbox, _deselectAll, listbox)
return
}
panic("selectListboxIndices() > 0 not yet implemented (TODO)")
}

View File

@ -41,6 +41,7 @@ var _xSysData interface {
len() int
setAreaSize(int, int)
selectIndex(int)
selectIndices([]int)
} = &sysData{} // this line will error if there's an inconsistency
// signal sends the event signal. This raise is done asynchronously to avoid deadlocking the UI task.

View File

@ -34,6 +34,7 @@ type classData struct {
delete func(id C.id, index int)
len func(id C.id) int
selectIndex func(id C.id, index int, alternate bool)
selectIndices func(id C.id, indices []int)
}
var (
@ -304,6 +305,7 @@ var classTypes = [nctypes]*classData{
selTexts: selectedListboxTexts,
delete: deleteListbox,
len: listboxLen,
selectIndices: selectListboxIndices,
},
c_progressbar: &classData{
make: func(parentWindow C.id, alternate bool) C.id {
@ -571,3 +573,13 @@ func (s *sysData) selectIndex(index int) {
}
<-ret
}
func (s *sysData) selectIndices(indices []int) {
ret := make(chan struct{})
defer close(ret)
uitask <- func() {
classTypes[s.ctype].selectIndices(s.id, indices)
ret <- struct{}{}
}
<-ret
}

View File

@ -363,3 +363,7 @@ func (s *sysData) setAreaSize(width int, height int) {
func (s *sysData) selectIndex(index int) {
// TODO not yet implemented on Unix (added for Mac only right now)
}
func (s *sysData) selectIndices(indices []int) {
// TODO not yet implemented on Windows (added for Mac only right now)
}

View File

@ -645,3 +645,7 @@ func (s *sysData) setAreaSize(width int, height int) {
func (s *sysData) selectIndex(index int) {
// TODO not yet implemented on Windows (added for Mac only right now)
}
func (s *sysData) selectIndices(indices []int) {
// TODO not yet implemented on Windows (added for Mac only right now)
}

View File

@ -1,5 +1,4 @@
important things:
- NSTableViews start out with an initial selection (which is against our docs)
- NSComboBox scans the entered text to see if it matches one of the items and returns the index of that item if it does; find out how to suppress this so that it returns -1 unless the item was chosen from the list (like the other platforms)
- some Cocoa controls don't seem to resize correctly: Buttons have space around the edges
- LineEdit heights on Windows seem too big; either that or LineEdit, Button, and Label text is not vertically centered properly