Fixed the wndproc not responding: turns out I have to have message dispatch in the UI thread...
This commit is contained in:
parent
ae14253c80
commit
08ba4a1074
|
@ -28,13 +28,34 @@ func ui(initDone chan error) {
|
||||||
uitask = make(chan *uimsg)
|
uitask = make(chan *uimsg)
|
||||||
initDone <- doWindowsInit()
|
initDone <- doWindowsInit()
|
||||||
|
|
||||||
go msgloop()
|
// go msgloop()
|
||||||
|
var msg struct {
|
||||||
|
Hwnd _HWND
|
||||||
|
Message uint32
|
||||||
|
WParam _WPARAM
|
||||||
|
LParam _LPARAM
|
||||||
|
Time uint32
|
||||||
|
Pt _POINT
|
||||||
|
}
|
||||||
|
var _peekMessage = user32.NewProc("PeekMessageW")
|
||||||
|
const _PM_REMOVE = 0x0001
|
||||||
|
|
||||||
for m := range uitask {
|
for {
|
||||||
r1, _, err := m.call.Call(m.p...)
|
select {
|
||||||
m.ret <- uiret{
|
case m := <-uitask:
|
||||||
ret: r1,
|
r1, _, err := m.call.Call(m.p...)
|
||||||
err: err,
|
m.ret <- uiret{
|
||||||
|
ret: r1,
|
||||||
|
err: err,
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
// TODO figure out how to handle errors
|
||||||
|
_peekMessage.Call(
|
||||||
|
uintptr(unsafe.Pointer(&msg)),
|
||||||
|
uintptr(_NULL),
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
uintptr(_PM_REMOVE))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue