avicap32: Use the Unix call helpers.
[wine.git] / include / wine / iaccessible2.idl
blob4410f9f4f52e746ea96633b8d8c54a02a5855230
1 /*************************************************************************
3 * File Name (api_all_headers.idl)
5 * IAccessible2 IDL Specification
7 * Copyright (c) 2013 Linux Foundation
8 * All rights reserved.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
23 * 3. Neither the name of the Linux Foundation nor the names of its
24 * contributors may be used to endorse or promote products
25 * derived from this software without specific prior written
26 * permission.
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
29 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
30 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
33 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
35 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
38 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
39 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
40 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 * This BSD License conforms to the Open Source Initiative "Simplified
43 * BSD License" as published at:
44 * http://www.opensource.org/licenses/bsd-license.php
46 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
47 * mark may be used in accordance with the Linux Foundation Trademark
48 * Policy to indicate compliance with the IAccessible2 specification.
50 ************************************************************************/
52 #if 0
53 #pragma makedep header install
54 #endif
56 import "objidl.idl";
57 import "oaidl.idl";
58 import "oleacc.idl";
60 /*************************************************************************
62 * File Name (IA2CommonTypes.idl)
64 * IAccessible2 IDL Specification
66 * Copyright (c) 2007, 2013 Linux Foundation
67 * Copyright (c) 2006 IBM Corporation
68 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
69 * All rights reserved.
72 * Redistribution and use in source and binary forms, with or without
73 * modification, are permitted provided that the following conditions
74 * are met:
76 * 1. Redistributions of source code must retain the above copyright
77 * notice, this list of conditions and the following disclaimer.
79 * 2. Redistributions in binary form must reproduce the above
80 * copyright notice, this list of conditions and the following
81 * disclaimer in the documentation and/or other materials
82 * provided with the distribution.
84 * 3. Neither the name of the Linux Foundation nor the names of its
85 * contributors may be used to endorse or promote products
86 * derived from this software without specific prior written
87 * permission.
89 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
90 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
91 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
92 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
93 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
94 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
95 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
96 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
97 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
98 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
99 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
100 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
101 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
103 * This BSD License conforms to the Open Source Initiative "Simplified
104 * BSD License" as published at:
105 * http://www.opensource.org/licenses/bsd-license.php
107 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
108 * mark may be used in accordance with the Linux Foundation Trademark
109 * Policy to indicate compliance with the IAccessible2 specification.
111 ************************************************************************/
113 /** These constants control the scrolling of an object or substring into a window.
115 This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
117 enum IA2ScrollType {
119 /** Scroll the top left corner of the object or substring such that the top left
120 corner (and as much as possible of the rest of the object or substring) is within
121 the top level window. In cases where the entire object or substring fits within
122 the top level window, the placement of the object or substring is dependent on
123 the application. For example, the object or substring may be scrolled to the
124 closest edge, the furthest edge, or midway between those two edges. In cases
125 where there is a hierarchy of nested scrollable controls, more than one control
126 may have to be scrolled.
128 IA2_SCROLL_TYPE_TOP_LEFT,
130 /** Scroll the bottom right corner of the object or substring such that the bottom right
131 corner (and as much as possible of the rest of the object or substring) is within
132 the top level window. In cases where the entire object or substring fits within
133 the top level window, the placement of the object or substring is dependent on
134 the application. For example, the object or substring may be scrolled to the
135 closest edge, the furthest edge, or midway between those two edges. In cases
136 where there is a hierarchy of nested scrollable controls, more than one control
137 may have to be scrolled.
139 IA2_SCROLL_TYPE_BOTTOM_RIGHT,
141 /** Scroll the top edge of the object or substring such that the top edge
142 (and as much as possible of the rest of the object or substring) is within the
143 top level window. In cases where the entire object or substring fits within
144 the top level window, the placement of the object or substring is dependent on
145 the application. For example, the object or substring may be scrolled to the
146 closest edge, the furthest edge, or midway between those two edges. In cases
147 where there is a hierarchy of nested scrollable controls, more than one control
148 may have to be scrolled.
150 IA2_SCROLL_TYPE_TOP_EDGE,
152 /** Scroll the bottom edge of the object or substring such that the bottom edge
153 (and as much as possible of the rest of the object or substring) is within the
154 top level window. In cases where the entire object or substring fits within
155 the top level window, the placement of the object or substring is dependent on
156 the application. For example, the object or substring may be scrolled to the
157 closest edge, the furthest edge, or midway between those two edges. In cases
158 where there is a hierarchy of nested scrollable controls, more than one control
159 may have to be scrolled.
161 IA2_SCROLL_TYPE_BOTTOM_EDGE,
163 /** Scroll the left edge of the object or substring such that the left edge
164 (and as much as possible of the rest of the object or substring) is within the
165 top level window. In cases where the entire object or substring fits within
166 the top level window, the placement of the object or substring is dependent on
167 the application. For example, the object or substring may be scrolled to the
168 closest edge, the furthest edge, or midway between those two edges. In cases
169 where there is a hierarchy of nested scrollable controls, more than one control
170 may have to be scrolled.
172 IA2_SCROLL_TYPE_LEFT_EDGE,
174 /** Scroll the right edge of the object or substring such that the right edge
175 (and as much as possible of the rest of the object or substring) is within the
176 top level window. In cases where the entire object or substring fits within
177 the top level window, the placement of the object or substring is dependent on
178 the application. For example, the object or substring may be scrolled to the
179 closest edge, the furthest edge, or midway between those two edges. In cases
180 where there is a hierarchy of nested scrollable controls, more than one control
181 may have to be scrolled.
183 IA2_SCROLL_TYPE_RIGHT_EDGE,
185 /** Scroll the object or substring such that as much as possible of the
186 object or substring is within the top level window. The placement of
187 the object is dependent on the application. For example, the object or
188 substring may be scrolled to to closest edge, the furthest edge, or midway
189 between those two edges.
191 IA2_SCROLL_TYPE_ANYWHERE
194 /** These constants define which coordinate system a point is located in.
196 This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
197 IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
198 IAccessibleText::scrollSubstringToPoint.
200 enum IA2CoordinateType {
202 /// The coordinates are relative to the screen.
203 IA2_COORDTYPE_SCREEN_RELATIVE,
205 /** The coordinates are relative to the upper left corner of the bounding box
206 of the immediate parent.
208 IA2_COORDTYPE_PARENT_RELATIVE
212 /** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
214 Refer to @ref _specialOffsets
215 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
216 for more information.
218 enum IA2TextSpecialOffsets {
219 IA2_TEXT_OFFSET_LENGTH = -1, /**< This offset is equivalent to the length of the string. It eliminates
220 the need to call IAccessibleText::nCharacters. */
221 IA2_TEXT_OFFSET_CARET = -2 /**< This offset signifies that the text related to the physical location
222 of the caret should be used. */
225 /** These constants specify the kind of change made to a table.
227 This enum is used in the IA2TableModelChange struct which in turn is used by
228 IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
230 enum IA2TableModelChangeType {
231 IA2_TABLE_MODEL_CHANGE_INSERT, // = 0;
232 IA2_TABLE_MODEL_CHANGE_DELETE,
233 IA2_TABLE_MODEL_CHANGE_UPDATE
236 /** A structure defining the type of and extents of changes made to a table
238 IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
239 In the case of an insertion or change the row and column offsets define the boundaries
240 of the inserted or changed subtable after the operation. In the case of a deletion
241 the row and column offsets define the boundaries of the subtable being removed before
242 the removal.
244 typedef struct IA2TableModelChange {
245 enum IA2TableModelChangeType type; // insert, delete, update
246 long firstRow; ///< 0 based, inclusive
247 long lastRow; ///< 0 based, inclusive
248 long firstColumn; ///< 0 based, inclusive
249 long lastColumn; ///< 0 based, inclusive
250 } IA2TableModelChange;
251 /*************************************************************************
253 * File Name (AccessibleRelation.idl)
255 * IAccessible2 IDL Specification
257 * Copyright (c) 2007, 2013 Linux Foundation
258 * Copyright (c) 2006 IBM Corporation
259 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
260 * All rights reserved.
263 * Redistribution and use in source and binary forms, with or without
264 * modification, are permitted provided that the following conditions
265 * are met:
267 * 1. Redistributions of source code must retain the above copyright
268 * notice, this list of conditions and the following disclaimer.
270 * 2. Redistributions in binary form must reproduce the above
271 * copyright notice, this list of conditions and the following
272 * disclaimer in the documentation and/or other materials
273 * provided with the distribution.
275 * 3. Neither the name of the Linux Foundation nor the names of its
276 * contributors may be used to endorse or promote products
277 * derived from this software without specific prior written
278 * permission.
280 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
281 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
282 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
283 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
284 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
285 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
286 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
287 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
288 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
289 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
290 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
291 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
292 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
294 * This BSD License conforms to the Open Source Initiative "Simplified
295 * BSD License" as published at:
296 * http://www.opensource.org/licenses/bsd-license.php
298 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
299 * mark may be used in accordance with the Linux Foundation Trademark
300 * Policy to indicate compliance with the IAccessible2 specification.
302 ************************************************************************/
308 /** @defgroup grpRelations Relations
309 Use the following constants to compare against the BSTRs returned by
310 IAccessibleRelation::relationType.
312 ///@{
314 /** The target object is the containing application object. */
315 const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
317 /** The target object is the containing document object. The target object implements
318 the IAccessibleDocument interface.
320 const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
322 /** The target object is the containing tab pane object. */
323 const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
325 /** The target object is the containing window object. */
326 const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
328 /** Some attribute of this object is affected by a target object. */
329 const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
331 /** This object is interactive and controls some attribute of a target object. */
332 const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
334 /** This object is described by the target object. */
335 const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
337 /** This object is describes the target object. */
338 const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
340 /** This object is embedded by a target object. */
341 const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
343 /** This object embeds a target object. This relation can be used on the
344 OBJID_CLIENT accessible for a top level window to show where the content
345 areas are.
347 const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
349 /** Content flows to this object from a target object.
350 This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
351 objects together in order to allow assistive technology to follow the
352 intended reading order.
354 const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
356 /** Content flows from this object to a target object. */
357 const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
359 /** This object is label for a target object. */
360 const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
362 /** This object is labelled by a target object. Note that the double L spelling
363 which follows is preferred. Please use it instead. This single L version may
364 be removed in a later version.
366 const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
368 /** This object is labelled by a target object. */
369 const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
371 /** This object is a member of a group of one or more objects. When
372 there is more than one object in the group each member may have one and the
373 same target, e.g. a grouping object. It is also possible that each member has
374 multiple additional targets, e.g. one for every other member in the group.
376 const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
378 /** The target object is the next object in the tab order. */
379 const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
381 /** This object is a logical child of a target object. This relation is the reciprocal
382 of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
383 tree is such that objects can be in a logical parent-child relationship which is
384 different from the hierarchy of the accessible tree. */
385 const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
387 /** This object is a logical parent of a target object. This relation is the reciprocal
388 of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
389 tree is such that objects can be in a logical parent-child relationship which is
390 different from the hierarchy of the accessible tree. */
391 const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
393 /** This object is a parent window of the target object. */
394 const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
396 /** This object is a transient component related to the target object.
397 When this object is activated the target object doesn't lose focus.
399 const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
401 /** The target object is the previous object in the tab order. */
402 const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
404 /** This object is a sub window of a target object. */
405 const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
407 ///@}
409 /** This interface gives access to an object's set of relations.
411 [object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
412 interface IAccessibleRelation : IUnknown
414 /** @brief Returns the type of the relation.
415 @param [out] relationType
416 The strings returned are defined @ref grpRelations "in this section of the documentation".
417 @retval S_OK
419 [propget] HRESULT relationType
421 [out, retval] BSTR *relationType
424 /** @brief Returns a localized version of the relation type.
425 @param [out] localizedRelationType
426 @retval S_OK
428 [propget] HRESULT localizedRelationType
430 [out, retval] BSTR *localizedRelationType
433 /** @brief Returns the number of targets for this relation.
434 @param [out] nTargets
435 @retval S_OK
437 [propget] HRESULT nTargets
439 [out, retval] long *nTargets
442 /** @brief Returns one accessible relation target.
443 @param [in] targetIndex
444 0 based index
445 @param [out] target
446 @retval S_OK
447 @retval E_INVALIDARG if bad [in] passed
448 @note Use QueryInterface to get IAccessible2.
450 [propget] HRESULT target
452 [in] long targetIndex,
453 [out, retval] IUnknown **target
456 /** @brief Returns multiple accessible relation targets
457 @param [in] maxTargets
458 maximum size of the array allocated by the client
459 @param [out] targets
460 The array of target objects. Note that this array is to be allocated by the
461 client and freed when no longer needed. Refer to @ref _arrayConsideration
462 "Special Consideration when using Arrays" for more details. You will need to use
463 QueryInterface on the IUnknown to get the IAccessible2.
464 @param [out] nTargets
465 actual number of targets in the returned array (not more than maxTargets)
466 @retval S_OK
467 @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
469 [propget] HRESULT targets
471 [in] long maxTargets,
472 [out, size_is(maxTargets), length_is(*nTargets)]
473 IUnknown **targets,
474 [out, retval] long *nTargets
478 /*************************************************************************
480 * File Name (AccessibleAction.idl)
482 * IAccessible2 IDL Specification
484 * Copyright (c) 2007, 2013 Linux Foundation
485 * Copyright (c) 2006 IBM Corporation
486 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
487 * All rights reserved.
490 * Redistribution and use in source and binary forms, with or without
491 * modification, are permitted provided that the following conditions
492 * are met:
494 * 1. Redistributions of source code must retain the above copyright
495 * notice, this list of conditions and the following disclaimer.
497 * 2. Redistributions in binary form must reproduce the above
498 * copyright notice, this list of conditions and the following
499 * disclaimer in the documentation and/or other materials
500 * provided with the distribution.
502 * 3. Neither the name of the Linux Foundation nor the names of its
503 * contributors may be used to endorse or promote products
504 * derived from this software without specific prior written
505 * permission.
507 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
508 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
509 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
510 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
511 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
512 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
513 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
514 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
515 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
516 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
517 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
518 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
519 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
521 * This BSD License conforms to the Open Source Initiative "Simplified
522 * BSD License" as published at:
523 * http://www.opensource.org/licenses/bsd-license.php
525 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
526 * mark may be used in accordance with the Linux Foundation Trademark
527 * Policy to indicate compliance with the IAccessible2 specification.
529 ************************************************************************/
535 /** This enum defines values which are predefined actions for use when implementing
536 support for media.
538 This enum is used when specifying an action for IAccessibleAction::doAction.
541 enum IA2Actions {
542 IA2_ACTION_OPEN = -1, /**< Used to inform the server that the client will
543 signal via IA2_ACTION_COMPLETE when it has consumed
544 the content provided by the object. This action
545 allows the object's server to wait for all clients
546 to signal their readiness for additional content.
547 Any form of content generation that requires
548 synchronization with an AT would require use of this
549 action. One example is the generation of text describing
550 visual content not obvious from a video's sound track.
551 In this scenario the Text to Speech or Braille output
552 may take more time than the related length of silence
553 in the video's sound track. */
554 IA2_ACTION_COMPLETE = -2, /**< Used by the client to inform the server that it has
555 consumed the most recent content provided by this object. */
556 IA2_ACTION_CLOSE = -3 /**< Used to inform the server that the client no longer
557 requires synchronization. */
560 /** @brief This interface gives access to actions that can be executed
561 for accessible objects.
563 Every accessible object that can be manipulated via the native GUI beyond the
564 methods available either in the MSAA IAccessible interface or in the set of
565 IAccessible2 interfaces (other than this IAccessibleAction interface) should
566 support the IAccessibleAction interface in order to provide Assistive Technology
567 access to all the actions that can be performed by the object. Each action can
568 be performed or queried for a name, description or associated key bindings.
569 Actions are needed more for ATs that assist the mobility impaired, such as
570 on-screen keyboards and voice command software. By providing actions directly,
571 the AT can present them to the user without the user having to perform the extra
572 steps to navigate a context menu.
574 The first action should be equivalent to the MSAA default action. If there is
575 only one action, %IAccessibleAction should also be implemented.
577 [object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
578 interface IAccessibleAction : IUnknown
581 /** @brief Returns the number of accessible actions available in this object.
583 If there are more than one, the first one is considered the
584 "default" action of the object.
585 @param [out] nActions
586 The returned value of the number of actions is zero if there are
587 no actions.
588 @retval S_OK
589 @note This method is missing a [propget] prefix in the IDL. The result is the
590 method is named nActions in generated C++ code instead of get_nActions.
592 HRESULT nActions
594 [out,retval] long* nActions
597 /** @brief Performs the specified Action on the object.
598 @param [in] actionIndex
599 0 based index specifying the action to perform. If it lies outside
600 the valid range no action is performed.
601 @retval S_OK
602 @retval S_FALSE if action could not be performed
603 @retval E_INVALIDARG if bad [in] passed
604 @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
606 HRESULT doAction
608 [in] long actionIndex
611 /** @brief Returns a description of the specified action of the object.
612 @param [in] actionIndex
613 0 based index specifying which action's description to return.
614 If it lies outside the valid range an empty string is returned.
615 @param [out] description
616 The returned value is a localized string of the specified action.
617 @retval S_OK
618 @retval S_FALSE if there is nothing to return, [out] value is NULL
619 @retval E_INVALIDARG if bad [in] passed
621 [propget] HRESULT description
623 [in] long actionIndex,
624 [out, retval] BSTR *description
627 /** @brief Returns an array of BSTRs describing one or more key bindings, if
628 there are any, associated with the specified action.
630 The returned strings are the localized human readable key sequences to be
631 used to activate each action, e.g. "Ctrl+Shift+D". Since these key
632 sequences are to be used when the object has focus, they are like
633 mnemonics (access keys), and not like shortcut (accelerator) keys.
635 There is no need to implement this method for single action controls since
636 that would be redundant with the standard MSAA programming practice of
637 getting the mnemonic from get_accKeyboardShortcut.
639 An AT such as an On Screen Keyboard might not expose these bindings but
640 provide alternative means of activation.
642 Note: the client allocates and passes in an array of pointers. The server
643 allocates the BSTRs and passes back one or more pointers to these BSTRs into
644 the array of pointers allocated by the client. The client is responsible
645 for deallocating the BSTRs.
647 @param [in] actionIndex
648 0 based index specifying which action's key bindings should be returned.
649 @param [in] nMaxBindings
650 This parameter is ignored. Refer to @ref _arrayConsideration
651 "Special Consideration when using Arrays" for more details.
652 @param [out] keyBindings
653 An array of BSTRs, allocated by the server, one for each key binding.
654 The client must free it with CoTaskMemFree.
655 @param [out] nBindings
656 The number of key bindings returned; the size of the returned array.
657 @retval S_OK
658 @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively
659 @retval E_INVALIDARG if bad [in] passed
661 [propget] HRESULT keyBinding
663 [in] long actionIndex,
664 [in] long nMaxBindings,
665 [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
666 [out, retval] long *nBindings
669 /** @brief Returns the non-localized name of specified action.
670 @param [in] actionIndex
671 0 based index specifying which action's non-localized name should be returned.
672 @param [out] name
673 @retval S_OK
674 @retval S_FALSE if there is nothing to return, [out] value is NULL
675 @retval E_INVALIDARG if bad [in] passed
677 [propget] HRESULT name
679 [in] long actionIndex,
680 [out, retval] BSTR *name
683 /** @brief Returns the localized name of specified action.
684 @param [in] actionIndex
685 0 based index specifying which action's localized name should be returned.
686 @param [out] localizedName
687 @retval S_OK
688 @retval S_FALSE if there is nothing to return, [out] value is NULL
689 @retval E_INVALIDARG if bad [in] passed
691 [propget] HRESULT localizedName
693 [in] long actionIndex,
694 [out, retval] BSTR *localizedName
698 /*************************************************************************
700 * File Name (AccessibleRole.idl)
702 * IAccessible2 IDL Specification
704 * Copyright (c) 2007, 2013 Linux Foundation
705 * Copyright (c) 2006 IBM Corporation
706 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
707 * All rights reserved.
710 * Redistribution and use in source and binary forms, with or without
711 * modification, are permitted provided that the following conditions
712 * are met:
714 * 1. Redistributions of source code must retain the above copyright
715 * notice, this list of conditions and the following disclaimer.
717 * 2. Redistributions in binary form must reproduce the above
718 * copyright notice, this list of conditions and the following
719 * disclaimer in the documentation and/or other materials
720 * provided with the distribution.
722 * 3. Neither the name of the Linux Foundation nor the names of its
723 * contributors may be used to endorse or promote products
724 * derived from this software without specific prior written
725 * permission.
727 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
728 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
729 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
730 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
731 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
732 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
733 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
734 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
735 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
736 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
737 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
738 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
739 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
741 * This BSD License conforms to the Open Source Initiative "Simplified
742 * BSD License" as published at:
743 * http://www.opensource.org/licenses/bsd-license.php
745 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
746 * mark may be used in accordance with the Linux Foundation Trademark
747 * Policy to indicate compliance with the IAccessible2 specification.
749 ************************************************************************/
753 /** Collection of roles
755 This enumerator defines an extended set of accessible roles of objects implementing
756 the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
757 through the MSAA get_accRole method. Examples are 'footnote', 'heading', and
758 'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
760 enum IA2Role {
762 /** Unknown role. The object contains some Accessible information, but its
763 role is not known.
765 IA2_ROLE_UNKNOWN = 0,
767 /** An object that can be drawn into and to manage events from the objects
768 drawn into it. Also refer to ::IA2_ROLE_FRAME,
769 ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE.
771 IA2_ROLE_CANVAS = 0x401,
773 /// A caption describing another object.
774 IA2_ROLE_CAPTION,
776 /// Used for check buttons that are menu items.
777 IA2_ROLE_CHECK_MENU_ITEM,
779 /// A specialized dialog that lets the user choose a color.
780 IA2_ROLE_COLOR_CHOOSER,
782 /// A date editor.
783 IA2_ROLE_DATE_EDITOR,
785 /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
786 Also refer to ::IA2_ROLE_INTERNAL_FRAME.
788 IA2_ROLE_DESKTOP_ICON,
790 /** A desktop pane. A pane that supports internal frames and iconified
791 versions of those internal frames. Also refer to ::IA2_ROLE_INTERNAL_FRAME.
793 IA2_ROLE_DESKTOP_PANE,
795 /** A directory pane. A pane that allows the user to navigate through
796 and select the contents of a directory. May be used by a file chooser.
797 Also refer to ::IA2_ROLE_FILE_CHOOSER.
799 IA2_ROLE_DIRECTORY_PANE,
801 /** An editable text object in a toolbar. <b>Deprecated.</b>
802 The edit bar role was meant for a text area in a tool bar. However, to detect
803 a text area in a tool bar the AT can query the parent.
805 IA2_ROLE_EDITBAR,
807 /// Embedded (OLE) object.
808 IA2_ROLE_EMBEDDED_OBJECT,
810 /// Text that is used as an endnote (footnote at the end of a chapter or section).
811 IA2_ROLE_ENDNOTE,
813 /** A file chooser. A specialized dialog that displays the files in the
814 directory and lets the user select a file, browse a different directory,
815 or specify a filename. May use the directory pane to show the contents of
816 a directory.
817 Also refer to ::IA2_ROLE_DIRECTORY_PANE.
819 IA2_ROLE_FILE_CHOOSER,
821 /** A font chooser. A font chooser is a component that lets the user pick
822 various attributes for fonts.
824 IA2_ROLE_FONT_CHOOSER,
826 /** Footer of a document page.
827 Also refer to ::IA2_ROLE_HEADER.
829 IA2_ROLE_FOOTER,
831 /// Text that is used as a footnote. Also refer to ::IA2_ROLE_ENDNOTE.
832 IA2_ROLE_FOOTNOTE,
834 /** A container of form controls. An example of the use of this role is to
835 represent an HTML FORM tag.
837 IA2_ROLE_FORM,
839 /** Frame role. A top level window with a title bar, border, menu bar, etc.
840 It is often used as the primary window for an application. Also refer to
841 ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
843 IA2_ROLE_FRAME,
845 /** A glass pane. A pane that is guaranteed to be painted on top of all panes
846 beneath it. Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
847 ::IA2_ROLE_ROOT_PANE.
849 IA2_ROLE_GLASS_PANE,
851 /** Header of a document page.
852 Also refer to ::IA2_ROLE_FOOTER.
854 IA2_ROLE_HEADER,
856 /// Heading. Use the IAccessible2::attributes level attribute to determine the heading level.
857 IA2_ROLE_HEADING,
859 /// A small fixed size picture, typically used to decorate components.
860 IA2_ROLE_ICON,
862 /** An image map object. Usually a graphic with multiple hotspots, where
863 each hotspot can be activated resulting in the loading of another document
864 or section of a document.
866 IA2_ROLE_IMAGE_MAP,
868 /** An object which is used to allow input of characters not found on a keyboard,
869 such as the input of Chinese characters on a Western keyboard.
871 IA2_ROLE_INPUT_METHOD_WINDOW,
873 /** An internal frame. A frame-like object that is clipped by a desktop pane.
874 The desktop pane, internal frame, and desktop icon objects are often used to
875 create multiple document interfaces within an application.
876 Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
878 IA2_ROLE_INTERNAL_FRAME,
880 /// An object used to present an icon or short string in an interface.
881 IA2_ROLE_LABEL,
883 /** A layered pane. A specialized pane that allows its children to be drawn
884 in layers, providing a form of stacking order. This is usually the pane that
885 holds the menu bar as well as the pane that contains most of the visual
886 components in a window.
887 Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
889 IA2_ROLE_LAYERED_PANE,
891 /** A section whose content is parenthetic or ancillary to the main content
892 of the resource.
894 IA2_ROLE_NOTE,
896 /** A specialized pane whose primary use is inside a dialog.
897 Also refer to MSAA's dialog role.
899 IA2_ROLE_OPTION_PANE,
901 /** An object representing a page of document content. It is used in documents
902 which are accessed by the user on a page by page basis.
904 IA2_ROLE_PAGE,
906 /// A paragraph of text.
907 IA2_ROLE_PARAGRAPH,
909 /** A radio button that is a menu item.
910 Also refer to MSAA's button and menu item roles.
912 IA2_ROLE_RADIO_MENU_ITEM,
914 /** An object which is redundant with another object in the accessible hierarchy.
915 ATs typically ignore objects with this role.
917 IA2_ROLE_REDUNDANT_OBJECT,
919 /** A root pane. A specialized pane that has a glass pane and a layered pane
920 as its children.
921 Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
923 IA2_ROLE_ROOT_PANE,
925 /** A ruler such as those used in word processors.
927 IA2_ROLE_RULER,
929 /** A scroll pane. An object that allows a user to incrementally view a large
930 amount of information. Its children can include scroll bars and a viewport.
931 Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
933 IA2_ROLE_SCROLL_PANE,
935 /** A container of document content. An example of the use of this role is to
936 represent an HTML DIV tag. A section may be used as a region. A region is a
937 group of elements that together form a perceivable unit. A region does not
938 necessarily follow the logical structure of the content, but follows the
939 perceivable structure of the page. A region may have an attribute in the set
940 of IAccessible2::attributes which indicates that it is "live". A live region
941 is content that is likely to change in response to a timed change, a user
942 event, or some other programmed logic or event.
944 IA2_ROLE_SECTION,
946 /// Object with graphical representation used to represent content on draw pages.
947 IA2_ROLE_SHAPE,
949 /** A split pane. A specialized panel that presents two other panels at the
950 same time. Between the two panels is a divider the user can manipulate to make
951 one panel larger and the other panel smaller.
953 IA2_ROLE_SPLIT_PANE,
955 /** An object that forms part of a menu system but which can be "undocked"
956 from or "torn off" the menu system to exist as a separate window.
958 IA2_ROLE_TEAR_OFF_MENU,
960 /// An object used as a terminal emulator.
961 IA2_ROLE_TERMINAL,
963 /// Collection of objects that constitute a logical text entity.
964 IA2_ROLE_TEXT_FRAME,
966 /** A toggle button. A specialized push button that can be checked or unchecked,
967 but does not provide a separate indicator for the current state.
968 Also refer to MSAA's roles of push button, check box, and radio button.
969 <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used. Instead, use MSAA's
970 ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
972 IA2_ROLE_TOGGLE_BUTTON,
974 /** A viewport. An object usually used in a scroll pane. It represents the
975 portion of the entire data that the user can see. As the user manipulates
976 the scroll bars, the contents of the viewport can change.
977 Also refer to ::IA2_ROLE_SCROLL_PANE.
979 IA2_ROLE_VIEW_PORT,
981 /** An object containing content which is complementary to the main content of
982 a document, but remains meaningful when separated from the main content. There
983 are various types of content that would appropriately have this role. For example,
984 in the case where content is delivered via a web portal to a web browser, this may
985 include but not be limited to show times, current weather, related articles, or
986 stocks to watch. The complementary role indicates that contained content is relevant
987 to the main content. If the complementary content is completely separable main
988 content, it may be appropriate to use a more general role.
990 IA2_ROLE_COMPLEMENTARY_CONTENT
993 /*************************************************************************
995 * File Name (AccessibleStates.idl)
997 * IAccessible2 IDL Specification
999 * Copyright (c) 2007, 2010 Linux Foundation
1000 * Copyright (c) 2006 IBM Corporation
1001 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1002 * All rights reserved.
1005 * Redistribution and use in source and binary forms, with or without
1006 * modification, are permitted provided that the following conditions
1007 * are met:
1009 * 1. Redistributions of source code must retain the above copyright
1010 * notice, this list of conditions and the following disclaimer.
1012 * 2. Redistributions in binary form must reproduce the above
1013 * copyright notice, this list of conditions and the following
1014 * disclaimer in the documentation and/or other materials
1015 * provided with the distribution.
1017 * 3. Neither the name of the Linux Foundation nor the names of its
1018 * contributors may be used to endorse or promote products
1019 * derived from this software without specific prior written
1020 * permission.
1022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1023 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1024 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1025 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1026 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1027 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1028 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1029 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1030 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1031 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1032 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1033 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1034 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1036 * This BSD License conforms to the Open Source Initiative "Simplified
1037 * BSD License" as published at:
1038 * http://www.opensource.org/licenses/bsd-license.php
1040 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1041 * mark may be used in accordance with the Linux Foundation Trademark
1042 * Policy to indicate compliance with the IAccessible2 specification.
1044 ************************************************************************/
1048 typedef long AccessibleStates;
1050 /** %IAccessible2 specific state bit constants
1052 This enum defines the state bits returned by IAccessible2::states. The
1053 %IAccessible2 state bits are in addition to those returned by MSAA.
1055 enum IA2States {
1057 /** Indicates a window is currently the active window, or is an active subelement
1058 within a container or table.
1060 This state can be used to indicate the current active item in a container, even
1061 if the container itself is not currently active. In other words this would indicate
1062 the item that will get focus if you tab to the container.
1064 This information is important for knowing what to report for trees and potentially
1065 other containers in a virtual buffer.
1067 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1069 IA2_STATE_ACTIVE = 0x1,
1071 /** Indicates that the object is armed.
1073 Used to indicate that the control is "pressed" and will be invoked when the
1074 actuator, e.g. a mouse button, is "released". An AT which either monitors the
1075 mouse or synthesizes mouse events might need to know that, and possibly a talking
1076 interface would even let the user know about it. It could also potentially be
1077 useful to on screen keyboards or test tools since the information does indicate
1078 something about the state of the interface, for example, code operating asynchronously
1079 might need to wait for the armed state to change before doing something else.
1082 IA2_STATE_ARMED = 0x2,
1084 /** Indicates the user interface object corresponding to this object no longer exists. */
1085 IA2_STATE_DEFUNCT = 0x4,
1087 /** An object with this state has a caret and implements the IAccessibleText interface.
1089 Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
1090 with IA2_STATE_EDITABLE.
1093 IA2_STATE_EDITABLE = 0x8,
1095 /** Indicates the orientation of this object is horizontal. */
1096 IA2_STATE_HORIZONTAL = 0x10,
1098 /** Indicates this object is minimized and is represented only by an icon. */
1099 IA2_STATE_ICONIFIED = 0x20,
1101 /** Indicates an input validation failure. */
1102 IA2_STATE_INVALID_ENTRY = 0x40,
1104 /** Indicates that this object manages its children.
1106 Note: Due to the fact that MSAA's WinEvents don't allow the active child index
1107 to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
1108 descendants scheme can't be used. Instead the active child object has to fire
1109 MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
1110 added to provide for event specific data to be passed with the event. At that
1111 time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
1112 IA2_STATE_MANAGES_DESCENDANTS state would be useful.
1114 IA2_STATE_MANAGES_DESCENDANTS = 0x80,
1116 /** Indicates that an object is modal.
1118 Modal objects have the behavior that something must be done with the object
1119 before the user can interact with an object in a different window.
1121 IA2_STATE_MODAL = 0x100,
1123 /** Indicates this text object can contain multiple lines of text. */
1124 IA2_STATE_MULTI_LINE = 0x200,
1126 /** Indicates this object paints every pixel within its rectangular region. */
1127 IA2_STATE_OPAQUE = 0x400,
1129 /** Indicates that user interaction is required.
1131 An example of when this state is used is when a field in a form must be filled
1132 before a form can be processed.
1134 IA2_STATE_REQUIRED = 0x800,
1136 /** Indicates an object which supports text selection.
1138 Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
1140 IA2_STATE_SELECTABLE_TEXT = 0x1000,
1142 /** Indicates that this text object can contain only a single line of text. */
1143 IA2_STATE_SINGLE_LINE = 0x2000,
1145 /** Indicates that the accessible object is stale.
1147 This state is used when the accessible object no longer accurately
1148 represents the state of the object which it is representing such as when an
1149 object is transient or when an object has been or is in the process of being
1150 destroyed or when the object's index in its parent has changed.
1152 IA2_STATE_STALE = 0x4000,
1154 /** Indicates that the object implements autocompletion.
1156 This state indicates that a text control will respond to the input of
1157 one ore more characters and cause a sub-item to become selected. The
1158 selection may also result in events fired on the parent object.
1160 IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
1162 /** Indicates this object is transient.
1164 An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
1165 For example, a list item object may be managed by its parent list object and may only
1166 exist as long as the object is actually rendered. Similarly a table cell's accessible
1167 object may exist only while the cell has focus. However, from the perspective of an
1168 assistive technology a transient object behaves like a non-transient object. As a
1169 result it is likely that this state is not of use to an assistive technology, but it
1170 is provided in case an assistive technology determines that knowledge of the transient
1171 nature of the object is useful and also for harmony with the Linux accessibility API.
1173 Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
1175 IA2_STATE_TRANSIENT = 0x10000,
1177 /** Indicates the orientation of this object is vertical. */
1178 IA2_STATE_VERTICAL = 0x20000,
1180 /** Indicates this object is checkable.
1182 The standard checkable objects are check boxes, radio buttons, check box menu
1183 items, radio menu items, and toggle buttons. Since assistive technology will
1184 determine that these objects are checkable via the object's role the checkable
1185 state is not required. However, this state is necessary in those cases where
1186 an object has a role which is not one of the previously mentioned roles. An
1187 example is a table cell which indicates whether or not an email has an attachment,
1188 whether or not an mail is considered spam, and whether or not an email has been read.
1190 IA2_STATE_CHECKABLE = 0x40000,
1192 /** Indicates this object is pinned.
1194 This state indicates that an object is fixed at a certain location. One example
1195 is a browser tab that when pinned cannot be moved until unpinned. Another example
1196 is a movable or floating object that when pinned remains in its pinned location
1197 until being unpinned.
1199 IA2_STATE_PINNED = 0x80000
1202 /*************************************************************************
1204 * File Name (Accessible2.idl)
1206 * IAccessible2 IDL Specification
1208 * Copyright (c) 2007, 2013 Linux Foundation
1209 * Copyright (c) 2006 IBM Corporation
1210 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1211 * All rights reserved.
1214 * Redistribution and use in source and binary forms, with or without
1215 * modification, are permitted provided that the following conditions
1216 * are met:
1218 * 1. Redistributions of source code must retain the above copyright
1219 * notice, this list of conditions and the following disclaimer.
1221 * 2. Redistributions in binary form must reproduce the above
1222 * copyright notice, this list of conditions and the following
1223 * disclaimer in the documentation and/or other materials
1224 * provided with the distribution.
1226 * 3. Neither the name of the Linux Foundation nor the names of its
1227 * contributors may be used to endorse or promote products
1228 * derived from this software without specific prior written
1229 * permission.
1231 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1232 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1233 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1234 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1235 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1236 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1237 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1238 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1239 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1240 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1241 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1242 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1243 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1245 * This BSD License conforms to the Open Source Initiative "Simplified
1246 * BSD License" as published at:
1247 * http://www.opensource.org/licenses/bsd-license.php
1249 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1250 * mark may be used in accordance with the Linux Foundation Trademark
1251 * Policy to indicate compliance with the IAccessible2 specification.
1253 ************************************************************************/
1255 /** @mainpage
1257 @section _interfaces Interfaces
1258 IAccessible2\n
1259 IAccessible2_2\n
1260 IAccessibleAction\n
1261 IAccessibleApplication\n
1262 IAccessibleComponent\n
1263 IAccessibleDocument\n
1264 IAccessibleEditableText\n
1265 IAccessibleHypertext\n
1266 IAccessibleHypertext2\n
1267 IAccessibleHyperlink\n
1268 IAccessibleImage\n
1269 IAccessibleRelation\n
1270 IAccessibleTable [Deprecated]\n
1271 IAccessibleTable2\n
1272 IAccessibleTableCell\n
1273 IAccessibleText\n
1274 IAccessibleText2\n
1275 IAccessibleValue
1277 @section _structs Structs
1278 IA2Locale\n
1279 IA2TableModelChange\n
1280 IA2TextSegment
1282 @section _enums Enums
1283 ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
1284 ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
1285 ::IA2EventID values identify events.\n
1286 ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
1287 ::IA2ScrollType values define where to place an object or substring on the screen.\n
1288 ::IA2States values define states which are in addition to the existing MSAA states.\n
1289 ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
1290 ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
1291 ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
1293 @section _constants Constants
1294 @ref grpRelations
1296 @section _misc Miscellaneous
1297 @ref _licensePage "BSD License"\n
1298 @ref _generalInfo "General Information"\n
1300 @page _licensePage BSD License
1301 %IAccessible2 IDL Specification
1303 Copyright (c) 2007, 2013 Linux Foundation\n
1304 Copyright (c) 2006 IBM Corporation\n
1305 Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
1306 All rights reserved.
1308 Redistribution and use in source and binary forms, with or without
1309 modification, are permitted provided that the following conditions
1310 are met:
1312 1. Redistributions of source code must retain the above copyright
1313 notice, this list of conditions and the following disclaimer.
1315 2. Redistributions in binary form must reproduce the above
1316 copyright notice, this list of conditions and the following
1317 disclaimer in the documentation and/or other materials
1318 provided with the distribution.
1320 3. Neither the name of the Linux Foundation nor the names of its
1321 contributors may be used to endorse or promote products
1322 derived from this software without specific prior written
1323 permission.
1325 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1326 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1327 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1328 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1329 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1330 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1331 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1332 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1333 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1334 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1335 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1336 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1337 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1339 This BSD License conforms to the Open Source Initiative "Simplified
1340 BSD License" as published at:
1341 http://www.opensource.org/licenses/bsd-license.php
1343 %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2
1344 mark may be used in accordance with the
1345 <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
1346 Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification.
1348 @page _generalInfo General Information
1349 The following information is applicable to two or more interfaces.
1351 @ref _errors\n
1352 @ref _memory\n
1353 &nbsp;&nbsp;@ref _arrayConsideration\n
1354 @ref _indexes\n
1355 @ref _enumBase\n
1356 @ref _specialOffsets\n
1357 @ref _discoveringInterfaces\n
1358 @ref _changingInterfaces\n
1359 @ref _applicationInfo\n
1360 @ref _childIDs\n
1361 @ref _variants\n
1362 @ref _iaaction-iahyperlink\n
1363 @ref _trademark
1365 @section _errors Error Handling
1366 HRESULT values are defined by the Microsoft&reg; Win32&reg; API. For more information, refer to
1367 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
1368 Interpreting HRESULT Values</a> in MSDN&reg;.
1370 Note that the S_FALSE return value is considered a non-error value and the
1371 SUCCEEDED macro will return TRUE. S_FALSE is used when there is no failure
1372 but there was nothing valid to return, e.g. in IAccessible2::attributes when
1373 there are no attributes. When S_FALSE is returned [out] pointer types should
1374 be NULL and [out] longs should generally be 0, but sometimes -1 is used such
1375 as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
1376 IAccessibleHypertext::hyperlinkIndex.
1378 Note that for BSTR [out] variables common COM practice is that the server does
1379 the SysAllocString and the client does the SysFreeString. Also note that when
1380 NULL is returned there is no need for the client to call SysFreeString. Please
1381 refer to the documentation for each method for more details regarding error handling.
1383 @section _memory Memory Management
1384 The following memory management issues should be considered:
1385 @li Although [out] BSTR variables are declared by the client, their space is
1386 allocated by the server. They need to be freed with SysFreeString by the
1387 client at end of life; the same is true when BSTRs are used in structs or
1388 arrays which are passed to the server.
1389 @li If there is no valid [out] BSTR to return, the server should return S_FALSE and
1390 assign NULL to the output, e.g. *theOutBSTR = NULL;.
1391 @li COM interfaces need to be referenced with AddRef when used and dereferenced
1392 with Release at end of life.
1393 @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
1394 and passed by reference. The marshaller does all the memory management.
1396 The following articles may be helpful for understanding memory management issues:
1397 @li An article by Don Box in a
1398 <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
1399 of the November 1996 edition of the Microsoft Systems Journal.
1400 @li A posting to a CodeGuru forum,
1401 <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK
1402 String: What are the rules for BSTR allocation and deallocation?</a>
1404 @subsection _arrayConsideration Special Consideration when using Arrays
1405 There are several methods which return arrays. In the case of IAccessible2::relations
1406 and IAccessibleRelation::targets the client must allocate and free the arrays.
1408 For the remaining methods which return arrays, the server must allocate the array
1409 and the client must free the array when no longer needed. These methods are
1410 IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1411 IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding,
1412 IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren,
1413 IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
1414 IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
1415 IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
1416 and IAccessibleTableCell::rowHeaderCells.
1417 For those methods, the server must allocate both the top level array and any storage
1418 associated with it, e.g. for BSTRs. The server must allocate the arrays with
1419 CoTaskMemAlloc and any BSTRs with SysAllocString. The client must use CoTaskMemFree
1420 to free the array and any BSTRs must be freed with SysFreeString.
1422 Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
1423 IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren,
1424 IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
1425 extraneous [in] parameter for the caller to specify the max size of the array.
1426 This parameter will be ignored by the COM server.
1428 @section _indexes Zero and One Based Indexes
1429 Unless otherwise specified all offsets and indexes are 0 based.
1431 @section _enumBase Enum Base
1432 Note that enums start at 0.
1434 @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
1435 IAccessibleText and IAccessibleEditableText can use one or more of the following
1436 special offset values. They are defined in the ::IA2TextSpecialOffsets enum.
1437 @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
1438 IAccessibleEditableText methods is the same as specifying the length of the string.
1439 @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset,
1440 IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the
1441 text related to the physical location of the caret should be used. This is needed for
1442 applications that consider the character offset of the end of one line (as reached by
1443 pressing the End key) the same as the offset of the first character on the next line.
1444 Since the same offset is associated with two different lines a special means is needed
1445 to fetch text from the line where the caret is physically located.
1447 @section _discoveringInterfaces Discovery of Interfaces
1448 In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using
1449 the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces. (In cases where the an application
1450 is known to have custom interfaces which provide information not supplied by IAccessible2
1451 or MSAA, then those custom interfaces can be used.) The AT can then, by default, support
1452 unknown IAccessible2/MSAA applications, without the application developers having to request
1453 AT vendors for support on an individual application by application basis.
1455 When you have a reference to an IAccessible and require a reference to an IAccessible2 use
1456 QueryService as follows:
1457 @code
1458 // pAcc is a reference to the accessible object's IAccessible interface.
1459 IServiceProvider *pService = NULL;
1460 hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService);
1461 if(SUCCEEDED(hr)) {
1462 IAccessible2 *pIA2 = NULL;
1463 hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
1464 if (SUCCEEDED(hr) && pIA2) {
1465 // The control supports IAccessible2.
1466 // pIA2 is the reference to the accessible object's IAccessible2 interface.
1469 @endcode
1471 @section _changingInterfaces Changing between Accessible Interfaces
1472 Note that developers must always implement MSAA's IAccessible and, if needed, some
1473 of the interfaces in the set of IAccessible2 interfaces. Although the IAccessible2
1474 IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
1475 MSAA's IAccessible methods are redefined by IAccessible2.
1477 QueryService must be used to switch from a reference to an MSAA IAccessible interface
1478 to another interface. This has been
1479 <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
1480 documented</a> and the pertinent facts have been extracted below:
1482 @par
1483 Why use QueryService instead of just using QueryInterface to get IAccessibleEx
1484 directly? The reason is that since MSAA 2.0, clients don't talk to a server's
1485 IAccessible interface directly; instead they talk to an intermediate MSAA-provided
1486 wrapper that calls through to the original IAccessible. This wrapper provides services
1487 such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation
1488 service, and scaling locations when running on Windows Vista with DPI scaling enabled.
1489 QueryService is the supported way to expose additional interfaces from an existing
1490 IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding
1491 to IAccessibles. QueryService is often more convenient for servers to implement than
1492 QueryInterface because it does not have the same requirements for preserving object
1493 identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to
1494 easily implement the interface on the same object or a separate object. The latter is
1495 often hard to do with QueryInterface unless the original object supports aggregation.
1497 Two related references in MSDN&reg; are:
1498 @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
1499 "Using QueryService to expose a native object model interface for an IAccessible object"</a>
1500 @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj">
1501 "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
1503 Based on this information from Microsoft, QueryService must be used to switch back and forth
1504 between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces.
1506 Regarding switching between any of the IAccessible2 interfaces, applications implementing
1507 IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
1508 will be using QueryInterface to switch between the IAccessilbe2 interfaces. Implementing
1509 the IAccessible2 interfaces on separate objects would require the use of QueryService.
1510 There is one exception, IAccessibleApplication can be implemented on a separate object so
1511 its common code doesn't have to be included in each accessible object. ATs should use
1512 QueryService to access IAccessibleApplication.
1514 @section _applicationInfo Access to Information about the Application
1515 Servers implementing IAccessible2 should provide access to the IAccessibleApplication
1516 interface via QueryService from any object so that ATs can easily determine specific
1517 information about the application such as its name or version.
1519 @section _childIDs Child IDs
1520 The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
1521 Full accessible objects must be created for each object that supports IAccessible2.
1522 Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
1523 for an object that implements any of the IAccessible2 interfaces.
1525 Microsoft's UI Automation specification has the same limitation and this was resolved
1526 in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
1527 and IAccessibleEx::GetIAccessiblePair. These methods allow mapping back and forth
1528 between an IAccessibleEx and an {IAccessible, Child ID} pair. A future version of
1529 IAccessible2 may include similar methods to map back and forth between an IAccessible2
1530 and an {IAccessible, Child ID} pair.
1532 @section _variants VARIANTs
1533 Some methods return a VARIANT. Implementers need to make sure that the return type is
1534 specified, i.e. VT_I4, VT_IDISPATCH, etc. The methods that return VARIANTs are
1535 IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
1536 IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
1538 @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
1539 In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.
1540 However, there is no practical need for that inheritance and in some cases, such as
1541 an image map of smart tags, it doesn't make sense because such an image map doesn't
1542 have actionable objects; it's the secondary smart tags that are actionable. As a
1543 result, implementations should not rely on the inheritance as it may be removed in
1544 a later version of the IDL.
1546 @section _trademark Trademark Attribution
1547 The names of actual companies and products mentioned herein may be the trademarks of
1548 their respective owners. In particular, Active Accessibility, Microsoft, MSDN, and Win32
1549 are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
1560 /** A structure defining the locale of an accessible object.
1562 IAccessible2::locale returns this struct.
1564 typedef struct IA2Locale {
1565 BSTR language; ///< ISO 639-1 Alpha-2 two character language code
1566 BSTR country; ///< ISO 3166-1 Alpha-2 two character country code
1567 BSTR variant; ///< Application specific variant of the locale
1568 } IA2Locale;
1570 /** @brief This interface exposes the primary set of information about an
1571 IAccessible2 enabled accessible object.
1573 This interface must always be provided for objects that support some
1574 portion of the collection of the %IAccessible2 interfaces.
1576 Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1577 for special considerations related to use of the MSAA IAccessible interface and
1578 the set of %IAccessible2 interfaces.
1580 [object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
1581 interface IAccessible2 : IAccessible
1584 /** @brief Returns the number of accessible relations for this object.
1585 @param [out] nRelations
1586 @retval S_OK
1588 [propget] HRESULT nRelations
1590 [out, retval] long *nRelations
1593 /** @brief Returns one accessible relation for this object.
1594 @param [in] relationIndex
1595 0 based
1596 @param [out] relation
1597 @retval S_OK
1598 @retval E_INVALIDARG if bad [in] passed
1600 [propget] HRESULT relation
1602 [in] long relationIndex,
1603 [out, retval] IAccessibleRelation **relation
1606 /** @brief Returns multiple accessible relations for this object.
1607 @param [in] maxRelations
1608 maximum size of the array allocated by the client
1609 @param [out] relations
1610 The array of accessible relation objects. Note that this array is to be
1611 allocated by the client and freed when no longer needed. Refer to @ref
1612 _arrayConsideration "Special Consideration when using Arrays" for more details.
1613 @param [out] nRelations
1614 actual number of relations in the returned array (not more than maxRelations)
1615 @retval S_OK
1616 @retval S_FALSE if there are no relations, nRelations is set to 0
1617 @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
1619 [propget] HRESULT relations
1621 [in] long maxRelations,
1622 [out, size_is(maxRelations), length_is(*nRelations)]
1623 IAccessibleRelation **relations,
1624 [out, retval] long *nRelations
1627 /** @brief Returns the role of an %IAccessible2 object.
1628 @param [out] role
1629 The role of an %IAccessible2 object.
1630 @retval S_OK
1631 @note
1632 @li For convenience MSAA roles are also passed through this method so the
1633 AT doesn't have to also fetch roles through MSAA's get_accRole.
1634 @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
1635 @li For compatibility with non IAccessible2 enabled ATs, IAccessible2
1636 applications should also add support to get_accRole to return the closest
1637 MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there
1638 is not a good match.
1639 @li This method is missing a [propget] prefix in the IDL. The result is the
1640 method is named role in generated C++ code instead of get_role.
1642 HRESULT role
1644 [out, retval] long *role
1647 /** @brief Makes an object visible on the screen.
1648 @param [in] scrollType
1649 Defines where the object should be placed on the screen.
1650 @retval S_OK
1651 @retval E_INVALIDARG if bad [in] passed
1653 HRESULT scrollTo
1655 [in] enum IA2ScrollType scrollType
1658 /** @brief Moves the top left of an object to a specified location.
1660 @param [in] coordinateType
1661 Specifies whether the coordinates are relative to the screen or the parent object.
1662 @param [in] x
1663 Defines the x coordinate.
1664 @param [in] y
1665 Defines the y coordinate.
1666 @retval S_OK
1667 @retval E_INVALIDARG if bad [in] passed
1669 HRESULT scrollToPoint
1671 [in] enum IA2CoordinateType coordinateType,
1672 [in] long x,
1673 [in] long y
1676 /** @brief Returns grouping information.
1678 Used for tree items, list items, tab panel labels, radio buttons, etc.
1679 Also used for collections of non-text objects.
1681 @param [out] groupLevel
1682 1 based, 0 indicates that this value is not applicable
1683 @param [out] similarItemsInGroup
1684 1 based, 0 indicates that this value is not applicable
1685 @param [out] positionInGroup
1686 1 based, 0 indicates that this value is not applicable. This is an index
1687 into the objects in the current group, not an index into all the objects
1688 at the same group level.
1689 @retval S_OK if at least one value is valid
1690 @retval S_FALSE if no values are valid, [out] values are 0s
1691 @note This method is meant to describe the nature of an object's containment
1692 structure. It's exposed by trees, tree grids, nested lists, nested menus,
1693 but not headings, which uses the level object attribute. It is also exposed
1694 by radio buttons (with groupLevel == 0).
1695 @note This is normally not implemented on a combo box to describe the nature
1696 of its contents. Normally an AT will get that information from its child list
1697 object. However, in some cases when non-edit combo boxes are not able to be structured
1698 such that the list is a child of the combo box, this method is implemented on
1699 the combo box itself. ATs can use this interface if a child list is not found.
1701 [propget] HRESULT groupPosition
1703 [out] long *groupLevel,
1704 [out] long *similarItemsInGroup,
1705 [out, retval] long *positionInGroup
1708 /** @brief Returns the bit strip containing any IAccessible2 states.
1710 The IAccessible2 states are in addition to the MSAA states and are defined in
1711 the IA2States enum.
1713 @param [out] states
1714 @retval S_OK
1716 [propget] HRESULT states
1718 [out, retval] AccessibleStates *states
1721 /** @brief Returns the extended role.
1723 An extended role is a role which is dynamically generated by the application.
1724 It is not predefined by the %IAccessible2 specification.
1726 @param [out] extendedRole
1727 @retval S_OK
1728 @retval S_FALSE if there is nothing to return, [out] value is NULL
1730 [propget] HRESULT extendedRole
1732 [out, retval] BSTR *extendedRole
1735 /** @brief Returns the localized extended role.
1736 @param [out] localizedExtendedRole
1737 @retval S_OK
1738 @retval S_FALSE if there is nothing to return, [out] value is NULL
1740 [propget] HRESULT localizedExtendedRole
1742 [out, retval] BSTR *localizedExtendedRole
1745 /** @brief Returns the number of extended states.
1746 @param [out] nExtendedStates
1747 @retval S_OK
1749 [propget] HRESULT nExtendedStates
1751 [out, retval] long *nExtendedStates
1754 /** @brief Returns the extended states (array of strings).
1756 An extended state is a state which is dynamically generated by the application.
1757 It is not predefined by the %IAccessible2 specification.
1759 @param [in] maxExtendedStates
1760 This parameter is ignored. Refer to @ref _arrayConsideration
1761 "Special Consideration when using Arrays" for more details.
1762 @param [out] extendedStates
1763 This array is allocated by the server. The client must free it with CoTaskMemFree.
1764 @param [out] nExtendedStates
1765 The number of extended states returned; the size of the returned array.
1766 @retval S_OK
1767 @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1769 [propget] HRESULT extendedStates
1771 [in] long maxExtendedStates,
1772 [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
1773 [out, retval] long *nExtendedStates
1776 /** @brief Returns the localized extended states (array of strings).
1778 @param [in] maxLocalizedExtendedStates
1779 This parameter is ignored. Refer to @ref _arrayConsideration
1780 "Special Consideration when using Arrays" for more details.
1781 @param [out] localizedExtendedStates
1782 This array is allocated by the server. The client must free it with CoTaskMemFree.
1783 @param [out] nLocalizedExtendedStates
1784 The number of localized extended states returned; the size of the returned array.
1785 @retval S_OK
1786 @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
1788 [propget] HRESULT localizedExtendedStates
1790 [in] long maxLocalizedExtendedStates,
1791 [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
1792 [out, retval] long *nLocalizedExtendedStates
1795 /** @brief Returns the unique ID.
1797 The uniqueID is an identifier for this object, is unique within the
1798 current window, and remains the same for the lifetime of the accessible
1799 object.
1801 The uniqueID is not related to:
1802 - the MSAA objectID which is used by the server to disambiguate between
1803 IAccessibles per HWND or
1804 - the MSAA childID which is used to disambiguate between children being
1805 managed by an IAccessible.
1807 This value is provided so the AT can have access to a unique runtime persistent
1808 identifier even when not handling an event for the object.
1810 An example of when this value is useful is if the AT wants to build a cache.
1811 The AT could cache the uniqueIDs in addition to other data being cached.
1812 When an event is fired the AT could map the uniqueID to its internal model.
1813 Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the
1814 internal structure has been invalidated and can refetch just that part.
1816 This value can also be used by an AT to determine when the current control
1817 has changed. If the role is the same for two controls that are adjacent in
1818 the tab order, this can be used to detect the new control.
1820 Another use of this value by an AT is to identify when a grouping object has
1821 changed, e.g. when moving from a radio button in one group to a radio button in a
1822 different group.
1824 One means of implementing this would be to create a factory with a 32 bit number
1825 generator and a reuse pool. The number generator would emit numbers starting
1826 at 1. Each time an object's life cycle ended, its number would be saved into a
1827 reuse pool. The number generator would be used whenever the reuse pool was empty.
1829 Another way to create a unique ID is to generate it from a pointer value, e.g. an
1830 object's address. That would be unique because no two active objects can use the
1831 same allocated memory space.
1833 @param [out] uniqueID
1834 @retval S_OK
1836 [propget] HRESULT uniqueID
1838 [out, retval] long *uniqueID
1841 /** @brief Returns the window handle for the parent window which contains this object.
1843 This is the same window handle which will be passed for any events that occur on the
1844 object, but is cached in the accessible object for use when it would be helpful to
1845 access the window handle in cases where an event isn't fired on this object.
1847 A use case is when a screen reader is grabbing an entire web page on a page load.
1848 Without the availability of windowHandle, the AT would have to get the window handle
1849 by using WindowFromAccessibleObject on each IAccessible, which is slow because it's
1850 implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for
1851 a ROLE_WINDOW object, mapping that back to a window handle.
1853 @param [out] windowHandle
1854 @retval S_OK
1856 [propget] HRESULT windowHandle
1858 [out, retval] HWND *windowHandle
1861 /** @brief Returns the index of this object in its parent object.
1862 @param [out] indexInParent
1863 0 based; -1 indicates there is no parent; the upper bound is the value
1864 returned by the parent's IAccessible::get_accChildCount.
1865 @retval S_OK
1866 @retval S_FALSE if no parent, [out] value is -1
1868 [propget] HRESULT indexInParent
1870 [out, retval] long *indexInParent
1873 /** @brief Returns the IA2Locale of the accessible object.
1874 @param [out] locale
1875 @retval S_OK
1877 [propget] HRESULT locale
1879 [out, retval] IA2Locale *locale
1882 /** @brief Returns the attributes specific to this object, such as a cell's formula.
1883 @param [out] attributes
1884 @retval S_OK
1885 @retval S_FALSE returned if there is nothing to return, [out] value is NULL
1887 [propget] HRESULT attributes
1889 [out, retval] BSTR *attributes
1894 /*************************************************************************
1896 * File Name (Accessible2_2.idl)
1898 * IAccessible2 IDL Specification
1900 * Copyright (c) 2007, 2013 Linux Foundation
1901 * Copyright (c) 2006 IBM Corporation
1902 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
1903 * All rights reserved.
1906 * Redistribution and use in source and binary forms, with or without
1907 * modification, are permitted provided that the following conditions
1908 * are met:
1910 * 1. Redistributions of source code must retain the above copyright
1911 * notice, this list of conditions and the following disclaimer.
1913 * 2. Redistributions in binary form must reproduce the above
1914 * copyright notice, this list of conditions and the following
1915 * disclaimer in the documentation and/or other materials
1916 * provided with the distribution.
1918 * 3. Neither the name of the Linux Foundation nor the names of its
1919 * contributors may be used to endorse or promote products
1920 * derived from this software without specific prior written
1921 * permission.
1923 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
1924 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
1925 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1926 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1927 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
1928 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1929 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1930 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1931 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1932 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1933 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
1934 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
1935 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1937 * This BSD License conforms to the Open Source Initiative "Simplified
1938 * BSD License" as published at:
1939 * http://www.opensource.org/licenses/bsd-license.php
1941 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
1942 * mark may be used in accordance with the Linux Foundation Trademark
1943 * Policy to indicate compliance with the IAccessible2 specification.
1945 ************************************************************************/
1952 /** @brief This interface exposes the primary set of information about an
1953 IAccessible2 enabled accessible object.
1955 This interface must always be provided for objects that support some
1956 portion of the collection of the %IAccessible2 interfaces.
1958 Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
1959 for special considerations related to use of the MSAA IAccessible interface and
1960 the set of %IAccessible2 interfaces.
1962 [object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
1963 interface IAccessible2_2 : IAccessible2
1965 /** @brief Returns the attribute value of a specified attribute specific to this object.
1966 @param [in] name
1967 @param [out] attribute
1968 @retval S_OK
1969 @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
1970 @retval E_INVALIDARG if bad [in] passed.
1971 @note The output value is a VARIANT. Typically it will be a VT_BSTR, but there
1972 are some cases where it will be a VT_I4 or VT_BOOL. Refer to the <a href=
1973 "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
1974 Object Attributes specification</a> for more information.
1976 [propget] HRESULT attribute
1978 [in] BSTR name,
1979 [out, retval] VARIANT *attribute
1982 /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
1983 @param [out] accessible
1984 @param [out] caretOffset
1985 @retval S_OK
1986 @retval S_FALSE returned if there is no caret in any of the objects in the subtree, [out] accessible is NULL and [out] caretOffset is -1.
1988 [propget] HRESULT accessibleWithCaret
1990 [out] IUnknown **accessible,
1991 [out, retval] long *caretOffset
1994 /** @brief Returns relation targets for a specified target type.
1995 @param [in] type
1996 The requested @ref grpRelations "relation type".
1997 @param [in] maxTargets
1998 The number of targets requested. 0 indicates that all targets should be returned.
1999 @param [out] targets
2000 This array is allocated by the server. The client must free it with CoTaskMemFree.
2001 @param [out] nTargets
2002 The number of targets returned; the size of the returned array.
2003 @retval S_OK
2004 @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
2005 @retval E_INVALIDARG if bad [in] passed.
2007 [propget] HRESULT relationTargetsOfType
2009 [in] BSTR type,
2010 [in] long maxTargets,
2011 [out, size_is(,*nTargets)] IUnknown ***targets,
2012 [out, retval] long *nTargets
2017 /*************************************************************************
2019 * File Name (AccessibleComponent.idl)
2021 * IAccessible2 IDL Specification
2023 * Copyright (c) 2007, 2010 Linux Foundation
2024 * Copyright (c) 2006 IBM Corporation
2025 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2026 * All rights reserved.
2029 * Redistribution and use in source and binary forms, with or without
2030 * modification, are permitted provided that the following conditions
2031 * are met:
2033 * 1. Redistributions of source code must retain the above copyright
2034 * notice, this list of conditions and the following disclaimer.
2036 * 2. Redistributions in binary form must reproduce the above
2037 * copyright notice, this list of conditions and the following
2038 * disclaimer in the documentation and/or other materials
2039 * provided with the distribution.
2041 * 3. Neither the name of the Linux Foundation nor the names of its
2042 * contributors may be used to endorse or promote products
2043 * derived from this software without specific prior written
2044 * permission.
2046 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2047 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2048 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2049 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2050 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2051 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2052 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2053 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2054 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2055 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2056 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2057 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2058 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2060 * This BSD License conforms to the Open Source Initiative "Simplified
2061 * BSD License" as published at:
2062 * http://www.opensource.org/licenses/bsd-license.php
2064 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2065 * mark may be used in accordance with the Linux Foundation Trademark
2066 * Policy to indicate compliance with the IAccessible2 specification.
2068 ************************************************************************/
2074 /** A value specifying a color in ARGB format, where each 8 bit color component
2075 specifies alpha, red, green, and blue respectively. The alpha value is optional.
2077 typedef long IA2Color;
2079 /** @brief This interface is implemented by any object that can be rendered
2080 on the screen.
2082 This interface provides the standard mechanism for an assistive technology
2083 to retrieve information concerning the graphical representation of an object.
2084 Coordinates used by the functions of this interface are specified in
2085 different coordinate systems. Their scale is the same and is equal to
2086 that of the screen coordinate system. In other words all coordinates
2087 are measured in pixels. They differ in their respective origin:
2088 <ul>
2089 <li>The screen coordinate system has its origin in the upper left
2090 corner of the current screen.</li>
2091 <li>The origin of the parent coordinate system is the upper left corner
2092 of the parent's bounding box. With no parent the screen coordinate
2093 system is used instead.</li>
2094 </ul>
2096 [object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
2097 interface IAccessibleComponent : IUnknown
2100 /** @brief Returns the location of the upper left corner of the object's
2101 bounding box relative to the immediate parent object.
2103 The coordinates of the bounding box are given relative to the parent's
2104 coordinate system. The coordinates of the returned position are relative
2105 to this object's parent or relative to the screen on which this object
2106 is rendered if it has no parent. If the object is not on any screen
2107 the returned position is (0,0).
2109 @param [out] x
2110 @param [out] y
2111 @retval S_OK
2113 [propget] HRESULT locationInParent
2115 [out] long *x,
2116 [out, retval] long *y
2119 /** @brief Returns the foreground color of this object.
2120 @param [out] foreground
2121 The returned color is the foreground color of this object or, if
2122 that is not supported, the default foreground color.
2123 @retval S_OK
2125 [propget] HRESULT foreground
2127 [out, retval] IA2Color *foreground
2130 /** @brief Returns the background color of this object.
2131 @param [out] background
2132 The returned color is the background color of this object or, if
2133 that is not supported, the default background color.
2134 @retval S_OK
2136 [propget] HRESULT background
2138 [out, retval] IA2Color *background
2141 /*************************************************************************
2143 * File Name (AccessibleValue.idl)
2145 * IAccessible2 IDL Specification
2147 * Copyright (c) 2007, 2010 Linux Foundation
2148 * Copyright (c) 2006 IBM Corporation
2149 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2150 * All rights reserved.
2153 * Redistribution and use in source and binary forms, with or without
2154 * modification, are permitted provided that the following conditions
2155 * are met:
2157 * 1. Redistributions of source code must retain the above copyright
2158 * notice, this list of conditions and the following disclaimer.
2160 * 2. Redistributions in binary form must reproduce the above
2161 * copyright notice, this list of conditions and the following
2162 * disclaimer in the documentation and/or other materials
2163 * provided with the distribution.
2165 * 3. Neither the name of the Linux Foundation nor the names of its
2166 * contributors may be used to endorse or promote products
2167 * derived from this software without specific prior written
2168 * permission.
2170 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2171 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2172 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2173 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2174 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2175 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2176 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2177 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2178 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2179 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2180 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2181 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2182 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2184 * This BSD License conforms to the Open Source Initiative "Simplified
2185 * BSD License" as published at:
2186 * http://www.opensource.org/licenses/bsd-license.php
2188 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2189 * mark may be used in accordance with the Linux Foundation Trademark
2190 * Policy to indicate compliance with the IAccessible2 specification.
2192 ************************************************************************/
2198 /** @brief This interface gives access to a single numerical value.
2200 The %IAccessibleValue interface represents a single numerical value and should
2201 be implemented by any class that supports numerical value like progress bars
2202 and spin boxes. This interface lets you access the value and its upper and
2203 lower bounds.
2205 [object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
2206 interface IAccessibleValue : IUnknown
2209 /** @brief Returns the value of this object as a number.
2211 The exact return type is implementation dependent. Typical types are long and
2212 double.
2213 @param [out] currentValue
2214 Returns the current value represented by this object. See the section about
2215 @ref _variants "VARIANTs" for additional information.
2216 @retval S_OK
2217 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2219 [propget] HRESULT currentValue
2221 [out, retval] VARIANT *currentValue
2224 /** @brief Sets the value of this object to the given number.
2226 The argument is clipped to the valid interval whose upper and lower
2227 bounds are returned by the methods IAccessibleValue::maximumValue and
2228 IAccessibleValue::minimumValue, i.e. if it is lower than the minimum
2229 value the new value will be the minimum and if it is greater than the
2230 maximum then the new value will be the maximum.
2232 @param [in] value
2233 The new value represented by this object. The set of admissible types for
2234 this argument is implementation dependent.
2235 @retval S_OK
2237 HRESULT setCurrentValue
2239 [in] VARIANT value
2242 /** @brief Returns the maximal value that can be represented by this object.
2244 The type of the returned value is implementation dependent. It does not have
2245 to be the same type as that returned by method IAccessibleValue::currentValue.
2247 @param [out] maximumValue
2248 Returns the maximal value in an implementation dependent type. If this object
2249 has no upper bound then an empty object is returned. See the section about
2250 @ref _variants "VARIANTs" for additional information.
2251 @retval S_OK
2252 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2254 [propget] HRESULT maximumValue
2256 [out, retval] VARIANT *maximumValue
2259 /** @brief Returns the minimal value that can be represented by this object.
2261 The type of the returned value is implementation dependent. It does not have
2262 to be the same type as that returned by method IAccessibleValue::currentValue.
2264 @param [out] minimumValue
2265 Returns the minimal value in an implementation dependent type. If this object
2266 has no lower bound then an empty object is returned. See the section about
2267 @ref _variants "VARIANTs" for additional information.
2268 @retval S_OK
2269 @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
2271 [propget] HRESULT minimumValue
2273 [out, retval] VARIANT *minimumValue
2277 /*************************************************************************
2279 * File Name (AccessibleText.idl)
2281 * IAccessible2 IDL Specification
2283 * Copyright (c) 2007, 2013 Linux Foundation
2284 * Copyright (c) 2006 IBM Corporation
2285 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2286 * All rights reserved.
2289 * Redistribution and use in source and binary forms, with or without
2290 * modification, are permitted provided that the following conditions
2291 * are met:
2293 * 1. Redistributions of source code must retain the above copyright
2294 * notice, this list of conditions and the following disclaimer.
2296 * 2. Redistributions in binary form must reproduce the above
2297 * copyright notice, this list of conditions and the following
2298 * disclaimer in the documentation and/or other materials
2299 * provided with the distribution.
2301 * 3. Neither the name of the Linux Foundation nor the names of its
2302 * contributors may be used to endorse or promote products
2303 * derived from this software without specific prior written
2304 * permission.
2306 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2307 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2308 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2309 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2310 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2311 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2312 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2313 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2314 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2315 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2316 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2317 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
2318 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2320 * This BSD License conforms to the Open Source Initiative "Simplified
2321 * BSD License" as published at:
2322 * http://www.opensource.org/licenses/bsd-license.php
2324 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
2325 * mark may be used in accordance with the Linux Foundation Trademark
2326 * Policy to indicate compliance with the IAccessible2 specification.
2328 ************************************************************************/
2335 /** A structure containing a substring and the start and end offsets in the enclosing string.
2337 IAccessibleText::newText and IAccessibleText::oldText return this struct.
2339 typedef struct IA2TextSegment {
2340 BSTR text; ///< A copy of a segment of text taken from an enclosing paragraph.
2341 long start; ///< Index of the first character of the segment in the enclosing text.
2342 long end; ///< Index of the character following the last character of the segment in the enclosing text.
2343 } IA2TextSegment;
2345 /** This enum defines values which specify a text boundary type.
2347 IA2_TEXT_BOUNDARY_SENTENCE is optional. When a method doesn't implement this
2348 method it must return S_FALSE. Typically this feature would not be implemented
2349 by an application. However, if the application developer was not satisfied with
2350 how screen readers have handled the reading of sentences this boundary type
2351 could be implemented and screen readers could use the application's version of a
2352 sentence rather than the screen reader's.
2354 The rest of the boundary types must be supported.
2356 This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
2357 and IAccessibleText::textAfterOffset.
2360 enum IA2TextBoundaryType {
2361 IA2_TEXT_BOUNDARY_CHAR, /**< Typically, a single character is returned. In some cases more than
2362 one character is returned, for example, when a document contains field
2363 data such as a field containing a date, time, or footnote reference.
2364 In this case the caret can move over several characters in one movement
2365 of the caret. Note that after the caret moves, the caret offset changes
2366 by the number of characters in the field, e.g. by 8 characters in the
2367 following date: 03/26/07. */
2368 IA2_TEXT_BOUNDARY_WORD, /**< The range provided matches the range observed when the application
2369 processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
2370 Typically this is from the start of one word to the start of the next, but
2371 various applications are inconsistent in the handling of the end of a line. */
2372 IA2_TEXT_BOUNDARY_SENTENCE, ///< Range is from start of one sentence to the start of another sentence.
2373 IA2_TEXT_BOUNDARY_PARAGRAPH, ///< Range is from start of one paragraph to the start of another paragraph.
2374 IA2_TEXT_BOUNDARY_LINE, /**< Range is from start of one line to the start of another line. This
2375 often means that an end-of-line character will appear at the end of the
2376 range. However in the case of some applications an end-of-line character
2377 indicates the end of a paragraph and the lines composing the paragraph,
2378 other than the last line, do not contain an end of line character. */
2379 IA2_TEXT_BOUNDARY_ALL ///< Using this value will cause all text to be returned.
2382 /** @brief This interface gives read-only access to text.
2384 The %IAccessibleText interface should be implemented by all components
2385 that present textual information on the display like buttons,
2386 text entry fields, or text portions of the document window. The interface
2387 provides access to the text's content, attributes, and spatial location.
2388 However, text cannot be modified with this interface. That is the task
2389 of the IAccessibleEditableText interface.
2391 The text length, i.e. the number of characters in the text, is
2392 returned by IAccessibleText::nCharacters. All methods that operate
2393 on particular characters (e.g. IAccessibleText::textAtOffset) use character
2394 indices from 0 to length-1. All methods that operate on character positions
2395 (e.g. IAccessibleText::text) use indices from 0 to length.
2397 Please note that accessible text does not necessarily support selection.
2398 In this case it should behave as if there where no selection. An empty
2399 selection is used for example to express the current cursor position.
2401 Refer to @ref _specialOffsets
2402 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2403 for information about special offsets that can be used in %IAccessibleText methods.
2405 E_FAIL is returned in the following cases
2406 @li endOffset < startOffset
2407 @li endoffset > length
2409 [object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
2410 interface IAccessibleText : IUnknown
2413 /** @brief Adds a text selection
2414 @param [in] startOffset
2415 Starting offset ( 0 based).
2416 @param [in] endOffset
2417 Offset of first character after new selection (0 based).
2418 @retval S_OK
2419 @retval E_INVALIDARG if bad [in] passed
2420 @note Refer to @ref _specialOffsets
2421 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2422 for information about special offsets that can be used in %IAccessibleText methods.
2424 HRESULT addSelection
2426 [in] long startOffset,
2427 [in] long endOffset
2430 /** @brief Returns text attributes.
2431 @param [in] offset
2432 Text offset (0 based). Refer to @ref _specialOffsets
2433 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2434 for information about special offsets that can be used in %IAccessibleText methods.
2435 @param [out] startOffset
2436 The starting offset of the character range over which all text attributes match
2437 those of offset. (0 based)
2438 @param [out] endOffset
2439 The offset of the first character past the character range over which all text
2440 attributes match those of offset. (0 based)
2441 @param [out] textAttributes
2442 A string of attributes describing the text. The attributes are described in the
2443 <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
2444 text attributes specification</a> on the %IAccessible2 web site.
2445 @retval S_OK
2446 @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
2447 @retval E_INVALIDARG if bad [in] passed
2449 [propget] HRESULT attributes
2451 [in] long offset,
2452 [out] long *startOffset,
2453 [out] long *endOffset,
2454 [out, retval] BSTR *textAttributes
2457 /** @brief Returns the position of the caret.
2459 Returns the 0-based offset of the caret within the text. If the text is
2460 implemented as a tree of text objects with embed characters in higher levels
2461 representing substrings of child text objects and the caret is in one of the
2462 child text objects, then the offset in the higher level text object would be
2463 at the embed character representing child text object that contains the caret.
2465 For example, if the string "one two three" is implemented as a two text objects,
2466 with a top level text object containing an embed character "one ? three" and a
2467 child text object containing "two" and if the caret is in the descendant object
2468 just before the 'o' in "two", then:
2469 <ul>
2470 <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
2471 <li>the caretOffset for "two" would be 2, matching the "o"</li>
2472 </ul>
2473 The caret position/offset is that of the character logically following it, e.g.
2474 to the right of it in a left to right language, or to the left of it in a right
2475 to left language.
2476 @param [out] offset
2477 The returned offset is relative to the text represented by this object.
2478 @retval S_OK
2479 @retval S_FALSE if the caret is not currently active on this object, i.e. the
2480 caret is located on some other object. The returned offset value will be -1.
2481 @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
2482 in the text object or one of its descendants.
2484 [propget] HRESULT caretOffset
2486 [out, retval] long *offset
2490 /** @brief Returns the bounding box of the specified position.
2492 The virtual character after the last character of the represented
2493 text, i.e. the one at position length is a special case. It represents the
2494 current input position and will therefore typically be queried by AT more
2495 often than other positions. Because it does not represent an existing character
2496 its bounding box is defined in relation to preceding characters. It should be
2497 roughly equivalent to the bounding box of some character when inserted at the
2498 end of the text. Its height typically being the maximal height of all the
2499 characters in the text or the height of the preceding character, its width being
2500 at least one pixel so that the bounding box is not degenerate.
2502 Note that the index 'length' is not always valid. Whether it is or not is
2503 implementation dependent. It typically is when text is editable or otherwise
2504 when on the screen the caret can be placed behind the text. You can be sure
2505 that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
2506 event for this index.
2507 @param [in] offset
2508 Index of the character for which to return its bounding box. The valid range
2509 is 0..length. Refer to @ref _specialOffsets
2510 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2511 for information about special offsets that can be used in %IAccessibleText methods.
2512 @param [in] coordType
2513 Specifies if the coordinates are relative to the screen or to the parent window.
2514 @param [out] x
2515 X coordinate of the top left corner of the bounding box of the referenced character.
2516 @param [out] y
2517 Y coordinate of the top left corner of the bounding box of the referenced character.
2518 @param [out] width
2519 Width of the bounding box of the referenced character.
2520 @param [out] height
2521 Height of the bounding box of the referenced character.
2522 @retval S_OK
2523 @retval E_INVALIDARG if bad [in] passed
2525 [propget] HRESULT characterExtents
2527 [in] long offset,
2528 [in] enum IA2CoordinateType coordType,
2529 [out] long *x,
2530 [out] long *y,
2531 [out] long *width,
2532 [out, retval] long *height
2536 /** @brief Returns the number of active non-contiguous selections
2537 @param [out] nSelections
2538 @retval S_OK
2540 [propget] HRESULT nSelections
2542 [out, retval] long *nSelections
2545 /** @brief Returns the text position for the specified screen position.
2547 Given a point return the zero-based index of the character under that
2548 point. The same functionality could be achieved by using the bounding
2549 boxes for each character as returned by IAccessibleText::characterExtents.
2550 The method IAccessibleText::offsetAtPoint, however, can be implemented
2551 more efficiently.
2553 @param [in] x
2554 The position's x value for which to look up the index of the character that
2555 is rendered on to the display at that point.
2556 @param [in] y
2557 The position's y value for which to look up the index of the character that
2558 is rendered on to the display at that point.
2559 @param [in] coordType
2560 Screen coordinates or window coordinates.
2561 @param [out] offset
2562 Index of the character under the given point or -1 if the point
2563 is invalid or there is no character under the point.
2564 @retval S_OK
2565 @retval S_FALSE if nothing to return, [out] value is -1
2567 @retval E_INVALIDARG if bad [in] passed
2569 [propget] HRESULT offsetAtPoint
2571 [in] long x,
2572 [in] long y,
2573 [in] enum IA2CoordinateType coordType,
2574 [out, retval] long *offset
2577 /** @brief Returns the character offsets of Nth active text selection
2579 Returns the 0-based starting and ending offsets of the Nth selection. If the
2580 text is implemented as a tree of text objects with embed characters in higher
2581 levels representing substrings of child text objects, consider the following.
2582 If the starting selection offset is in one of the child text objects, then the
2583 starting offset in the higher level text object would be at the embed character
2584 representing the child text object that contains the starting selection offset.
2585 If the ending selection offset is in one of the child text objects, then the
2586 ending offset in the higher level text object would be just after the embed
2587 character representing the child text object that contains the ending selection
2588 offset.
2590 For example, if the string "one two three" is implemented as a two text objects,
2591 with a top level text object containing an embed character "one ? three" and a
2592 child text object containing "two" and if the selection is the string "two" then:
2593 <ul>
2594 <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
2595 <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
2596 </ul>
2597 Selection offsets are that of the character logically following it, e.g.
2598 to the right of it in a left to right language or to the left of it in a right to left language.
2599 @param [in] selectionIndex
2600 Index of selection (0 based).
2601 @param [out] startOffset
2602 0 based offset of first selected character
2603 @param [out] endOffset
2604 0 based offset of one past the last selected character.
2605 @retval S_OK
2606 @retval E_INVALIDARG if bad [in] passed
2608 [propget] HRESULT selection
2610 [in] long selectionIndex,
2611 [out] long *startOffset,
2612 [out, retval] long *endOffset
2615 /** @brief Returns the substring between the two given indices.
2617 The substring starts with the character at startOffset (inclusive) and up to
2618 the character at endOffset (exclusive), if startOffset is less or equal
2619 endOffset. If endOffset is lower than startOffset, the result is the same
2620 as a call with the two arguments being exchanged.
2622 The whole text can be requested by passing the indices zero and
2623 IAccessibleText::nCharacters. If both indices have the same value, an empty
2624 string is returned.
2625 @param [in] startOffset
2626 Index of the first character to include in the returned string. The valid range
2627 is 0..length.
2628 @param [in] endOffset
2629 Index of the last character to exclude in the returned string. The valid range
2630 is 0..length.
2631 @param [out] text
2632 Returns the substring starting with the character at startOffset (inclusive)
2633 and up to the character at endOffset (exclusive), if startOffset is less than
2634 or equal to endOffset.
2635 @retval S_OK
2636 @retval E_INVALIDARG if bad [in] passed
2637 @note
2638 @li The returned string may be longer than endOffset-startOffset bytes if text
2639 contains multi-byte characters.
2640 @li Refer to @ref _specialOffsets
2641 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2642 for information about special offsets that can be used in %IAccessibleText methods.
2644 [propget] HRESULT text
2646 [in] long startOffset,
2647 [in] long endOffset,
2648 [out, retval] BSTR *text
2651 /** @brief Returns a text portion before the given position.
2653 Returns the substring of the specified text type that is located before the
2654 given character and does not include it. The result of this method should be
2655 same as a result for IAccessibleText::textAtOffset with a suitably decreased
2656 index value.
2658 For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2659 word that is closest to and located before offset is returned.
2661 If the index is valid, but no text is found, S_FALSE is returned along with out
2662 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2663 than character when the text consists entirely of whitespace.
2665 @param [in] offset
2666 Index of the character for which to return the text part before it. The index
2667 character will not be part of the returned string. The valid range is 0..length.
2668 Refer to @ref _specialOffsets
2669 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2670 for information about special offsets that can be used in %IAccessibleText methods.
2671 @param [in] boundaryType
2672 The type of the text portion to return. See ::IA2TextBoundaryType for the
2673 complete list.
2674 @param [out] startOffset
2675 0 based offset of first character.
2676 @param [out] endOffset
2677 0 based offset of one past the last character.
2678 @param [out] text
2679 Returns the requested text portion. This portion may be empty or invalid when
2680 no appropriate text portion is found or text type is invalid.
2681 @retval S_OK
2682 @retval S_FALSE if the requested boundary type is not implemented, such as
2683 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2684 [out] values are 0s and NULL respectively
2685 @retval E_INVALIDARG if bad [in] passed
2687 [propget] HRESULT textBeforeOffset
2689 [in] long offset,
2690 [in] enum IA2TextBoundaryType boundaryType,
2691 [out] long *startOffset,
2692 [out] long *endOffset,
2693 [out, retval] BSTR *text
2696 /** @brief Returns a text portion after the given position.
2698 Returns the substring of the specified text type that is located after the
2699 given character and does not include it. The result of this method should be
2700 same as a result for IAccessibleText::textAtOffset with a suitably increased
2701 index value.
2703 For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
2704 word that is closest to and located after offset is returned.
2706 If the index is valid, but no text is found, S_FALSE is returned along with out
2707 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2708 than character when the text consists entirely of whitespace.
2710 @param [in] offset
2711 Index of the character for which to return the text part after it. The index
2712 character will not be part of the returned string. The valid range is 0..length.
2713 Refer to @ref _specialOffsets
2714 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2715 for information about special offsets that can be used in %IAccessibleText methods.
2716 @param [in] boundaryType
2717 The type of the text portion to return. See ::IA2TextBoundaryType for the complete
2718 list.
2719 @param [out] startOffset
2720 0 based offset of first character.
2721 @param [out] endOffset
2722 0 based offset of one past the last character.
2723 @param [out] text
2724 Returns the requested text portion. This portion may be empty or invalid when
2725 no appropriate text portion is found or text type is invalid.
2726 @retval S_OK
2727 @retval S_FALSE if the requested boundary type is not implemented, such as
2728 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2729 [out] values are 0s and NULL respectively
2730 @retval E_INVALIDARG if bad [in] passed
2732 [propget] HRESULT textAfterOffset
2734 [in] long offset,
2735 [in] enum IA2TextBoundaryType boundaryType,
2736 [out] long *startOffset,
2737 [out] long *endOffset,
2738 [out, retval] BSTR *text
2741 /** @brief Returns a text portion that spans the given position.
2743 Returns the substring defined by the specified boundary type at the specified
2744 offset. Refer to IA2TextBoundaryType for more details.
2746 For the word boundary type the returned string will contain the word at the
2747 offset if the offset is inside a word and will contain the word before the
2748 offset if the offset is not inside a word. All offsets from the first to the
2749 last characters of a word are considered inside the word. Boundary types of
2750 sentence and paragraph should exhibit similar behavior.
2752 If the index is valid, but no text is found, S_FALSE is returned along with out
2753 values of 0, 0, and a NULL pointer. This would happen for boundary types other
2754 than character when the text consists entirely of whitespace.
2756 @param [in] offset
2757 Index of the character for which to return the text part it belongs to. The valid
2758 range is 0..length.
2759 Refer to @ref _specialOffsets
2760 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2761 for information about special offsets that can be used in %IAccessibleText methods.
2762 @param [in] boundaryType
2763 The type of the text portion to return. See ::IA2TextBoundaryType for the complete
2764 list.
2765 @param [out] startOffset
2766 0 based offset of first character.
2767 @param [out] endOffset
2768 0 based offset of one past the last character.
2769 @param [out] text
2770 Returns the requested text portion. This portion may be empty or invalid when
2771 no appropriate text portion is found or text type is invalid.
2772 @retval S_OK
2773 @retval S_FALSE if the requested boundary type is not implemented, such as
2774 ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
2775 [out] values are 0s and NULL respectively
2776 @retval E_INVALIDARG if bad [in] passed
2778 [propget] HRESULT textAtOffset
2780 [in] long offset,
2781 [in] enum IA2TextBoundaryType boundaryType,
2782 [out] long *startOffset,
2783 [out] long *endOffset,
2784 [out, retval] BSTR *text
2787 /** @brief Unselects a range of text.
2788 @param [in] selectionIndex
2789 Index of selection to remove (0 based).
2790 @retval S_OK
2791 @retval E_INVALIDARG if bad [in] passed
2793 HRESULT removeSelection
2795 [in] long selectionIndex
2798 /** @brief Sets the position of the caret.
2800 The caret position/offset is that of the character logically following it,
2801 e.g. to the right of it in a left to right language.
2803 Setting the caret position may or may not alter the current selection. A
2804 change of the selection is notified to the accessibility event listeners with
2805 an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
2807 When the new caret position differs from the old one (which, of course, is the
2808 standard case) this is notified to the accessibility event listeners with an
2809 ::IA2_EVENT_TEXT_CARET_MOVED event.
2810 @param [in] offset
2811 The new index of the caret. This caret is actually placed to the left side of
2812 the character with that index. An index of 0 places the caret so that the next
2813 insertion goes before the first character. An index of IAccessibleText::nCharacters
2814 leads to insertion after the last character. Refer to @ref _specialOffsets
2815 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2816 for information about special offsets that can be used in %IAccessibleText methods.
2817 @retval S_OK
2818 @retval E_FAIL if the caret cannot be set
2819 @retval E_INVALIDARG if bad [in] passed
2821 HRESULT setCaretOffset
2823 [in] long offset
2826 /** @brief Changes the bounds of an existing selection.
2827 @param [in] selectionIndex
2828 Index of selection to change (0 based)
2829 @param [in] startOffset
2830 New starting offset (0 based)
2831 @param [in] endOffset
2832 New ending offset (0 based) - the offset of the character just past the last character of the selection.
2833 @retval S_OK
2834 @retval E_INVALIDARG if bad [in] passed
2835 @note Refer to @ref _specialOffsets
2836 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2837 for information about special offsets that can be used in %IAccessibleText methods.
2839 HRESULT setSelection
2841 [in] long selectionIndex,
2842 [in] long startOffset,
2843 [in] long endOffset
2846 /** @brief Returns total number of characters.
2848 Note that this may be different than the total number of bytes required to store the
2849 text, if the text contains multi-byte characters.
2850 @param [out] nCharacters
2851 @retval S_OK
2853 [propget] HRESULT nCharacters
2855 [out, retval] long *nCharacters
2858 /** @brief Makes a specific part of string visible on screen.
2859 @param [in] startIndex
2860 0 based character offset.
2861 @param [in] endIndex
2862 0 based character offset - the offset of the character just past the last character of the string.
2863 @param [in] scrollType
2864 Defines where the object should be placed on the screen.
2865 @retval S_OK
2866 @retval E_INVALIDARG if bad [in] passed
2867 @note Refer to @ref _specialOffsets
2868 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2869 for information about special offsets that can be used in %IAccessibleText methods.
2871 HRESULT scrollSubstringTo
2873 [in] long startIndex,
2874 [in] long endIndex,
2875 [in] enum IA2ScrollType scrollType
2878 /** @brief Moves the top left of a substring to a specified location.
2880 @param [in] startIndex
2881 0 based character offset.
2882 @param [in] endIndex
2883 0 based character offset - the offset of the character just past the last character of the string.
2884 @param [in] coordinateType
2885 Specifies whether the coordinates are relative to the screen or the parent object.
2886 @param [in] x
2887 Defines the x coordinate.
2888 @param [in] y
2889 Defines the y coordinate.
2890 @retval S_OK
2891 @retval S_FALSE if the object is already at the specified location.
2892 @retval E_INVALIDARG if bad [in] passed
2893 @note Refer to @ref _specialOffsets
2894 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
2895 for information about special offsets that can be used in %IAccessibleText methods.
2897 HRESULT scrollSubstringToPoint
2899 [in] long startIndex,
2900 [in] long endIndex,
2901 [in] enum IA2CoordinateType coordinateType,
2902 [in] long x,
2903 [in] long y
2906 /** @brief Returns any inserted text.
2908 Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
2909 event handlers.
2911 This data is only guaranteed to be valid while the thread notifying the event
2912 continues. Once the handler has returned, the validity of the data depends on
2913 how the server manages the life cycle of its objects. Also, note that the server
2914 may have different life cycle management strategies for controls depending on
2915 whether or not a control manages its children. Lists, trees, and tables can have
2916 a large number of children and thus it's possible that the child objects for those
2917 controls would only be created as needed. Servers should document their life cycle
2918 strategy as this will be of interest to assistive technology or script engines
2919 accessing data out of process or from other threads. Servers only need to save the
2920 last inserted block of text and a scope of the entire application is adequate.
2922 @param [out] newText
2923 The text that was just inserted.
2924 @retval S_OK
2925 @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2926 struct are set as follows: text = NULL, start = 0, end = 0.
2929 [propget] HRESULT newText
2931 [out, retval] IA2TextSegment *newText
2934 /** @brief Returns any removed text.
2936 Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
2938 This data is only guaranteed to be valid while the thread notifying the event
2939 continues. Once the handler has returned, the validity of the data depends on
2940 how the server manages the life cycle of its objects. Also, note that the server
2941 may have different life cycle management strategies for controls depending on
2942 whether or not a control manages its children. Lists, trees, and tables can have
2943 a large number of children and thus it's possible that the child objects for those
2944 controls would only be created as needed. Servers should document their life cycle
2945 strategy as this will be of interest to assistive technology or script engines
2946 accessing data out of process or from other threads. Servers only need to save the
2947 last removed block of text and a scope of the entire application is adequate.
2949 @param [out] oldText
2950 The text that was just removed.
2951 @retval S_OK
2952 @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
2953 struct are set as follows: text = NULL, start = 0, end = 0.
2955 [propget] HRESULT oldText
2957 [out, retval] IA2TextSegment *oldText
2961 /*************************************************************************
2963 * File Name (AccessibleText2.idl)
2965 * IAccessible2 IDL Specification
2967 * Copyright (c) 2007, 2013 Linux Foundation
2968 * Copyright (c) 2006 IBM Corporation
2969 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
2970 * All rights reserved.
2973 * Redistribution and use in source and binary forms, with or without
2974 * modification, are permitted provided that the following conditions
2975 * are met:
2977 * 1. Redistributions of source code must retain the above copyright
2978 * notice, this list of conditions and the following disclaimer.
2980 * 2. Redistributions in binary form must reproduce the above
2981 * copyright notice, this list of conditions and the following
2982 * disclaimer in the documentation and/or other materials
2983 * provided with the distribution.
2985 * 3. Neither the name of the Linux Foundation nor the names of its
2986 * contributors may be used to endorse or promote products
2987 * derived from this software without specific prior written
2988 * permission.
2990 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
2991 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
2992 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2993 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2994 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
2995 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2996 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2997 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2998 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2999 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3000 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3001 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3002 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3004 * This BSD License conforms to the Open Source Initiative "Simplified
3005 * BSD License" as published at:
3006 * http://www.opensource.org/licenses/bsd-license.php
3008 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3009 * mark may be used in accordance with the Linux Foundation Trademark
3010 * Policy to indicate compliance with the IAccessible2 specification.
3012 ************************************************************************/
3020 /** @brief This interface gives read-only access to text.
3022 The %IAccessibleText2 interface extends the functionality of the
3023 %IAccessibleText interface.
3025 [object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
3026 interface IAccessibleText2 : IAccessibleText
3029 /** @brief Returns the range and of the specified set of attributes.
3031 Return the range (start and end offsets) and text attributes that correspond
3032 to the given attributes filter at the given offset.
3034 @param [in] offset
3035 The offset at which to search for the attributes specified in the filter.
3036 @param [in] filter
3037 The requested attribute names. The filter format is "attribute1, attribute2".
3038 @param [out] startOffset
3039 The starting (0-based) offset of the text containing the specified attributes.
3040 @param [out] endOffset
3041 The (0-based) offset one past the last character of the text containing the
3042 specified attributes.
3043 @param [out] attributeValues
3044 The values of the requested attributes.
3045 @retval S_OK
3046 @retval S_FALSE if nothing to return, [out] values are -1, -1, NULL respectively.
3047 @retval E_INVALIDARG if bad [in] passed.
3049 [propget] HRESULT attributeRange
3051 [in] long offset,
3052 [in] BSTR filter_tmp,
3053 [out] long *startOffset,
3054 [out] long *endOffset,
3055 [out, retval] BSTR *attributeValues
3059 /*************************************************************************
3061 * File Name (AccessibleEditableText.idl)
3063 * IAccessible2 IDL Specification
3065 * Copyright (c) 2007, 2012 Linux Foundation
3066 * Copyright (c) 2006 IBM Corporation
3067 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3068 * All rights reserved.
3071 * Redistribution and use in source and binary forms, with or without
3072 * modification, are permitted provided that the following conditions
3073 * are met:
3075 * 1. Redistributions of source code must retain the above copyright
3076 * notice, this list of conditions and the following disclaimer.
3078 * 2. Redistributions in binary form must reproduce the above
3079 * copyright notice, this list of conditions and the following
3080 * disclaimer in the documentation and/or other materials
3081 * provided with the distribution.
3083 * 3. Neither the name of the Linux Foundation nor the names of its
3084 * contributors may be used to endorse or promote products
3085 * derived from this software without specific prior written
3086 * permission.
3088 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3089 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3090 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3091 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3092 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3093 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3094 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3095 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3096 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3097 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3098 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3099 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3100 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3102 * This BSD License conforms to the Open Source Initiative "Simplified
3103 * BSD License" as published at:
3104 * http://www.opensource.org/licenses/bsd-license.php
3106 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3107 * mark may be used in accordance with the Linux Foundation Trademark
3108 * Policy to indicate compliance with the IAccessible2 specification.
3110 ************************************************************************/
3117 /** @brief This interface provides clipboard capability to text objects.
3119 This interface is typically used in conjunction with the IAccessibleText
3120 interface and complements that interface with the additional capability of
3121 clipboard operations. Note that even a read only text object can support
3122 the copy capability so this interface is not limited to editable objects.
3124 The substrings used with this interface are specified as follows:
3125 If startOffset is less than endOffset, the substring starts with the
3126 character at startOffset and ends with the character just before endOffset.
3127 If endOffset is lower than startOffset, the result is the same as a call
3128 with the two arguments exchanged. The whole text can be defined by passing
3129 the indices zero and IAccessibleText::nCharacters. If both indices have the
3130 same value, an empty string is defined.
3132 Refer to the @ref _specialOffsets
3133 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3134 for information about a special offset constant that can be used in %IAccessibleEditableText methods.
3136 [object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
3137 interface IAccessibleEditableText : IUnknown
3140 /** @brief Copies the text range into the clipboard.
3142 The selection is set to the specified offsets and then selection is copied into
3143 the system clipboard.
3145 @param [in] startOffset
3146 Start index of the text to moved into the clipboard.
3147 The valid range is 0..length.
3148 @param [in] endOffset
3149 End index of the text to moved into the clipboard.
3150 The valid range is 0..length.
3151 @retval S_OK
3152 @retval E_INVALIDARG if bad [in] passed
3153 @note Refer to @ref _specialOffsets
3154 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3155 for information about special offsets that can be used in %IAccessibleEditableText
3156 methods.
3157 @deprecated This function is available via the application's GUI.
3159 HRESULT copyText
3161 [in] long startOffset,
3162 [in] long endOffset
3165 /** @brief Deletes a range of text.
3167 The text between and including the two given indices is deleted
3168 from the text represented by this object.
3170 @param [in] startOffset
3171 Start index of the text to be deleted.
3172 The valid range is 0..length.
3173 @param [in] endOffset
3174 End index of the text to be deleted.
3175 The valid range is 0..length.
3176 @retval S_OK
3177 @retval E_INVALIDARG if bad [in] passed
3178 @note Refer to @ref _specialOffsets
3179 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3180 for information about special offsets that can be used in %IAccessibleEditableText
3181 methods.
3183 HRESULT deleteText
3185 [in] long startOffset,
3186 [in] long endOffset
3189 /** @brief Inserts text at the specified position.
3191 The specified string is inserted at the given index into the text
3192 represented by this object.
3194 @param [in] offset
3195 Index at which to insert the text.
3196 The valid range is 0..length.
3197 Refer to @ref _specialOffsets
3198 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3199 for information about special offsets that can be used in %IAccessibleEditableText
3200 methods.
3201 @param [in] text
3202 Text that is inserted.
3203 @retval S_OK
3204 @retval E_INVALIDARG if bad [in] passed
3206 HRESULT insertText
3208 [in] long offset,
3209 [in] BSTR *text
3212 /** @brief Deletes a range of text and copies it to the clipboard.
3214 The selection is set to the specified offsets, the selection is then copied into
3215 the system clipboard, and then the selection is deleted.
3217 @param [in] startOffset
3218 Start index of the text to be deleted.
3219 The valid range is 0..length.
3220 @param [in] endOffset
3221 End index of the text to be deleted.
3222 The valid range is 0..length.
3223 @retval S_OK
3224 @retval E_INVALIDARG if bad [in] passed
3225 @note Refer to @ref _specialOffsets
3226 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3227 for information about special offsets that can be used in %IAccessibleEditableText
3228 methods.
3229 @deprecated This function is available via the application's GUI.
3231 HRESULT cutText
3233 [in] long startOffset,
3234 [in] long endOffset
3237 /** @brief Pastes content from the clipboard.
3239 Any existing selection is removed, the clipboard content is then pasted into
3240 this object's text at the given offset. This method is similar to the insertText
3241 method. If the index is not valid the system clipboard content is not inserted. The
3242 behavior is the same as when Ctrl+V is used, i.e. the pasted contents are not
3243 necessarily plain text.
3245 @param [in] offset
3246 Index at which to insert the content from the system clipboard into
3247 the text represented by this object.
3248 The valid range is 0..length.
3249 Refer to @ref _specialOffsets
3250 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3251 for information about special offsets that can be used in %IAccessibleEditableText
3252 methods.
3253 @retval S_OK
3254 @retval E_INVALIDARG if bad [in] passed
3255 @deprecated This function is available via the application's GUI.
3257 HRESULT pasteText
3259 [in] long offset
3262 /** @brief Replaces text.
3264 The text between the two given indices is replaced by the specified
3265 replacement string. This method is equivalent to calling first
3266 IAccessibleEditableText::deleteText with the two indices and then
3267 calling IAccessibleEditableText::insertText with the replacement text
3268 at the start index.
3270 @param [in] startOffset
3271 Start index of the text to be replaced.
3272 The valid range is 0..length.
3273 @param [in] endOffset
3274 End index of the text to be replaced.
3275 The valid range is 0..length.
3276 @param [in] text
3277 The Text that replaces the text between the given indices.
3278 @retval S_OK
3279 @retval E_INVALIDARG if bad [in] passed
3280 @note Refer to @ref _specialOffsets
3281 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3282 for information about special offsets that can be used in %IAccessibleEditableText
3283 methods.
3285 HRESULT replaceText
3287 [in] long startOffset,
3288 [in] long endOffset,
3289 [in] BSTR *text
3292 /** @brief Replaces the attributes of a text range by the given set of attributes.
3294 Sets the attributes for the text between the two given indices. The old
3295 attributes are replaced by the new list of attributes.
3297 @param [in] startOffset
3298 Start index of the text whose attributes are modified.
3299 The valid range is 0..length.
3300 @param [in] endOffset
3301 End index of the text whose attributes are modified.
3302 The valid range is 0..length.
3303 @param [in] attributes
3304 Set of attributes that replaces the old list of attributes of
3305 the specified text portion.
3306 @retval S_OK
3307 @retval E_INVALIDARG if bad [in] passed
3308 @note Refer to @ref _specialOffsets
3309 "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
3310 for information about special offsets that can be used in %IAccessibleEditableText
3311 methods.
3313 HRESULT setAttributes
3315 [in] long startOffset,
3316 [in] long endOffset,
3317 [in] BSTR *attributes
3321 /*************************************************************************
3323 * File Name (AccessibleHyperlink.idl)
3325 * IAccessible2 IDL Specification
3327 * Copyright (c) 2007, 2010 Linux Foundation
3328 * Copyright (c) 2006 IBM Corporation
3329 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3330 * All rights reserved.
3333 * Redistribution and use in source and binary forms, with or without
3334 * modification, are permitted provided that the following conditions
3335 * are met:
3337 * 1. Redistributions of source code must retain the above copyright
3338 * notice, this list of conditions and the following disclaimer.
3340 * 2. Redistributions in binary form must reproduce the above
3341 * copyright notice, this list of conditions and the following
3342 * disclaimer in the documentation and/or other materials
3343 * provided with the distribution.
3345 * 3. Neither the name of the Linux Foundation nor the names of its
3346 * contributors may be used to endorse or promote products
3347 * derived from this software without specific prior written
3348 * permission.
3350 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3351 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3352 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3353 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3354 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3355 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3356 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3357 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3358 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3359 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3360 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3361 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3362 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3364 * This BSD License conforms to the Open Source Initiative "Simplified
3365 * BSD License" as published at:
3366 * http://www.opensource.org/licenses/bsd-license.php
3368 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3369 * mark may be used in accordance with the Linux Foundation Trademark
3370 * Policy to indicate compliance with the IAccessible2 specification.
3372 ************************************************************************/
3379 /** @brief This interface represents hyperlinks.
3381 This interface represents a hyperlink associated with a single substring
3382 of text or single non-text object. Non-text objects can have either a
3383 single link or a collection of links such as when the non-text object is
3384 an image map.
3386 Linked objects and anchors are implementation dependent. This interface is derived
3387 from IAccessibleAction. IAccessibleAction::nActions is one greater than the
3388 maximum value for the indices used with the methods of this interface.
3390 Furthermore, the object that implements this interface has to be connected
3391 implicitly or explicitly with an object that implements IAccessibleText.
3392 IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
3393 indices with respect to the text exposed by IAccessibleText.
3395 This interface provides access to a single object which can have multiple actions.
3396 An example is an image map which is an image with multiple links each of which is
3397 associated with a separate non-overlapping area of the image. This interface could
3398 also be applied to other kinds of objects with multiple actions such as "smart tags"
3399 which are objects, typically strings, which have multiple actions such as
3400 "Activate URI", "Bookmark URI", etc.
3402 An interesting use case is an image map where each area is associated with multiple
3403 actions, e.g. an image map of smart tags. In this case you would have to implement
3404 two levels of accessible hyperlinks. The first level hyperlinks would only implement
3405 anchor and anchorTarget. The anchors would all reference the image object. The
3406 anchorTargets would reference the second level accessible hyperlink objects. None
3407 of the IAccessibleAction methods would be implemented on the first level hyperlink
3408 objects. The second level hyperlink objects would implement the IAccessibleAction
3409 methods. Their anchors would also reference the image object and their anchorTargets
3410 would reference URLs or the objects that would be activated.
3412 This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
3413 to derive from IAccessibleAction. As a result it may be removed in a later version of
3414 the IDL and it is suggested that implementations should not rely on the inheritance.
3417 [object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
3418 interface IAccessibleHyperlink : IAccessibleAction
3421 /** @brief Returns an object that represents the link anchor, as appropriate
3422 for the link at the specified index.
3423 @param [in] index
3424 A 0 based index identifies the anchor when, as in the case of an image map,
3425 there is more than one link represented by this object. The valid maximal
3426 index is indicated by IAccessibleAction::nActions.
3427 @param [out] anchor
3428 This is an implementation dependent value. For example, for a text link this
3429 method could return the substring of the containing string where the substring
3430 is overridden with link behavior, and for an image link this method could return
3431 an IUnknown VARIANT for IAccessibleImage. See the section about
3432 @ref _variants "VARIANTs" for additional information.
3433 @retval S_OK
3434 @retval E_INVALIDARG if bad [in] passed
3436 [propget] HRESULT anchor
3438 [in] long index,
3439 [out, retval] VARIANT *anchor
3442 /** @brief Returns an object representing the target of the link, as appropriate
3443 for the link at the specified index.
3444 @param [in] index
3445 A 0 based index identifies the anchor when, as in the case of an image map,
3446 there is more than one link represented by this object. The valid maximal
3447 index is indicated by IAccessibleAction::nActions.
3448 @param [out] anchorTarget
3449 This is an implementation dependent value. For example this method could
3450 return a BSTR VARIANT of the URI. Alternatively this method could return an
3451 IUnknown VARIANT of a COM interface representing a target object to be
3452 activated when the link is activated. See the section about
3453 @ref _variants "VARIANTs" for additional information.
3454 @retval S_OK
3455 @retval E_INVALIDARG if bad [in] passed
3457 [propget] HRESULT anchorTarget
3459 [in] long index,
3460 [out, retval] VARIANT *anchorTarget
3463 /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
3465 The returned value is related to the IAccessibleText interface of the object that
3466 owns this hyperlink.
3467 @param [out] index
3468 @retval S_OK
3470 [propget] HRESULT startIndex
3472 [out, retval] long *index
3475 /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
3477 The returned value is related to the IAccessibleText interface of the object that
3478 owns this hyperlink. The character at the index is not part of the hypertext.
3479 @param [out] index
3480 @retval S_OK
3482 [propget] HRESULT endIndex
3484 [out, retval] long *index
3487 /** @brief Returns whether the target object referenced by this link is still valid.
3489 This is a volatile state that may change without sending an appropriate event.
3490 Returns TRUE if the referenced target is still valid and FALSE otherwise.
3492 This has also been used to indicate whether or not the URI of the anchorTarget
3493 is malformed.
3495 @param [out] valid
3496 If false, one or more of the object's links are invalid.
3497 If true, all of the object's links are valid.
3498 @retval S_OK
3499 @retval S_FALSE if there is nothing to return, [out] value is FALSE
3500 @note This method is not being used, is deprecated, and should not be implemented or
3501 used. It is likely that this method will be removed in a later version of the IDL.
3503 [propget] HRESULT valid
3505 [out, retval] boolean *valid
3508 /*************************************************************************
3510 * File Name (AccessibleHypertext.idl)
3512 * IAccessible2 IDL Specification
3514 * Copyright (c) 2007, 2010 Linux Foundation
3515 * Copyright (c) 2006 IBM Corporation
3516 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3517 * All rights reserved.
3520 * Redistribution and use in source and binary forms, with or without
3521 * modification, are permitted provided that the following conditions
3522 * are met:
3524 * 1. Redistributions of source code must retain the above copyright
3525 * notice, this list of conditions and the following disclaimer.
3527 * 2. Redistributions in binary form must reproduce the above
3528 * copyright notice, this list of conditions and the following
3529 * disclaimer in the documentation and/or other materials
3530 * provided with the distribution.
3532 * 3. Neither the name of the Linux Foundation nor the names of its
3533 * contributors may be used to endorse or promote products
3534 * derived from this software without specific prior written
3535 * permission.
3537 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3538 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3539 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3540 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3541 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3542 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3543 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3544 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3545 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3546 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3547 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3548 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3549 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3551 * This BSD License conforms to the Open Source Initiative "Simplified
3552 * BSD License" as published at:
3553 * http://www.opensource.org/licenses/bsd-license.php
3555 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3556 * mark may be used in accordance with the Linux Foundation Trademark
3557 * Policy to indicate compliance with the IAccessible2 specification.
3559 ************************************************************************/
3567 /** @brief This interface exposes information about hypertext in a document.
3569 The %IAccessibleHypertext interface is the main interface to expose
3570 hyperlinks in a document, typically a text document, that are used
3571 to reference other documents. A typical implementation is to implement
3572 this interface on the smallest text object such as a paragraph of text.
3574 [object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
3575 interface IAccessibleHypertext : IAccessibleText
3578 /** @brief Returns the number of links and link groups contained within this hypertext
3579 paragraph.
3580 @param [out] hyperlinkCount
3581 The number of links and link groups within this hypertext paragraph.
3582 Returns 0 if there is no link.
3583 @retval S_OK
3585 [propget] HRESULT nHyperlinks
3587 [out, retval] long *hyperlinkCount
3590 /** @brief Returns the specified link.
3592 The returned IAccessibleHyperlink object encapsulates the hyperlink and
3593 provides several kinds of information describing it.
3594 @param [in] index
3595 This 0 based index specifies the hyperlink to return.
3596 @param [out] hyperlink
3597 If the given index is valid, i.e. lies in the interval from 0 to the number
3598 of links minus one, a reference to the specified hyperlink object is returned.
3599 If the index is invalid then a NULL pointer is returned.
3600 @retval S_OK
3601 @retval E_INVALIDARG if bad [in] passed
3603 [propget] HRESULT hyperlink
3605 [in] long index,
3606 [out, retval] IAccessibleHyperlink **hyperlink
3609 /** @brief Returns the index of the hyperlink that is associated with this character index.
3611 This is the case when a link spans the given character index.
3612 @param [in] charIndex
3613 A 0 based index of the character for which to return the link index. If
3614 IAccessibleText is used to represent the text containing the link, then the
3615 character index is only valid if it is greater than or equal to zero and
3616 lower than the number of characters in the text.
3617 @param [out] hyperlinkIndex
3618 Returns the 0 based index of the hyperlink that is associated with this
3619 character index, or -1 if charIndex is not on a link.
3620 @retval S_OK
3621 @retval S_FALSE if there is nothing to return, [out] value is -1
3622 @retval E_INVALIDARG if bad [in] passed
3624 [propget] HRESULT hyperlinkIndex
3626 [in] long charIndex,
3627 [out, retval] long *hyperlinkIndex
3631 /*************************************************************************
3633 * File Name (AccessibleHypertext2.idl)
3635 * IAccessible2 IDL Specification
3637 * Copyright (c) 2007, 2013 Linux Foundation
3638 * Copyright (c) 2006 IBM Corporation
3639 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3640 * All rights reserved.
3643 * Redistribution and use in source and binary forms, with or without
3644 * modification, are permitted provided that the following conditions
3645 * are met:
3647 * 1. Redistributions of source code must retain the above copyright
3648 * notice, this list of conditions and the following disclaimer.
3650 * 2. Redistributions in binary form must reproduce the above
3651 * copyright notice, this list of conditions and the following
3652 * disclaimer in the documentation and/or other materials
3653 * provided with the distribution.
3655 * 3. Neither the name of the Linux Foundation nor the names of its
3656 * contributors may be used to endorse or promote products
3657 * derived from this software without specific prior written
3658 * permission.
3660 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3661 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3662 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3663 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3664 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3665 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3666 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3667 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3668 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3669 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3670 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3671 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3672 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3674 * This BSD License conforms to the Open Source Initiative "Simplified
3675 * BSD License" as published at:
3676 * http://www.opensource.org/licenses/bsd-license.php
3678 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3679 * mark may be used in accordance with the Linux Foundation Trademark
3680 * Policy to indicate compliance with the IAccessible2 specification.
3682 ************************************************************************/
3690 /** @brief This interface exposes information about hypertext in a document.
3692 The %IAccessibleHypertext2 interface extends the functinality of the
3693 %IAccessibleHypertext interface.
3695 [object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
3696 interface IAccessibleHypertext2 : IAccessibleHypertext
3699 /** @brief Returns the links for this object.
3701 The returned IAccessibleHyperlink objects encapsulate the hyperlink and
3702 provides several kinds of information describing it.
3704 @param [out] hyperlinks
3705 This array is allocated by the server. The client must free it with CoTaskMemFree.
3706 @param [out] nHyperlinks
3707 The number of links returned; the size of the returned array.
3708 @retval S_OK
3709 @retval S_FALSE if there are no links, [out] values are NULL and 0 respectively
3711 [propget] HRESULT hyperlinks
3713 [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
3714 [out, retval] long *nHyperlinks
3718 /*************************************************************************
3720 * File Name (AccessibleTable.idl)
3722 * IAccessible2 IDL Specification
3724 * Copyright (c) 2007, 2013 Linux Foundation
3725 * Copyright (c) 2006 IBM Corporation
3726 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
3727 * All rights reserved.
3730 * Redistribution and use in source and binary forms, with or without
3731 * modification, are permitted provided that the following conditions
3732 * are met:
3734 * 1. Redistributions of source code must retain the above copyright
3735 * notice, this list of conditions and the following disclaimer.
3737 * 2. Redistributions in binary form must reproduce the above
3738 * copyright notice, this list of conditions and the following
3739 * disclaimer in the documentation and/or other materials
3740 * provided with the distribution.
3742 * 3. Neither the name of the Linux Foundation nor the names of its
3743 * contributors may be used to endorse or promote products
3744 * derived from this software without specific prior written
3745 * permission.
3747 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
3748 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
3749 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3750 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
3751 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
3752 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3753 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3754 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3755 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3756 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
3757 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
3758 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
3759 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3761 * This BSD License conforms to the Open Source Initiative "Simplified
3762 * BSD License" as published at:
3763 * http://www.opensource.org/licenses/bsd-license.php
3765 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
3766 * mark may be used in accordance with the Linux Foundation Trademark
3767 * Policy to indicate compliance with the IAccessible2 specification.
3769 ************************************************************************/
3777 /** @brief This interface gives access to a two-dimensional table.
3779 Typically all accessible objects that represent cells or cell-clusters of a table
3780 will be at the same time children of the table. In this case IAccessible2::indexInParent
3781 will return the child index which then can be used when calling IAccessibleTable::rowIndex
3782 and IAccessibleTable::columnIndex.
3784 However, in some cases that kind of implementation will not be possible. When
3785 the table cells are not direct children of a table, the object representing
3786 the cell can define a "table-cell-index" object attribute identifying the 0
3787 based table cell index. This object attribute is obtained by parsing the
3788 attribute string returned by IAccessible2::attributes. The "table-cell-index"
3789 attribute can be used just like a child index of the typical case. ATs should
3790 first test for the presence of the "table-cell-index" attribute and if it is not
3791 present then IAccessible2::indexInParent can be used as in the typical case
3792 where cells are direct children of the table.
3794 The range of valid coordinates for this interface are implementation dependent.
3795 However, that range includes at least the intervals from the from the first row
3796 or column with the index 0 up to the last (but not including) used row or column
3797 as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
3799 Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
3800 rather than this interface.
3802 [object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
3803 interface IAccessibleTable : IUnknown
3806 /** @brief Returns the accessible object at the specified row and column in
3807 the table. This object could be an IAccessible or an IAccessible2.
3808 @param [in] row
3809 The 0 based row index for which to retrieve the cell.
3810 @param [in] column
3811 The 0 based column index for which to retrieve the cell.
3812 @param [out] accessible
3813 If both row and column index are valid then the corresponding accessible
3814 object is returned that represents the requested cell regardless of whether
3815 the cell is currently visible (on the screen).
3816 @retval S_OK
3817 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3819 [propget] HRESULT accessibleAt
3821 [in] long row,
3822 [in] long column,
3823 [out, retval] IUnknown **accessible
3826 /** @brief Returns the caption for the table. The returned object could be
3827 an IAccessible or an IAccessible2.
3828 @param [out] accessible
3829 If the table has a caption then a reference to it is returned, else a NULL
3830 pointer is returned.
3831 @retval S_OK
3832 @retval S_FALSE if there is nothing to return, [out] value is NULL
3834 [propget] HRESULT caption
3836 [out, retval] IUnknown **accessible
3839 /** @brief Translates the given row and column indexes into the corresponding cell index.
3840 @param [in] rowIndex
3841 0 based row index for the cell.
3842 @param [in] columnIndex
3843 0 based column index for the cell.
3844 @param [out] cellIndex
3845 Returns the 0 based index of the cell at the specified row and column indexes.
3846 @retval S_OK
3847 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3848 @note The returned value is not necessarily a child index of the immediate parent.
3849 In cases where the table cells are not direct children of the table the index
3850 is actually the cell index, i.e. conceptually it's an index into a one dimensional
3851 array of cells laid out in row order.
3853 [propget] HRESULT childIndex
3855 [in] long rowIndex,
3856 [in] long columnIndex,
3857 [out, retval] long *cellIndex
3860 /** @brief Returns the description text of the specified column in the table.
3861 @param [in] column
3862 The 0 based index of the column for which to retrieve the description.
3863 @param [out] description
3864 Returns the description text of the specified column in the table if such a
3865 description exists. Otherwise a NULL pointer is returned.
3866 @retval S_OK
3867 @retval S_FALSE if there is nothing to return, [out] value is NULL
3868 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3870 [propget] HRESULT columnDescription
3872 [in] long column,
3873 [out, retval] BSTR *description
3876 /** @brief Returns the number of columns occupied by the accessible object
3877 at the specified row and column in the table.
3879 The result is greater than 1 if the specified cell spans multiple columns.
3880 @param [in] row
3881 0 based row index of the accessible for which to return the column extent.
3882 @param [in] column
3883 0 based column index of the accessible for which to return the column extent.
3884 @param [out] nColumnsSpanned
3885 Returns the 1 based column extent of the specified cell.
3886 @retval S_OK
3887 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3889 [propget] HRESULT columnExtentAt
3891 [in] long row,
3892 [in] long column,
3893 [out, retval] long *nColumnsSpanned
3896 /** @brief Returns the column headers as an %IAccessibleTable object.
3898 Content and size of the returned table are implementation dependent.
3899 @param [out] accessibleTable
3900 The column header
3901 @param [out] startingRowIndex
3902 The 0 based row index where the header starts, usually 0.
3903 @retval S_OK
3904 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
3906 [propget] HRESULT columnHeader
3908 [out] IAccessibleTable **accessibleTable,
3909 [out, retval] long *startingRowIndex
3912 /** @brief Translates the given cell index into the corresponding column index.
3913 @param [in] cellIndex
3914 0 based index of the cell in the parent or closest ancestor table. Typically this
3915 is the value returned from IAccessible2::indexInParent, but in the case where the
3916 table cells are not direct children of the table this is the cell index specified
3917 by the "table-cell-index" object attribute obtained from parsing the attributes
3918 string returned by calling IAccessible2::attributes on the cell object.
3919 @param [out] columnIndex
3920 Returns the 0 based column index of the cell of the specified child or the index of
3921 the first column if the child spans multiple columns.
3922 @retval S_OK
3923 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
3925 [propget] HRESULT columnIndex
3927 [in] long cellIndex,
3928 [out, retval] long *columnIndex
3931 /** @brief Returns the total number of columns in table
3932 @param [out] columnCount
3933 Number of columns in table (including columns outside the current viewport)
3934 @retval S_OK
3936 [propget] HRESULT nColumns
3938 [out, retval] long *columnCount
3941 /** @brief Returns the total number of rows in table
3942 @param [out] rowCount
3943 Number of rows in table (including rows outside the current viewport)
3944 @retval S_OK
3946 [propget] HRESULT nRows
3948 [out, retval] long *rowCount
3951 /** @brief Returns the total number of selected cells
3952 @param [out] cellCount
3953 Number of cells currently selected
3954 @retval S_OK
3956 [propget] HRESULT nSelectedChildren
3958 [out, retval] long *cellCount
3961 /** @brief Returns the total number of selected columns
3962 @param [out] columnCount
3963 Number of columns currently selected
3964 @retval S_OK
3966 [propget] HRESULT nSelectedColumns
3968 [out, retval] long *columnCount
3971 /** @brief Returns the total number of selected rows
3972 @param [out] rowCount
3973 Number of rows currently selected
3974 @retval S_OK
3976 [propget] HRESULT nSelectedRows
3978 [out, retval] long *rowCount
3981 /** @brief Returns the description text of the specified row in the table.
3982 @param [in] row
3983 The 0 based index of the row for which to retrieve the description.
3984 @param [out] description
3985 Returns the description text of the specified row in the table if such a
3986 description exists. Otherwise a NULL pointer is returned.
3987 @retval S_OK
3988 @retval S_FALSE if there is nothing to return, [out] value is NULL
3989 @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
3991 [propget] HRESULT rowDescription
3993 [in] long row,
3994 [out, retval] BSTR *description
3997 /** @brief Returns the number of rows occupied by the accessible object
3998 at the specified row and column in the table.
4000 The result is greater than 1 if the specified cell spans multiple rows.
4001 @param [in] row
4002 0 based row index of the accessible for which to return the row extent.
4003 @param [in] column
4004 0 based column index of the accessible for which to return the row extent.
4005 @param [out] nRowsSpanned
4006 Returns the row extent of the specified cell.
4007 @retval S_OK
4008 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4010 [propget] HRESULT rowExtentAt
4012 [in] long row,
4013 [in] long column,
4014 [out, retval] long *nRowsSpanned
4017 /** @brief Returns the row headers as an %IAccessibleTable object.
4019 Content and size of the returned table are implementation dependent.
4020 @param [out] accessibleTable
4021 The row header.
4022 @param [out] startingColumnIndex
4023 The 0 based column index where the header starts, usually 0.
4024 @retval S_OK
4025 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4027 [propget] HRESULT rowHeader
4029 [out] IAccessibleTable **accessibleTable,
4030 [out, retval] long *startingColumnIndex
4033 /** @brief Translates the given cell index into a row index.
4034 @param [in] cellIndex
4035 0 based index of the cell in the parent or closest ancestor table. Typically this
4036 is the value returned from IAccessible2::indexInParent, but in the case where the
4037 table cells are not direct children of the table this is the cell index specified
4038 by the "table-cell-index" object attribute obtained from parsing the attributes
4039 string returned by calling IAccessible2::attributes on the cell object.
4040 @param [out] rowIndex
4041 0 based row index
4042 @retval S_OK
4043 @retval E_INVALIDARG if bad [in] passed, [out] value is 0
4045 [propget] HRESULT rowIndex
4047 [in] long cellIndex,
4048 [out, retval] long *rowIndex
4051 /** @brief Returns a list of cell indexes currently selected (0 based).
4052 @param [in] maxChildren
4053 This parameter is ignored. Refer to @ref _arrayConsideration
4054 "Special Consideration when using Arrays" for more details.
4055 @param [out] children
4056 An array of cell indexes of selected cells (each index is 0 based),
4057 allocated by the server. The client must free it with CoTaskMemFree.
4058 @param [out] nChildren
4059 The number of cell indexes returned; the size of the returned array.
4060 @retval S_OK
4061 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4063 [propget] HRESULT selectedChildren
4065 [in] long maxChildren,
4066 [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
4067 [out, retval] long *nChildren
4070 /** @brief Returns a list of column indexes currently selected (0 based).
4071 @param [in] maxColumns
4072 This parameter is ignored. Refer to @ref _arrayConsideration
4073 "Special Consideration when using Arrays" for more details.
4074 @param [out] columns
4075 An array of column indexes of selected columns (each index is 0 based), allocated
4076 by the server. The client must free it with CoTaskMemFree.
4077 @param [out] nColumns
4078 The number of column indexes returned; the size of the returned array.
4079 @retval S_OK
4080 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4082 [propget] HRESULT selectedColumns
4084 [in] long maxColumns,
4085 [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
4086 [out, retval] long *nColumns
4089 /** @brief Returns a list of row indexes currently selected (0 based).
4090 @param [in] maxRows
4091 This parameter is ignored. Refer to @ref _arrayConsideration
4092 "Special Consideration when using Arrays" for more details.
4093 @param [out] rows
4094 An array of row indexes of selected rows (each index is 0 based), allocated
4095 by the server. The client must free it with CoTaskMemFree.
4096 @param [out] nRows
4097 The number of row indexes returned; the size of the returned array.
4098 @retval S_OK
4099 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4101 [propget] HRESULT selectedRows
4103 [in] long maxRows,
4104 [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
4105 [out, retval] long *nRows
4108 /** @brief Returns the summary description of the table. The returned object could be
4109 an IAccessible or an IAccessible2.
4110 @param [out] accessible
4111 Returns a reference to an implementation dependent accessible object
4112 representing the table's summary or a NULL pointer if the table
4113 does not support a summary.
4114 @retval S_OK
4115 @retval S_FALSE if there is nothing to return, [out] value is NULL
4117 [propget] HRESULT summary
4119 [out, retval] IUnknown **accessible
4122 /** @brief Returns a boolean value indicating whether the specified column is
4123 completely selected.
4124 @param [in] column
4125 0 based index of the column for which to determine whether it is selected.
4126 @param [out] isSelected
4127 Returns TRUE if the specified column is selected completely and FALSE otherwise.
4128 @retval S_OK
4129 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4131 [propget] HRESULT isColumnSelected
4133 [in] long column,
4134 [out, retval] boolean *isSelected
4137 /** @brief Returns a boolean value indicating whether the specified row is completely
4138 selected.
4139 @param [in] row
4140 0 based index of the row for which to determine whether it is selected.
4141 @param [out] isSelected
4142 Returns TRUE if the specified row is selected completely and FALSE otherwise.
4143 @retval S_OK
4144 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4146 [propget] HRESULT isRowSelected
4148 [in] long row,
4149 [out, retval] boolean *isSelected
4152 /** @brief Returns a boolean value indicating whether the specified cell is selected.
4153 @param [in] row
4154 0 based index of the row for the cell to determine whether it is selected.
4155 @param [in] column
4156 0 based index of the column for the cell to determine whether it is selected.
4157 @param [out] isSelected
4158 Returns TRUE if the specified cell is selected and FALSE otherwise.
4159 @retval S_OK
4160 @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
4162 [propget] HRESULT isSelected
4164 [in] long row,
4165 [in] long column,
4166 [out, retval] boolean *isSelected
4169 /** @brief Selects a row and unselects all previously selected rows.
4170 @param [in] row
4171 0 based index of the row to be selected.
4172 @retval S_OK
4173 @retval E_INVALIDARG if bad [in] passed
4175 HRESULT selectRow
4177 [in] long row
4180 /** @brief Selects a column and unselects all previously selected columns.
4181 @param [in] column
4182 0 based index of the column to be selected.
4183 @retval S_OK
4184 @retval E_INVALIDARG if bad [in] passed
4186 HRESULT selectColumn
4188 [in] long column
4191 /** @brief Unselects one row, leaving other selected rows selected (if any).
4192 @param [in] row
4193 0 based index of the row to be unselected.
4194 @retval S_OK
4195 @retval E_INVALIDARG if bad [in] passed
4197 HRESULT unselectRow
4199 [in] long row
4202 /** @brief Unselects one column, leaving other selected columns selected (if any).
4203 @param [in] column
4204 0 based index of the column to be unselected.
4205 @retval S_OK
4206 @retval E_INVALIDARG if bad [in] passed
4208 HRESULT unselectColumn
4210 [in] long column
4213 /** @brief Given a cell index, gets the row and column indexes and extents of a cell
4214 and whether or not it is selected.
4216 This is a convenience function. It is not mandatory to implement it.
4217 @param [in] index
4218 0 based index of this cell in the table.
4219 @param [out] row
4220 0 based row index.
4221 @param [out] column
4222 0 based column index.
4223 @param [out] rowExtents
4224 Number of cells spanned by this cell in this row.
4225 @param [out] columnExtents
4226 Number of cells spanned by this cell in this column.
4227 @param [out] isSelected
4228 Indicates if the specified cell is selected.
4229 @retval S_OK
4230 @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
4232 [propget] HRESULT rowColumnExtentsAtIndex
4234 [in] long index,
4235 [out] long *row,
4236 [out] long *column,
4237 [out] long *rowExtents,
4238 [out] long *columnExtents,
4239 [out, retval] boolean *isSelected
4242 /** @brief Returns the type and extents describing how a table changed.
4244 Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4246 This data is only guaranteed to be valid while the thread notifying the event
4247 continues. Once the handler has returned, the validity of the data depends on
4248 how the server manages the life cycle of its objects. Also, note that the server
4249 may have different life cycle management strategies for controls depending on
4250 whether or not a control manages its children. Lists, trees, and tables can have
4251 a large number of children and thus it's possible that the child objects for those
4252 controls would only be created as needed. Servers should document their life cycle
4253 strategy as this will be of interest to assistive technology or script engines
4254 accessing data out of process or from other threads. Servers only need to save the
4255 most recent row and column values associated with the change and a scope of the
4256 entire application is adequate.
4258 @param [out] modelChange
4259 A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4260 @retval S_OK
4261 @retval S_FALSE if there is nothing to return, [out] value is NULL
4263 [propget] HRESULT modelChange
4265 [out, retval] IA2TableModelChange *modelChange
4269 /*************************************************************************
4271 * File Name (AccessibleTable2.idl)
4273 * IAccessible2 IDL Specification
4275 * Copyright (c) 2007, 2012 Linux Foundation
4276 * Copyright (c) 2006 IBM Corporation
4277 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4278 * All rights reserved.
4281 * Redistribution and use in source and binary forms, with or without
4282 * modification, are permitted provided that the following conditions
4283 * are met:
4285 * 1. Redistributions of source code must retain the above copyright
4286 * notice, this list of conditions and the following disclaimer.
4288 * 2. Redistributions in binary form must reproduce the above
4289 * copyright notice, this list of conditions and the following
4290 * disclaimer in the documentation and/or other materials
4291 * provided with the distribution.
4293 * 3. Neither the name of the Linux Foundation nor the names of its
4294 * contributors may be used to endorse or promote products
4295 * derived from this software without specific prior written
4296 * permission.
4298 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4299 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4300 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4301 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4302 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4303 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4304 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4305 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4306 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4307 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4308 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4309 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4310 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4312 * This BSD License conforms to the Open Source Initiative "Simplified
4313 * BSD License" as published at:
4314 * http://www.opensource.org/licenses/bsd-license.php
4316 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4317 * mark may be used in accordance with the Linux Foundation Trademark
4318 * Policy to indicate compliance with the IAccessible2 specification.
4320 ************************************************************************/
4328 /** @brief This interface gives access to a two-dimensional table.
4330 Please also refer to the IAccessibleTableCell interface.
4332 If you want to support older applications you should also support the
4333 IAccessibleTable interface.
4335 [object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
4336 interface IAccessibleTable2 : IUnknown
4339 /** @brief Returns the accessible object at the specified row and column in
4340 the table. This object could be an IAccessible or an IAccessible2.
4341 @param [in] row
4342 The 0 based row index for which to retrieve the cell.
4343 @param [in] column
4344 The 0 based column index for which to retrieve the cell.
4345 @param [out] cell
4346 If both row and column index are valid then the corresponding accessible
4347 object is returned that represents the requested cell regardless of whether
4348 the cell is currently visible (on the screen).
4349 @retval S_OK
4350 @retval E_INVALIDARG if bad [in] passed
4352 [propget] HRESULT cellAt
4354 [in] long row,
4355 [in] long column,
4356 [out, retval] IUnknown **cell
4359 /** @brief Returns the caption for the table. The returned object could be
4360 an IAccessible or an IAccessible2.
4361 @param [out] accessible
4362 If the table has a caption then a reference to it is returned, else a NULL
4363 pointer is returned.
4364 @retval S_OK
4365 @retval S_FALSE if there is nothing to return, [out] value is NULL
4366 @deprecated use a describedBy relation
4368 [propget] HRESULT caption
4370 [out, retval] IUnknown **accessible
4373 /** @brief Returns the description text of the specified column in the table.
4374 @param [in] column
4375 The 0 based index of the column for which to retrieve the description.
4376 @param [out] description
4377 Returns the description text of the specified column in the table if such a
4378 description exists. Otherwise a NULL pointer is returned.
4379 @retval S_OK
4380 @retval S_FALSE if there is nothing to return, [out] value is NULL
4381 @retval E_INVALIDARG if bad [in] passed
4383 [propget] HRESULT columnDescription
4385 [in] long column,
4386 [out, retval] BSTR *description
4390 /** @brief Returns the total number of columns in table
4391 @param [out] columnCount
4392 Number of columns in table (including columns outside the current viewport)
4393 @retval S_OK
4395 [propget] HRESULT nColumns
4397 [out, retval] long *columnCount
4400 /** @brief Returns the total number of rows in table
4401 @param [out] rowCount
4402 Number of rows in table (including rows outside the current viewport)
4403 @retval S_OK
4405 [propget] HRESULT nRows
4407 [out, retval] long *rowCount
4410 /** @brief Returns the total number of selected cells
4411 @param [out] cellCount
4412 Number of cells currently selected
4413 @retval S_OK
4415 [propget] HRESULT nSelectedCells
4417 [out, retval] long *cellCount
4420 /** @brief Returns the total number of selected columns
4421 @param [out] columnCount
4422 Number of columns currently selected
4423 @retval S_OK
4425 [propget] HRESULT nSelectedColumns
4427 [out, retval] long *columnCount
4430 /** @brief Returns the total number of selected rows
4431 @param [out] rowCount
4432 Number of rows currently selected
4433 @retval S_OK
4435 [propget] HRESULT nSelectedRows
4437 [out, retval] long *rowCount
4440 /** @brief Returns the description text of the specified row in the table.
4441 @param [in] row
4442 The 0 based index of the row for which to retrieve the description.
4443 @param [out] description
4444 Returns the description text of the specified row in the table if such a
4445 description exists. Otherwise a NULL pointer is returned.
4446 @retval S_OK
4447 @retval S_FALSE if there is nothing to return, [out] value is NULL
4448 @retval E_INVALIDARG if bad [in] passed
4450 [propget] HRESULT rowDescription
4452 [in] long row,
4453 [out, retval] BSTR *description
4456 /** @brief Returns a list of accessibles currently selected.
4457 @param [out] cells
4458 Pointer to an array of references to selected accessibles. The array is
4459 allocated by the server with CoTaskMemAlloc and freed by the client with
4460 CoTaskMemFree.
4461 @param [out] nSelectedCells
4462 The number of accessibles returned; the size of the returned array.
4463 @retval S_OK
4464 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4466 [propget] HRESULT selectedCells
4468 [out, size_is(,*nSelectedCells)] IUnknown ***cells,
4469 [out, retval] long *nSelectedCells
4472 /** @brief Returns a list of column indexes currently selected (0 based).
4473 @param [out] selectedColumns
4474 A pointer to an array of column indexes of selected columns (each index is
4475 0 based). The array is allocated by the server with CoTaskMemAlloc and
4476 freed by the client with CoTaskMemFree.
4477 @param [out] nColumns
4478 The number of column indexes returned; the size of the returned array.
4479 @retval S_OK
4480 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4482 [propget] HRESULT selectedColumns
4484 [out, size_is(,*nColumns)] long **selectedColumns,
4485 [out, retval] long *nColumns
4488 /** @brief Returns a list of row indexes currently selected (0 based).
4489 @param [out] selectedRows
4490 An array of row indexes of selected rows (each index is 0 based). The array
4491 is allocated by the server with CoTaskMemAlloc and freed by the client with
4492 CoTaskMemFree.
4493 @param [out] nRows
4494 The number of row indexes returned; the size of the returned array.
4495 @retval S_OK
4496 @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
4498 [propget] HRESULT selectedRows
4500 [out, size_is(,*nRows)] long **selectedRows,
4501 [out, retval] long *nRows
4504 /** @brief Returns the summary description of the table. The returned object could be
4505 an IAccessible or an IAccessible2.
4506 @param [out] accessible
4507 Returns a reference to an implementation dependent accessible object
4508 representing the table's summary or a NULL pointer if the table
4509 does not support a summary.
4510 @retval S_OK
4511 @retval S_FALSE if there is nothing to return, [out] value is NULL
4512 @deprecated Use the labeledBy relation
4514 [propget] HRESULT summary
4516 [out, retval] IUnknown **accessible
4519 /** @brief Returns a boolean value indicating whether the specified column is
4520 completely selected.
4521 @param [in] column
4522 0 based index of the column for which to determine whether it is selected.
4523 @param [out] isSelected
4524 Returns TRUE if the specified column is selected completely and FALSE otherwise.
4525 @retval S_OK
4526 @retval E_INVALIDARG if bad [in] passed
4528 [propget] HRESULT isColumnSelected
4530 [in] long column,
4531 [out, retval] boolean *isSelected
4534 /** @brief Returns a boolean value indicating whether the specified row is completely
4535 selected.
4536 @param [in] row
4537 0 based index of the row for which to determine whether it is selected.
4538 @param [out] isSelected
4539 Returns TRUE if the specified row is selected completely and FALSE otherwise.
4540 @retval S_OK
4541 @retval E_INVALIDARG if bad [in] passed
4543 [propget] HRESULT isRowSelected
4545 [in] long row,
4546 [out, retval] boolean *isSelected
4549 /** @brief Selects a row and unselects all previously selected rows.
4551 The behavior should mimic that of the application, but for those applications
4552 which do not have a means in the GUI to select a full row of cells the behavior
4553 should be as follows: First any selected rows in the table are unselected. Then
4554 the entire row of cells for the specified row is selected. If any of the
4555 cells in the selected row span additional rows, the cells in those rows
4556 are also selected.
4557 @param [in] row
4558 0 based index of the row to be selected.
4559 @retval S_OK
4560 @retval E_INVALIDARG if bad [in] passed
4562 HRESULT selectRow
4564 [in] long row
4567 /** @brief Selects a column and unselects all previously selected columns.
4569 The behavior should mimic that of the application, but for those applications
4570 which do not have a means in the GUI to select a full column of cells the behavior
4571 should be as follows: First any selected columns in the table are unselected. Then
4572 the entire column of cells for the specified column is selected. If any of the
4573 cells in the selected column span additional columns, the cells in those columns
4574 are also selected.
4575 @param [in] column
4576 0 based index of the column to be selected.
4577 @retval S_OK
4578 @retval E_INVALIDARG if bad [in] passed
4580 HRESULT selectColumn
4582 [in] long column
4585 /** @brief Unselects one row, leaving other selected rows selected (if any).
4587 The behavior should mimic that of the application, but for those applications
4588 which do not have a means in the GUI to unselect a full row of cells the
4589 behavior should be as follows: The entire row of cells for the specified
4590 row is unselected. If any of the cells in the selected row span additional
4591 rows, the cells in those rows are also unselected.
4592 @param [in] row
4593 0 based index of the row to be unselected.
4594 @retval S_OK
4595 @retval E_INVALIDARG if bad [in] passed
4597 HRESULT unselectRow
4599 [in] long row
4602 /** @brief Unselects one column, leaving other selected columns selected (if any).
4604 The behavior should mimic that of the application, but for those applications
4605 which do not have a means in the GUI to unselect a full column of cells the
4606 behavior should be as follows: The entire column of cells for the specified
4607 column is unselected. If any of the cells in the selected column span additional
4608 columns, the cells in those columns are also unselected.
4609 @param [in] column
4610 0 based index of the column to be unselected.
4611 @retval S_OK
4612 @retval E_INVALIDARG if bad [in] passed
4614 HRESULT unselectColumn
4616 [in] long column
4619 /** @brief Returns the type and extents describing how a table changed.
4621 Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
4623 This data is only guaranteed to be valid while the thread notifying the event
4624 continues. Once the handler has returned, the validity of the data depends on
4625 how the server manages the life cycle of its objects. Also, note that the server
4626 may have different life cycle management strategies for controls depending on
4627 whether or not a control manages its children. Lists, trees, and tables can have
4628 a large number of children and thus it's possible that the child objects for those
4629 controls would only be created as needed. Servers should document their life cycle
4630 strategy as this will be of interest to assistive technology or script engines
4631 accessing data out of process or from other threads. Servers only need to save the
4632 most recent row and column values associated with the change and a scope of the
4633 entire application is adequate.
4635 @param [out] modelChange
4636 A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
4637 @retval S_OK
4638 @retval S_FALSE if there is nothing to return, [out] value is NULL
4640 [propget] HRESULT modelChange
4642 [out, retval] IA2TableModelChange *modelChange
4646 /*************************************************************************
4648 * File Name (AccessibleTableCell.idl)
4650 * IAccessible2 IDL Specification
4652 * Copyright (c) 2007, 2013 Linux Foundation
4653 * Copyright (c) 2006 IBM Corporation
4654 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4655 * All rights reserved.
4658 * Redistribution and use in source and binary forms, with or without
4659 * modification, are permitted provided that the following conditions
4660 * are met:
4662 * 1. Redistributions of source code must retain the above copyright
4663 * notice, this list of conditions and the following disclaimer.
4665 * 2. Redistributions in binary form must reproduce the above
4666 * copyright notice, this list of conditions and the following
4667 * disclaimer in the documentation and/or other materials
4668 * provided with the distribution.
4670 * 3. Neither the name of the Linux Foundation nor the names of its
4671 * contributors may be used to endorse or promote products
4672 * derived from this software without specific prior written
4673 * permission.
4675 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4676 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4677 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4678 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4679 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4680 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4681 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4682 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4683 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4684 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4685 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4686 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4687 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4689 * This BSD License conforms to the Open Source Initiative "Simplified
4690 * BSD License" as published at:
4691 * http://www.opensource.org/licenses/bsd-license.php
4693 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4694 * mark may be used in accordance with the Linux Foundation Trademark
4695 * Policy to indicate compliance with the IAccessible2 specification.
4697 ************************************************************************/
4704 /** @brief This interface gives access to the cells of a two-dimensional table.
4706 Please also refer to the IAccessibleTable2 interface.
4709 [object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
4710 interface IAccessibleTableCell : IUnknown
4713 /** @brief Returns the number of columns occupied by this cell accessible.
4715 The result is greater than 1 if the specified cell spans multiple columns.
4716 @param [out] nColumnsSpanned
4717 Returns the 1 based column extent of the specified cell.
4718 @retval S_OK
4720 [propget] HRESULT columnExtent
4722 [out, retval] long *nColumnsSpanned
4725 /** @brief Returns the column headers as an array of cell accessibles.
4727 @param [out] cellAccessibles
4728 Pointer to an array of references to cell accessibles. The array is allocated
4729 by the server. The client must free it with CoTaskMemFree.
4730 @param [out] nColumnHeaderCells
4731 The number of accessibles returned; the size of the returned array.
4732 @retval S_OK
4733 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4735 [propget] HRESULT columnHeaderCells
4737 [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
4738 [out, retval] long *nColumnHeaderCells
4741 /** @brief Translates this cell accessible into the corresponding column index.
4743 @param [out] columnIndex
4744 Returns the 0 based column index of the cell of the specified cell or the index of
4745 the first column if the cell spans multiple columns.
4746 @retval S_OK
4748 [propget] HRESULT columnIndex
4750 [out, retval] long *columnIndex
4753 /** @brief Returns the number of rows occupied by this cell accessible.
4755 @param [out] nRowsSpanned
4756 Returns the row extent of the specified cell.
4757 @retval S_OK
4759 [propget] HRESULT rowExtent
4761 [out, retval] long *nRowsSpanned
4764 /** @brief Returns the row headers as an array of cell accessibles.
4766 @param [out] cellAccessibles
4767 Pointer to an array of references to cell accessibles. The array is allocated
4768 by the server. The client must free it with CoTaskMemFree.
4769 @param [out] nRowHeaderCells
4770 The number of accessibles returned; the size of the returned array.
4771 @retval S_OK
4772 @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
4774 [propget] HRESULT rowHeaderCells
4776 [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
4777 [out, retval] long *nRowHeaderCells
4780 /** @brief Translates this cell accessible into the corresponding row index.
4782 @param [out] rowIndex
4783 Returns the 0 based row index of the specified cell or the index of
4784 the first row if the cell spans multiple rows.
4785 @retval S_OK
4787 [propget] HRESULT rowIndex
4789 [out, retval] long *rowIndex
4792 /** @brief Returns a boolean value indicating whether this cell is selected.
4794 @param [out] isSelected
4795 Returns TRUE if the specified cell is selected and FALSE otherwise.
4796 @retval S_OK
4798 [propget] HRESULT isSelected
4800 [out, retval] boolean *isSelected
4803 /** @brief Gets the row and column indexes and extents of this cell accessible
4804 and whether or not it is selected.
4806 This is a convenience function. It is not mandatory to implement it.
4807 @param [out] row
4808 0 based row index.
4809 @param [out] column
4810 0 based column index.
4811 @param [out] rowExtents
4812 Number of cells spanned by this cell in this row.
4813 @param [out] columnExtents
4814 Number of cells spanned by this cell in this column.
4815 @param [out] isSelected
4816 Indicates if the specified cell is selected.
4817 @retval S_OK
4819 [propget] HRESULT rowColumnExtents
4821 [out] long *row,
4822 [out] long *column,
4823 [out] long *rowExtents,
4824 [out] long *columnExtents,
4825 [out, retval] boolean *isSelected
4828 /** @brief Returns a reference to the accessible of the containing table.
4830 @param [out] table
4831 Returns a reference to the IUnknown of the containing table.
4832 @retval S_OK
4834 [propget] HRESULT table
4836 [out, retval] IUnknown **table
4840 /*************************************************************************
4842 * File Name (AccessibleImage.idl)
4844 * IAccessible2 IDL Specification
4846 * Copyright (c) 2007, 2010 Linux Foundation
4847 * Copyright (c) 2006 IBM Corporation
4848 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4849 * All rights reserved.
4852 * Redistribution and use in source and binary forms, with or without
4853 * modification, are permitted provided that the following conditions
4854 * are met:
4856 * 1. Redistributions of source code must retain the above copyright
4857 * notice, this list of conditions and the following disclaimer.
4859 * 2. Redistributions in binary form must reproduce the above
4860 * copyright notice, this list of conditions and the following
4861 * disclaimer in the documentation and/or other materials
4862 * provided with the distribution.
4864 * 3. Neither the name of the Linux Foundation nor the names of its
4865 * contributors may be used to endorse or promote products
4866 * derived from this software without specific prior written
4867 * permission.
4869 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4870 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4871 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4872 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4873 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4874 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4875 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4876 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4877 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4878 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4879 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4880 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4881 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4883 * This BSD License conforms to the Open Source Initiative "Simplified
4884 * BSD License" as published at:
4885 * http://www.opensource.org/licenses/bsd-license.php
4887 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4888 * mark may be used in accordance with the Linux Foundation Trademark
4889 * Policy to indicate compliance with the IAccessible2 specification.
4891 ************************************************************************/
4898 /** @brief This interface represents images and icons.
4900 This interface is used for a representation of images like icons on buttons.
4901 %IAccessibleImage only needs to be implemented in certain situations. Some
4902 examples are:
4903 <ol>
4904 <li>The accessible name and description are not enough to fully
4905 describe the image, e.g. when the accessible description is used to define the
4906 behavior of an actionable image and the image itself conveys semantically
4907 significant information.
4908 <li>The user can edit the content that includes an
4909 image and therefore the user needs to be able to review the image's position.
4910 </ol>
4912 [object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
4913 interface IAccessibleImage : IUnknown
4915 /** @brief Returns the localized description of the image.
4916 @param [out] description
4917 @retval S_OK
4918 @retval S_FALSE if there is nothing to return, [out] value is NULL
4920 [propget] HRESULT description
4922 [out, retval] BSTR *description
4925 /** @brief Returns the coordinates of the image.
4926 @param [in] coordinateType
4927 Specifies whether the returned coordinates should be relative to the screen or the parent object.
4928 @param [out] x
4929 @param [out] y
4930 @retval S_OK
4932 [propget] HRESULT imagePosition
4934 [in] enum IA2CoordinateType coordinateType,
4935 [out] long *x,
4936 [out, retval] long *y
4939 /** @brief Returns the size of the image in units specified by parent's coordinate system.
4940 @param [out] height
4941 @param [out] width
4942 @retval S_OK
4945 [propget] HRESULT imageSize
4947 [out] long *height,
4948 [out, retval] long *width
4951 /*************************************************************************
4953 * File Name (AccessibleEventID.idl)
4955 * IAccessible2 IDL Specification
4957 * Copyright (c) 2007, 2010 Linux Foundation
4958 * Copyright (c) 2006 IBM Corporation
4959 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
4960 * All rights reserved.
4963 * Redistribution and use in source and binary forms, with or without
4964 * modification, are permitted provided that the following conditions
4965 * are met:
4967 * 1. Redistributions of source code must retain the above copyright
4968 * notice, this list of conditions and the following disclaimer.
4970 * 2. Redistributions in binary form must reproduce the above
4971 * copyright notice, this list of conditions and the following
4972 * disclaimer in the documentation and/or other materials
4973 * provided with the distribution.
4975 * 3. Neither the name of the Linux Foundation nor the names of its
4976 * contributors may be used to endorse or promote products
4977 * derived from this software without specific prior written
4978 * permission.
4980 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
4981 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
4982 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
4983 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
4984 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
4985 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4986 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4987 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
4988 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4989 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4990 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
4991 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4992 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4994 * This BSD License conforms to the Open Source Initiative "Simplified
4995 * BSD License" as published at:
4996 * http://www.opensource.org/licenses/bsd-license.php
4998 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
4999 * mark may be used in accordance with the Linux Foundation Trademark
5000 * Policy to indicate compliance with the IAccessible2 specification.
5002 ************************************************************************/
5004 /** %IAccessible2 specific event constants
5006 This enum defines the event IDs fired by %IAccessible2 objects. The event IDs
5007 are in addition to those used by MSAA.
5009 enum IA2EventID {
5011 /** The change of the number or attributes of actions of an accessible
5012 object is signaled by events of this type.
5014 IA2_EVENT_ACTION_CHANGED = 0x101,
5016 /** <b>Deprecated.</b> The active descendant of a component has changed.
5018 Note: This event constant is misspelled and thus is deprecated and will be
5019 removed in a later version. Please use the correctly spelled version which
5020 follows.
5022 IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5024 /** The active descendant of a component has changed. The active descendant
5025 is used in objects with transient children.
5027 Note: Due to the fact that MSAA's WinEvents don't allow the active child index
5028 to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
5029 descendants scheme can't be used. Instead the active child object has to fire
5030 MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
5031 added to provide for event specific data to be passed with the event. At that
5032 time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
5033 IA2_STATE_MANAGES_DESCENDANTS state would be useful.
5035 IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
5037 /** The document wide attributes of the document object have changed.
5039 IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
5041 /** The contents of the document have changed.
5043 IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
5045 /** The loading of the document has completed.
5047 IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
5049 /** The loading of the document was interrupted.
5051 IA2_EVENT_DOCUMENT_LOAD_STOPPED,
5053 /** The document contents are being reloaded.
5055 IA2_EVENT_DOCUMENT_RELOAD,
5057 /** The ending index of this link within the containing string has changed.
5059 IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
5061 /** The number of anchors associated with this hyperlink object has changed.
5063 IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
5065 /** The hyperlink selected state changed from selected to unselected or
5066 from unselected to selected.
5068 IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
5070 /** One of the links associated with the hypertext object has been activated.
5072 IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
5074 /** One of the links associated with the hypertext object has been selected.
5076 IA2_EVENT_HYPERTEXT_LINK_SELECTED,
5078 /** The starting index of this link within the containing string has changed.
5080 IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
5082 /** Focus has changed from one hypertext object to another, or focus moved
5083 from a non-hypertext object to a hypertext object, or focus moved from a
5084 hypertext object to a non-hypertext object.
5086 IA2_EVENT_HYPERTEXT_CHANGED,
5088 /** The number of hyperlinks associated with a hypertext object changed
5090 IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
5092 /** An object's attributes changed.
5093 Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
5095 IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
5097 /** A slide changed in a presentation document or a page boundary was
5098 crossed in a word processing document.
5100 IA2_EVENT_PAGE_CHANGED,
5102 /** The caret moved from one section to the next.
5104 IA2_EVENT_SECTION_CHANGED,
5106 /** A table caption changed.
5108 IA2_EVENT_TABLE_CAPTION_CHANGED,
5110 /** A table's column description changed.
5112 IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
5114 /** A table's column header changed.
5116 IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
5118 /** A table's data changed.
5120 IA2_EVENT_TABLE_MODEL_CHANGED,
5122 /** A table's row description changed.
5124 IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
5126 /** A table's row header changed.
5128 IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
5130 /** A table's summary changed.
5132 IA2_EVENT_TABLE_SUMMARY_CHANGED,
5134 /** A text object's attributes changed.
5135 Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
5137 IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
5139 /** The caret has moved to a new position.
5141 IA2_EVENT_TEXT_CARET_MOVED,
5143 /** <b>Deprecated.</b> This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
5145 IA2_EVENT_TEXT_CHANGED,
5147 /** The caret moved from one column to the next.
5149 IA2_EVENT_TEXT_COLUMN_CHANGED,
5151 /** Text was inserted.
5153 IA2_EVENT_TEXT_INSERTED,
5155 /** Text was removed.
5157 IA2_EVENT_TEXT_REMOVED,
5159 /** This event indicates general text changes, i.e. changes to text that are
5160 exposed through the IAccessibleText interface. For compatibility with ATK/AT-SPI
5161 which does not have an equivalent event, servers can alternatively fire
5162 ::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
5164 IA2_EVENT_TEXT_UPDATED,
5166 /** The text selection changed. Later versions of Microsoft development environments
5167 have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED. Servers
5168 should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.
5169 Clients should be prepared to respond to either event.
5172 IA2_EVENT_TEXT_SELECTION_CHANGED,
5174 /** A visible data event indicates the change of the visual appearance
5175 of an accessible object. This includes for example most of the
5176 attributes available via the IAccessibleComponent interface.
5178 IA2_EVENT_VISIBLE_DATA_CHANGED
5181 /*************************************************************************
5183 * File Name (AccessibleApplication.idl)
5185 * IAccessible2 IDL Specification
5187 * Copyright (c) 2007, 2010 Linux Foundation
5188 * Copyright (c) 2006 IBM Corporation
5189 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5190 * All rights reserved.
5193 * Redistribution and use in source and binary forms, with or without
5194 * modification, are permitted provided that the following conditions
5195 * are met:
5197 * 1. Redistributions of source code must retain the above copyright
5198 * notice, this list of conditions and the following disclaimer.
5200 * 2. Redistributions in binary form must reproduce the above
5201 * copyright notice, this list of conditions and the following
5202 * disclaimer in the documentation and/or other materials
5203 * provided with the distribution.
5205 * 3. Neither the name of the Linux Foundation nor the names of its
5206 * contributors may be used to endorse or promote products
5207 * derived from this software without specific prior written
5208 * permission.
5210 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5211 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5212 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5213 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5214 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5215 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5216 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5217 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5218 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5219 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5220 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5221 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5222 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5224 * This BSD License conforms to the Open Source Initiative "Simplified
5225 * BSD License" as published at:
5226 * http://www.opensource.org/licenses/bsd-license.php
5228 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5229 * mark may be used in accordance with the Linux Foundation Trademark
5230 * Policy to indicate compliance with the IAccessible2 specification.
5232 ************************************************************************/
5239 /** @brief This interface gives access to the application's name and version information.
5241 This interface provides the AT with the information it needs to differentiate
5242 this application from other applications, from other versions of this
5243 application, or from other versions of this application running on different
5244 versions of an accessibility bridge or accessibility toolkit.
5246 Servers implementing IAccessible2 should provide access to the %IAccessibleApplication
5247 interface via QueryService from any object so that ATs can easily determine specific
5248 information about the application such as its name or version.
5250 [object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
5251 interface IAccessibleApplication : IUnknown
5254 /** @brief Returns the application name.
5255 @param [out] name
5256 @retval S_OK
5257 @retval S_FALSE if there is nothing to return, [out] value is NULL
5259 [propget] HRESULT appName
5261 [out, retval] BSTR *name
5264 /** @brief Returns the application version.
5265 @param [out] version
5266 The version string must not contain levels when it is know beforehand that
5267 this information will never require a change in a client's behavior.
5268 For example, use "3.6.0" rather than "3.6.0.v201005131500".
5269 @retval S_OK
5270 @retval S_FALSE if there is nothing to return, [out] value is NULL
5272 [propget] HRESULT appVersion
5274 [out, retval] BSTR *version
5277 /** @brief Returns the toolkit/bridge name.
5278 @param [out] name
5279 @retval S_OK
5280 @retval S_FALSE if there is nothing to return, [out] value is NULL
5282 [propget] HRESULT toolkitName
5284 [out, retval] BSTR *name
5287 /** @brief Returns the toolkit/bridge version.
5288 @param [out] version
5289 The version string must not contain levels when it is know beforehand that
5290 this information will never require a change in a client's behavior.
5291 For example, use "3.6.0" rather than "3.6.0.v201005131500".
5292 @retval S_OK
5293 @retval S_FALSE if there is nothing to return, [out] value is NULL
5295 [propget] HRESULT toolkitVersion
5297 [out, retval] BSTR *version
5302 /*************************************************************************
5304 * File Name (AccessibleDocument.idl)
5306 * IAccessible2 IDL Specification
5308 * Copyright (c) 2013 Linux Foundation
5309 * All rights reserved.
5312 * Redistribution and use in source and binary forms, with or without
5313 * modification, are permitted provided that the following conditions
5314 * are met:
5316 * 1. Redistributions of source code must retain the above copyright
5317 * notice, this list of conditions and the following disclaimer.
5319 * 2. Redistributions in binary form must reproduce the above
5320 * copyright notice, this list of conditions and the following
5321 * disclaimer in the documentation and/or other materials
5322 * provided with the distribution.
5324 * 3. Neither the name of the Linux Foundation nor the names of its
5325 * contributors may be used to endorse or promote products
5326 * derived from this software without specific prior written
5327 * permission.
5329 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5330 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5331 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5332 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5333 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5334 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5335 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5336 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5337 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5338 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5339 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5340 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5341 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5343 * This BSD License conforms to the Open Source Initiative "Simplified
5344 * BSD License" as published at:
5345 * http://www.opensource.org/licenses/bsd-license.php
5347 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5348 * mark may be used in accordance with the Linux Foundation Trademark
5349 * Policy to indicate compliance with the IAccessible2 specification.
5351 ************************************************************************/
5357 /** @brief This interface represents documents.
5359 This interface is used for a representation of documents.
5361 [object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
5362 interface IAccessibleDocument : IUnknown
5364 /** @brief Returns the most recently used anchor target within a document.
5366 A document's most recently targeted in-page anchor is returned. A typical use
5367 of this method is to fetch the anchor target within an HTML document. In this
5368 case anchor targets are those which have been defined with the &lt;a&gt; tag.
5370 @param [out] accessible
5371 @retval S_OK
5372 @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
5374 [propget] HRESULT anchorTarget
5376 [out, retval] IUnknown **accessible
5380 /*************************************************************************
5382 * File Name (IA2TypeLibrary.idl)
5384 * IAccessible2 IDL Specification
5386 * Copyright (c) 2007, 2012 Linux Foundation
5387 * Copyright (c) 2006 IBM Corporation
5388 * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
5389 * All rights reserved.
5392 * Redistribution and use in source and binary forms, with or without
5393 * modification, are permitted provided that the following conditions
5394 * are met:
5396 * 1. Redistributions of source code must retain the above copyright
5397 * notice, this list of conditions and the following disclaimer.
5399 * 2. Redistributions in binary form must reproduce the above
5400 * copyright notice, this list of conditions and the following
5401 * disclaimer in the documentation and/or other materials
5402 * provided with the distribution.
5404 * 3. Neither the name of the Linux Foundation nor the names of its
5405 * contributors may be used to endorse or promote products
5406 * derived from this software without specific prior written
5407 * permission.
5409 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
5410 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
5411 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
5412 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
5413 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
5414 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5415 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5416 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5417 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5418 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
5419 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
5420 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5421 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5423 * This BSD License conforms to the Open Source Initiative "Simplified
5424 * BSD License" as published at:
5425 * http://www.opensource.org/licenses/bsd-license.php
5427 * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
5428 * mark may be used in accordance with the Linux Foundation Trademark
5429 * Policy to indicate compliance with the IAccessible2 specification.
5431 ************************************************************************/
5433 // This is not a standalone file. It is to be appended to the end of the
5434 // merged IDL file.
5436 cpp_quote("")
5437 cpp_quote("// Type Library Definitions")
5438 cpp_quote("")
5441 uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
5442 helpstring("IAccessible2 Type Library"),
5443 version(1.3),
5444 hidden
5447 library IAccessible2Lib
5449 importlib ("stdole2.tlb");
5450 importlib ("oleacc.dll");
5451 interface IAccessible2;
5452 interface IAccessible2_2;
5453 interface IAccessibleAction;
5454 interface IAccessibleApplication;
5455 interface IAccessibleComponent;
5456 interface IAccessibleDocument;
5457 interface IAccessibleEditableText;
5458 interface IAccessibleHyperlink;
5459 interface IAccessibleHypertext;
5460 interface IAccessibleHypertext2;
5461 interface IAccessibleImage;
5462 interface IAccessibleRelation;
5463 interface IAccessibleTable;
5464 interface IAccessibleTable2;
5465 interface IAccessibleTableCell;
5466 interface IAccessibleText;
5467 interface IAccessibleText2;
5468 interface IAccessibleValue;
5469 enum IA2CoordinateType;
5470 enum IA2EventID;
5471 enum IA2Role;
5472 enum IA2ScrollType;
5473 enum IA2States;
5474 enum IA2TableModelChangeType;
5475 enum IA2TextBoundaryType;
5476 enum IA2TextSpecialOffsets;