- Open large popup menus on the other side only if there's enough space
- Open popup menus such that the y position of the first item in the
popup menu is the same as the y position of the focused menu item.
Replace all 'while (PeekMessage()) DispatchMessage();' loops in the
PeekMessage test by explicit calls to PeekMessage(), check queue
status and processed messages after each call to see what is going on
behind the scene.
Use a unique port name for the message port to the message thread.
Port names are system-global, so using a non-unique constant name
prevents the CoreAudio driver from being used in multiple processes
simultaneously.
When fulfilling the output AudioUnit's request for audio data, don't
stop when the current wavehdr is exhausted; advance to the next. This
addresses the buzzy quality of the sound.
Improved tracking of device state (stopped, playing, or paused).
Also, tied starting and stopping the AudioUnit more directly to the
state. No need to change the state when preparing or unpreparing
wavehdrs. Pausing overrides both playing and stopped states; if
stopped, pausing prevents output from starting when the program
writes. When, restarting from the paused state, the device starts
playing if there are queued wavehdrs. Otherwise, it goes to stopped
state.
Fixes a race condition (noted in a comment for wodOpen) when multiple
threads try to open the same wave-out device simultaneously.
Addressed by creating the device mutexes when the driver is
initialized, instead of as each device is opened. Then use the mutex
to protect the open operation against races. At the same time, made
the mutexes recursive to avoid self-deadlocks the driver was
encountering when reentered from the callback.
correct offsets, after the function data, so add cFuncs to the offsets
in MSFT_DoVars.
Resolve referenced types for variables.
Fixes initialisation of the dbgrid32 OCX.
Always check for open and close events.
Send WM_APP message to thread to terminate it rather than TerminateThread.
Fix CreateThread/waveOutOpen race by waiting for background thread to
run before waveOutOpen is called.
Add more non-hardware supported formats. There is a bug in wave
mapper GetPosition when multiple headers are used and this helps
trigger it.