Change the symbol level of * (asterisk), + (plus) and = (equals) from level most to level some. Re #3614
NVDAHelper winword support: expose _startOfNode and _endOfNode attributes on heading controlfields.
SysListView32 ListItem IAccessible NVDAObject: add support for fetching the image ID for sub items. _getColumnImageID and _getColumnImageIDRaw.
Support for announcing if a message has an attachment or is flagged in Outlook Express! In theory should work for Windows Mail and Windows Live Mail 2009 and earlier.
Merge branch 't3614'. Fixes #3614
Java Access Bridge support: When a java application comes into the foreground, keep trying to fetch the real focus until a timeout occurs. Iff this fails, fall back to the root java object for the window. Re #3753
Java Access Bridge support: no longer expose position information for radio buttons as they are hardly ever placed siquentially in the same parent with no other controls at all. Stops NVDA announcing "1 of 1" all the time. Re #3754
Fix some cases where a profile trigger isn't exited when an application closes.

appModuleHandler.update is called from IAccessibleHandler for all events, but it currently cleans up app modules for dead processes. Sometimes, an event is fired before we fetch the old app modules in api.setFocusObject, so by that point, the app module is gone and we can't exit the trigger.
To fix this, split the cleanup code into a separate function and call it only after the old app modules have been fetched in setFocusObject.
Re #3732.
Fix more cases where a profile trigger isn't exited when an application closes.

This occurred because there were sometimes two app modules for the same process, so the profile was being triggered twice. The first instance died before the process exited, so one of the triggers wasn't exited.
The root cause was that app modules can be fetched in UIA event threads, but there was a race condition in getAppModuleFromProcessID where two app modules could be created if two threads were fetching for the same process ID at around the same time.
Fix this using a lock.
Re #3732.
Java Access Bridge support: make interacting with JComboBoxes much more friendly. Re #3755

Specifically:
	* JABHandler: no longer redirect focus events to the new focused java object's active descendant. Instead handle the focus event normally and have JAB NVDAObject's event_gainFocus queue another focus event for the descendant if there is one, only after its completed this focus event. This means that NVDA will fully report any object that gets focus, before reporting its active descendant. As the logic is now in the NVDAObject it can be customized for specific situations.
	* JAB NVDAObject's name property: filter out XML markup like we already do for description. Some JComboBoxes contained html in their item names.
	* Add a new ComboBox NVDAObject, which handles some issues with JcomboBoxes:
		* its value is now the name of the active descendant (selected item). Previously it had no value.
		* Expanded and collapsed states are exposed based on whether its first child (menu) is invisible or not. Previously it sometimes exposed expanded by itself, but never collapsed.
		* Focus is not bounced to its active descendant after a normal focus event unless the comboBox is currently expanded. Previously focus always landed on the active descendant even if the comboBox was collapsed.
Java Access Bridge support: fix broken object navigation within tables.

Specifically:
	* The indexInParent property of NVDAObjects representing table cells in Java Access Bridge is None if  the object was not created via an event. Specifically AccessibleContextInfo.indexInParent is -1. This completely breaks next and previous. Therefor for next, previous, firstChild, lastchild and children: correct the new object's indexInParent to what it should be.
	* The parent property of NVDAObjects representing table cells in Java Access Bridge is the Desktop window  if  the object was not created via an event. Specifically getAccessibleParentFromContext returns 0. This causes next and previous to sometimes end up outside the Java application. Therefore for next, previous, firstChild, lastChild and children, set the new object's parent to the correct parent if it doesn't seem to be a Java object.
Java Access Bridge support: report row and column counts for tables and report column and row numbers for table cells. Re #3756

Also fix up usage of the wrong type for vmID -- should be c_long not c_int. New table code indirectly showed this bug.
Mark NVDA as DPI aware.

This allows us to work with actual screen coordinates rather than scaled coordinates in high DPI configurations. Scaled coordinates seem to be inaccurate in some cases. Also, some accessibiliy implementations don't provide scaled coordinates.
We use the SetProcessDPIAware function rather than using the manifest so it will work when running from source.
Java Access Bridge support: support row and column headers for Java tables. Re #3756
Java Access Bridge support: map labels to static text and rootPane/layeredPane to panel. These changes allow labels to be navigated to with object navigation with simple review, and they also get picked up when calculating a dialog caption. Re #3757
Java Access Bridge support: remove a very old and now wrong implementation of event_stateChange on the JAB NVDAObject which was incorrectly overriding our cache of the acccontextInfo. Allows name, description and value property changes to report their new values correctly. Re #3770
Java Access Bridge support: stop getAccessibleTableInfo from raising an error when the result is 0. the NVDAObject table properties already handle the result, but don't necessarily catch the exception. Fixes errors in LibreOffice tables.
No longer always cancel speech for ech focus change in browse mode. Instead only cancel if sayAll is running or if passthrough mode is being turned on.
Add support for ARIA atomic to the IAccessible2 live regions code. Also slightly refactor to better handle some corner cases such as reparnted child nodes. Re #2640
Correctly handle apps that aren't DPI aware for display model.

The coordinates provided by these applications are logical coordinates, not physical coordinates as used by DPI aware applications. Convert between logical and physical coordinates where appropriate.
This has to be done using different functions on different versions of Windows, so account for this as well.