Separated initial text from sysData and fixed errors in the previous commits.
This commit is contained in:
parent
f93bebfeec
commit
3f8fe0e710
|
@ -8,12 +8,11 @@ import (
|
|||
// The sysData type contains all system data. It provides the system-specific underlying implementation. It is guaranteed to have the following by embedding:
|
||||
type cSysData struct {
|
||||
ctype int
|
||||
text string
|
||||
|
||||
// for Window
|
||||
closing chan struct{}
|
||||
}
|
||||
func (c *cSysData) make() error {
|
||||
func (c *cSysData) make(initText string) error {
|
||||
panic(runtime.GOOS + " sysData does not define make()")
|
||||
}
|
||||
func (c *cSysData) show() error {
|
||||
|
|
|
@ -42,7 +42,7 @@ var classTypes = [nctypes]*classData{
|
|||
|
||||
var (
|
||||
cid _HMENU = 0
|
||||
cidLock sys.Mutex
|
||||
cidLock sync.Mutex
|
||||
)
|
||||
|
||||
func nextID() _HMENU {
|
||||
|
@ -52,7 +52,7 @@ func nextID() _HMENU {
|
|||
return cid
|
||||
}
|
||||
|
||||
func (s *sysData) make() (err error) {
|
||||
func (s *sysData) make(initText string) (err error) {
|
||||
ret := make(chan uiret)
|
||||
defer close(ret)
|
||||
ct := classTypes[s.ctype]
|
||||
|
@ -64,7 +64,7 @@ func (s *sysData) make() (err error) {
|
|||
p: []uintptr{
|
||||
uintptr(ct.xstyle),
|
||||
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(ct.name))),
|
||||
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s.text))),
|
||||
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(initText))),
|
||||
uintptr(ct.style),
|
||||
uintptr(_CW_USEDEFAULT), // TODO
|
||||
uintptr(_CW_USEDEFAULT),
|
||||
|
|
|
@ -9,9 +9,9 @@ import (
|
|||
// I need a way to get a sysData for a given HWND or a given HWND/control ID. So, this.
|
||||
|
||||
var (
|
||||
sysDatas = map[_HWND]*sdcEntry{}
|
||||
sysDatas = map[_HWND]*sysData{}
|
||||
sysDatasLock sync.Mutex
|
||||
sysDataIDs = map[_HMENU]*sdcEntry{}
|
||||
sysDataIDs = map[_HMENU]*sysData{}
|
||||
sysDataIDsLock sync.Mutex
|
||||
)
|
||||
|
||||
|
@ -21,7 +21,7 @@ func addSysData(hwnd _HWND, s *sysData) {
|
|||
sysDatas[hwnd] = s
|
||||
}
|
||||
|
||||
func addIDSysData(id _HMENU, s *sysData) {
|
||||
func addSysDataID(id _HMENU, s *sysData) {
|
||||
sysDataIDsLock.Lock()
|
||||
defer sysDataIDsLock.Unlock()
|
||||
sysDataIDs[id] = s
|
||||
|
@ -36,11 +36,11 @@ func getSysData(hwnd _HWND) *sysData {
|
|||
return nil
|
||||
}
|
||||
|
||||
func getIDSysData(id _HMENU) *sysData {
|
||||
func getSysDataID(id _HMENU) *sysData {
|
||||
sysDataIDsLock.Lock()
|
||||
defer sysDataIDsLock.Unlock()
|
||||
if ss, ok := sysDataIDs[id]; ok {
|
||||
return ss
|
||||
}
|
||||
panic(fmt.Sprintf("getting nonexistent ID %d for HWND %d\n", id, hwnd))
|
||||
panic(fmt.Sprintf("getting nonexistent ID %d\n", id))
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ type Window struct {
|
|||
created bool
|
||||
control Control
|
||||
sysData *sysData
|
||||
initText string
|
||||
}
|
||||
|
||||
// NewWindow creates a new window with the given title. The window is not constructed at the OS level until a call to Open().
|
||||
|
@ -26,9 +27,9 @@ func NewWindow(title string) *Window {
|
|||
sysData: &sysData{
|
||||
cSysData: cSysData{
|
||||
ctype: c_window,
|
||||
text: title,
|
||||
},
|
||||
},
|
||||
initText: title,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,7 +55,7 @@ func (w *Window) Open() (err error) {
|
|||
// If the window has already been created, show it.
|
||||
if !w.created {
|
||||
w.sysData.closing = w.Closing
|
||||
err = w.sysData.make()
|
||||
err = w.sysData.make(w.initText)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -82,6 +83,6 @@ func (w *Window) apply() error {
|
|||
func (w *Window) setParent(c Control) {
|
||||
panic("Window.setParent() should never be called")
|
||||
}
|
||||
func (w *Window) setParentWindow(w *Window) {
|
||||
func (w *Window) setParentWindow(w2 *Window) {
|
||||
panic("Window.setParent() should never be called")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue