diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl index dd7ddf72b5ba1..c8b3f354d96d8 100644 --- a/third_party/iaccessible2/ia2_api_all.idl +++ b/third_party/iaccessible2/ia2_api_all.idl @@ -1324,7 +1324,8 @@ IA2_STATE_PINNED = 0x80000 @section _interfaces Interfaces IAccessible2\n IAccessible2_2\n - IAccessible2_3 [Deprecated]\n + IAccessible2_3\n + IAccessible2_4\n IAccessibleAction\n IAccessibleApplication\n IAccessibleComponent\n @@ -2085,6 +2086,81 @@ interface IAccessible2_2 : IAccessible2 } +/** + * This structure represents a directional range of the content. It is defined + * by two points in the content, where each one is defined by an accessible + * object and an offset relative to it. A typical case of a range point is + * a text accessible and text offset within it. + * + * The "anchor" is one point of the range and typically remains constant. + * The other point is the "active" point, which typically corresponds to + * the user's focus or point of interest. The user moves the active point to + * expand or collapse the range. In most cases, anchor is the start of the range + * and active is the end. However, in case of selection, when selecting + * backwards (e.g. pressing shift+left arrow in a text field), the start of + * the range is the active point, as the user moves this to manipulate + * the selection. + */ +typedef struct IA2Range { + IUnknown* anchor; + long anchorOffset; + IUnknown* active; + long activeOffset; +} IA2Range; + +/** + * @brief This interface is an extension of IAccessible2_2 and IAccessible2 + * interfaces. + */ +[object, uuid(5BE18059-762E-4E73-9476-ABA294FED411)] +interface IAccessible2_3 : IAccessible2_2 +{ + /** + * @brief Returns an array of ranges for selections within the accessible. + * @param [out] ranges + The array of selection ranges, allocated by the server. The client must + free it with CoTaskMemFree. + * @param [out] nRanges + the array length + * @retval S_OK + * @retval S_FALSE returned if there is no selection within the accessible + */ + [propget] HRESULT selectionRanges + ( + [out, size_is(,*nRanges)] IA2Range **ranges, + [out, retval] long *nRanges + ); +} + +/** + * @brief This interface is an extension of IAccessible2_3 which exposes a + * single method for setting the current selection given a number of selection + * ranges. + * + * This interface is preliminary as it has not been adopted by any standard yet. + */ +[object, uuid(610a7bec-91bb-444d-a336-a0daf13c4c29)] +interface IAccessible2_4 : IAccessible2_3 +{ + /** + * @brief Sets the current selection to the provided ranges. The provided + * ranges don't need to be contained within this accessible. + * @param [in] nRanges + * The length of the array containing the selection ranges. + * @param [in] ranges + * The array of selection ranges, allocated by the client with + * CoTaskMemAlloc and freed by the client with CoTaskMemFree. + * @retval S_OK Returned if the selection was made successfully. + * @retval S_FALSE Returned if the selection could not be made. + * @retval E_INVALIDARG Returned if any of the input arguments are invalid. + */ + HRESULT setSelectionRanges + ( + [in] long nRanges, + [in, size_is(nRanges)] IA2Range* ranges + ); +} + /************************************************************************* * * File Name (AccessibleComponent.idl) @@ -2209,6 +2285,7 @@ interface IAccessibleComponent : IUnknown [out, retval] IA2Color *background ); } + /************************************************************************* * * File Name (AccessibleValue.idl) @@ -5682,6 +5759,7 @@ library IAccessible2Lib importlib ("oleacc.dll"); interface IAccessible2; interface IAccessible2_2; + interface IAccessible2_3; interface IAccessibleAction; interface IAccessibleApplication; interface IAccessibleComponent; diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch index 17229419061ce..159ad89b234d2 100644 --- a/third_party/iaccessible2/set_selection_ranges.patch +++ b/third_party/iaccessible2/set_selection_ranges.patch @@ -1,19 +1,66 @@ diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl -index 97bf11594646..07121230dc73 100644 +index dd7ddf72b5ba1..3c7ccf935f55e 100644 --- a/third_party/iaccessible2/ia2_api_all.idl +++ b/third_party/iaccessible2/ia2_api_all.idl -@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 +@@ -1324,7 +1324,8 @@ IA2_STATE_PINNED = 0x80000 + @section _interfaces Interfaces IAccessible2\n IAccessible2_2\n - IAccessible2_3\n +- IAccessible2_3 [Deprecated]\n ++ IAccessible2_3\n + IAccessible2_4\n IAccessibleAction\n IAccessibleApplication\n IAccessibleComponent\n -@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 - [out, retval] long *nRanges - ); +@@ -2085,6 +2086,81 @@ interface IAccessible2_2 : IAccessible2 + } + ++/** ++ * This structure represents a directional range of the content. It is defined ++ * by two points in the content, where each one is defined by an accessible ++ * object and an offset relative to it. A typical case of a range point is ++ * a text accessible and text offset within it. ++ * ++ * The "anchor" is one point of the range and typically remains constant. ++ * The other point is the "active" point, which typically corresponds to ++ * the user's focus or point of interest. The user moves the active point to ++ * expand or collapse the range. In most cases, anchor is the start of the range ++ * and active is the end. However, in case of selection, when selecting ++ * backwards (e.g. pressing shift+left arrow in a text field), the start of ++ * the range is the active point, as the user moves this to manipulate ++ * the selection. ++ */ ++typedef struct IA2Range { ++ IUnknown* anchor; ++ long anchorOffset; ++ IUnknown* active; ++ long activeOffset; ++} IA2Range; ++ ++/** ++ * @brief This interface is an extension of IAccessible2_2 and IAccessible2 ++ * interfaces. ++ */ ++[object, uuid(5BE18059-762E-4E73-9476-ABA294FED411)] ++interface IAccessible2_3 : IAccessible2_2 ++{ ++ /** ++ * @brief Returns an array of ranges for selections within the accessible. ++ * @param [out] ranges ++ The array of selection ranges, allocated by the server. The client must ++ free it with CoTaskMemFree. ++ * @param [out] nRanges ++ the array length ++ * @retval S_OK ++ * @retval S_FALSE returned if there is no selection within the accessible ++ */ ++ [propget] HRESULT selectionRanges ++ ( ++ [out, size_is(,*nRanges)] IA2Range **ranges, ++ [out, retval] long *nRanges ++ ); ++} + +/** + * @brief This interface is an extension of IAccessible2_3 which exposes a @@ -47,3 +94,277 @@ index 97bf11594646..07121230dc73 100644 /************************************************************************* * * File Name (AccessibleComponent.idl) +@@ -2209,6 +2285,7 @@ interface IAccessibleComponent : IUnknown + [out, retval] IA2Color *background + ); + } ++ + /************************************************************************* + * + * File Name (AccessibleValue.idl) +diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch +index 17229419061ce..688ea6c94f911 100644 +--- a/third_party/iaccessible2/set_selection_ranges.patch ++++ b/third_party/iaccessible2/set_selection_ranges.patch +@@ -1,21 +1,69 @@ + diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl +-index 97bf11594646..07121230dc73 100644 ++index dd7ddf72b5ba1..cb32591e99b63 100644 + --- a/third_party/iaccessible2/ia2_api_all.idl + +++ b/third_party/iaccessible2/ia2_api_all.idl +-@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 ++@@ -1324,7 +1324,8 @@ IA2_STATE_PINNED = 0x80000 ++ @section _interfaces Interfaces + IAccessible2\n + IAccessible2_2\n +- IAccessible2_3\n ++- IAccessible2_3 [Deprecated]\n +++ IAccessible2_3\n + + IAccessible2_4\n + IAccessibleAction\n + IAccessibleApplication\n + IAccessibleComponent\n +-@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 +- [out, retval] long *nRanges ++@@ -2209,6 +2210,82 @@ interface IAccessibleComponent : IUnknown ++ [out, retval] IA2Color *background + ); + } + + + +/** +++ * This structure represents a directional range of the content. It is defined +++ * by two points in the content, where each one is defined by an accessible +++ * object and an offset relative to it. A typical case of a range point is +++ * a text accessible and text offset within it. +++ * +++ * The "anchor" is one point of the range and typically remains constant. +++ * The other point is the "active" point, which typically corresponds to +++ * the user's focus or point of interest. The user moves the active point to +++ * expand or collapse the range. In most cases, anchor is the start of the range +++ * and active is the end. However, in case of selection, when selecting +++ * backwards (e.g. pressing shift+left arrow in a text field), the start of +++ * the range is the active point, as the user moves this to manipulate +++ * the selection. +++ */ +++typedef struct IA2Range { +++ IUnknown* anchor; +++ long anchorOffset; +++ IUnknown* active; +++ long activeOffset; +++} IA2Range; +++ +++/** +++ * @brief This interface is an extension of IAccessible2_2 and IAccessible2 +++ * interfaces. +++ */ +++[object, uuid(5BE18059-762E-4E73-9476-ABA294FED411)] +++interface IAccessible2_3 : IAccessible2_2 +++{ +++ /** +++ * @brief Returns an array of ranges for selections within the accessible. +++ * @param [out] ranges +++ The array of selection ranges, allocated by the server. The client must +++ free it with CoTaskMemFree. +++ * @param [out] nRanges +++ the array length +++ * @retval S_OK +++ * @retval S_FALSE returned if there is no selection within the accessible +++ */ +++ [propget] HRESULT selectionRanges +++ ( +++ [out, size_is(,*nRanges)] IA2Range **ranges, +++ [out, retval] long *nRanges +++ ); +++} +++ +++/** + + * @brief This interface is an extension of IAccessible2_3 which exposes a + + * single method for setting the current selection given a number of selection + + * ranges. +@@ -46,4 +94,185 @@ index 97bf11594646..07121230dc73 100644 + + + /************************************************************************* + * +- * File Name (AccessibleComponent.idl) ++ * File Name (AccessibleValue.idl) ++diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch ++index 17229419061ce..7105fa56ee2be 100644 ++--- a/third_party/iaccessible2/set_selection_ranges.patch +++++ b/third_party/iaccessible2/set_selection_ranges.patch ++@@ -1,21 +1,45 @@ ++ diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl ++-index 97bf11594646..07121230dc73 100644 +++index dd7ddf72b5ba1..dca6d6e201222 100644 ++ --- a/third_party/iaccessible2/ia2_api_all.idl ++ +++ b/third_party/iaccessible2/ia2_api_all.idl ++-@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 +++@@ -1324,7 +1324,8 @@ IA2_STATE_PINNED = 0x80000 +++ @section _interfaces Interfaces ++ IAccessible2\n ++ IAccessible2_2\n ++- IAccessible2_3\n +++- IAccessible2_3 [Deprecated]\n ++++ IAccessible2_3\n ++ + IAccessible2_4\n ++ IAccessibleAction\n ++ IAccessibleApplication\n ++ IAccessibleComponent\n ++-@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 ++- [out, retval] long *nRanges +++@@ -2209,6 +2210,58 @@ interface IAccessibleComponent : IUnknown +++ [out, retval] IA2Color *background ++ ); ++ } ++ + ++ +/** ++++ * This structure represents a directional range of the content. It is defined ++++ * by two points in the content, where each one is defined by an accessible ++++ * object and an offset relative to it. A typical case of a range point is ++++ * a text accessible and text offset within it. ++++ * ++++ * The "anchor" is one point of the range and typically remains constant. ++++ * The other point is the "active" point, which typically corresponds to ++++ * the user's focus or point of interest. The user moves the active point to ++++ * expand or collapse the range. In most cases, anchor is the start of the range ++++ * and active is the end. However, in case of selection, when selecting ++++ * backwards (e.g. pressing shift+left arrow in a text field), the start of ++++ * the range is the active point, as the user moves this to manipulate ++++ * the selection. ++++ */ ++++typedef struct IA2Range { ++++ IUnknown* anchor; ++++ long anchorOffset; ++++ IUnknown* active; ++++ long activeOffset; ++++} IA2Range; ++++ ++++/** ++ + * @brief This interface is an extension of IAccessible2_3 which exposes a ++ + * single method for setting the current selection given a number of selection ++ + * ranges. ++@@ -46,4 +70,124 @@ index 97bf11594646..07121230dc73 100644 ++ + ++ /************************************************************************* ++ * ++- * File Name (AccessibleComponent.idl) +++ * File Name (AccessibleValue.idl) +++diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch +++index 17229419061ce..754c46e4c2067 100644 +++--- a/third_party/iaccessible2/set_selection_ranges.patch ++++++ b/third_party/iaccessible2/set_selection_ranges.patch +++@@ -1,21 +1,45 @@ +++ diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl +++-index 97bf11594646..07121230dc73 100644 ++++index dd7ddf72b5ba1..433965f8a77f6 100644 +++ --- a/third_party/iaccessible2/ia2_api_all.idl +++ +++ b/third_party/iaccessible2/ia2_api_all.idl +++-@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 ++++@@ -1324,7 +1324,8 @@ IA2_STATE_PINNED = 0x80000 ++++ @section _interfaces Interfaces +++ IAccessible2\n +++ IAccessible2_2\n +++- IAccessible2_3\n ++++- IAccessible2_3 [Deprecated]\n +++++ IAccessible2_3 +++ + IAccessible2_4\n +++ IAccessibleAction\n +++ IAccessibleApplication\n +++ IAccessibleComponent\n +++-@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 +++- [out, retval] long *nRanges ++++@@ -2209,6 +2210,58 @@ interface IAccessibleComponent : IUnknown ++++ [out, retval] IA2Color *background +++ ); +++ } +++ + +++ +/** +++++ * This structure represents a directional range of the content. It is defined +++++ * by two points in the content, where each one is defined by an accessible +++++ * object and an offset relative to it. A typical case of a range point is +++++ * a text accessible and text offset within it. +++++ * +++++ * The "anchor" is one point of the range and typically remains constant. +++++ * The other point is the "active" point, which typically corresponds to +++++ * the user's focus or point of interest. The user moves the active point to +++++ * expand or collapse the range. In most cases, anchor is the start of the range +++++ * and active is the end. However, in case of selection, when selecting +++++ * backwards (e.g. pressing shift+left arrow in a text field), the start of +++++ * the range is the active point, as the user moves this to manipulate +++++ * the selection. +++++ */ +++++typedef struct IA2Range { +++++ IUnknown* anchor; +++++ long anchorOffset; +++++ IUnknown* active; +++++ long activeOffset; +++++} IA2Range; +++++ +++++/** +++ + * @brief This interface is an extension of IAccessible2_3 which exposes a +++ + * single method for setting the current selection given a number of selection +++ + * ranges. +++@@ -46,4 +70,63 @@ index 97bf11594646..07121230dc73 100644 +++ + +++ /************************************************************************* +++ * +++- * File Name (AccessibleComponent.idl) ++++ * File Name (AccessibleValue.idl) ++++diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch ++++index 17229419061ce..3e2081010d688 100644 ++++--- a/third_party/iaccessible2/set_selection_ranges.patch +++++++ b/third_party/iaccessible2/set_selection_ranges.patch ++++@@ -1,21 +1,43 @@ ++++ diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl ++++-index 97bf11594646..07121230dc73 100644 +++++index dd7ddf72b5ba1..bb6602208e69b 100644 ++++ --- a/third_party/iaccessible2/ia2_api_all.idl ++++ +++ b/third_party/iaccessible2/ia2_api_all.idl ++++-@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 +++++@@ -1325,6 +1325,7 @@ IA2_STATE_PINNED = 0x80000 ++++ IAccessible2\n ++++ IAccessible2_2\n ++++- IAccessible2_3\n +++++ IAccessible2_3 [Deprecated]\n ++++ + IAccessible2_4\n ++++ IAccessibleAction\n ++++ IAccessibleApplication\n ++++ IAccessibleComponent\n ++++-@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 ++++- [out, retval] long *nRanges +++++@@ -2209,6 +2210,58 @@ interface IAccessibleComponent : IUnknown +++++ [out, retval] IA2Color *background ++++ ); ++++ } ++++ + ++++ +/** ++++++ * This structure represents a directional range of the content. It is defined ++++++ * by two points in the content, where each one is defined by an accessible ++++++ * object and an offset relative to it. A typical case of a range point is ++++++ * a text accessible and text offset within it. ++++++ * ++++++ * The "anchor" is one point of the range and typically remains constant. ++++++ * The other point is the "active" point, which typically corresponds to ++++++ * the user's focus or point of interest. The user moves the active point to ++++++ * expand or collapse the range. In most cases, anchor is the start of the range ++++++ * and active is the end. However, in case of selection, when selecting ++++++ * backwards (e.g. pressing shift+left arrow in a text field), the start of ++++++ * the range is the active point, as the user moves this to manipulate ++++++ * the selection. ++++++ */ ++++++typedef struct IA2Range { ++++++ IUnknown* anchor; ++++++ long anchorOffset; ++++++ IUnknown* active; ++++++ long activeOffset; ++++++} IA2Range; ++++++ ++++++/** ++++ + * @brief This interface is an extension of IAccessible2_3 which exposes a ++++ + * single method for setting the current selection given a number of selection ++++ + * ranges. ++++@@ -46,4 +68,4 @@ index 97bf11594646..07121230dc73 100644 ++++ + ++++ /************************************************************************* ++++ * ++++- * File Name (AccessibleComponent.idl) +++++ * File Name (AccessibleValue.idl)