Support UIA's ISelectionProvider2 interface [1]
in addition to ISelectionProvider.
The ISelectionProvider2 interface inherits from the
ISelectionProvider interface.
A follow-up commit that will introduce bridging the
QAccessibleSelectionInterface, introduced in commit
9d16d5e224.
While at it, also reserve space for the amount
of children in the QList in QWindowsUiaSelectionProvider::GetSelection
before inserting them one by one, to avoid reallocations.
Sample use of the ISelectionProvider2 interface from NVDA's
Python console [2] with this commit in place:
1) start NVDA
2) run the gallery example (examples\widgets\gallery\gallery.exe)
3) click on the "Style" listbox at the top
4) press Numpad_insert+control+z to start the NVDA Python console and
capture snapshot variables
5) query and use the interface using NVDA's Python console
>>> import UIAHandler
>>> iselection2 = focus.parent.UIAElement.GetCurrentPattern(10034).QueryInterface(UIAHandler.IUIAutomationSelectionPattern2)
>>> iselection2.CurrentItemCount
1
>>> iselection2.CurrentFirstSelectedItem.CurrentName
'windowsvista'
>>> iselection2.CurrentLastSelectedItem.CurrentName
'windowsvista'
[1] https://learn.microsoft.com/en-us/windows/win32/api/uiautomationcore/nn-uiautomationcore-iselectionprovider2
[2] https://www.nvaccess.org/files/nvda/documentation/developerGuide.html#PythonConsole
Change-Id: I43642e9e39b63c65da97af976cc322a8e5868170
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>