1 /* 2 * Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* Note: In addition to this header file AccessBridgeCalls.c must be compiled and 27 * linked to your application. AccessBridgeCalls.c implements the Java Access 28 * Bridge API and also hides the complexities associated with interfacing to the 29 * associated Java Access Bridge DLL which is installed when Java is installed. 30 * 31 * AccessBridgeCalls.c is available for download from the OpenJDK repository using 32 * the following link: 33 * 34 * https://git.openjdk.org/jdk17/blob/master/src/jdk.accessibility/windows/native/bridge/AccessBridgeCalls.c 35 * 36 * Also note that the API is used in the jaccessinspector and jaccesswalker tools. 37 * The source for those tools is available in the OpenJDK repository at these links: 38 * 39 * https://git.openjdk.org/jdk17/blob/master/src/jdk.accessibility/windows/native/jaccessinspector/jaccessinspector.cpp 40 * https://git.openjdk.org/jdk17/blob/master/src/jdk.accessibility/windows/native/jaccesswalker/jaccesswalker.cpp 41 * 42 * 43 */ 44 45 /* 46 * Wrapper functions around calls to the AccessBridge DLL 47 */ 48 49 #include <windows.h> 50 #include <jni.h> 51 #include "AccessBridgeCallbacks.h" 52 #include "AccessBridgePackages.h" 53 54 #ifdef __cplusplus 55 extern "C" { 56 #endif 57 58 #define null NULL 59 60 typedef JOBJECT64 AccessibleContext; 61 typedef JOBJECT64 AccessibleText; 62 typedef JOBJECT64 AccessibleValue; 63 typedef JOBJECT64 AccessibleSelection; 64 typedef JOBJECT64 Java_Object; 65 typedef JOBJECT64 PropertyChangeEvent; 66 typedef JOBJECT64 FocusEvent; 67 typedef JOBJECT64 CaretEvent; 68 typedef JOBJECT64 MouseEvent; 69 typedef JOBJECT64 MenuEvent; 70 typedef JOBJECT64 AccessibleTable; 71 typedef JOBJECT64 AccessibleHyperlink; 72 typedef JOBJECT64 AccessibleHypertext; 73 74 75 typedef void (*Windows_runFP) (); 76 77 typedef void (*SetPropertyChangeFP) (AccessBridge_PropertyChangeFP fp); 78 79 typedef void (*SetJavaShutdownFP) (AccessBridge_JavaShutdownFP fp); 80 typedef void (*SetFocusGainedFP) (AccessBridge_FocusGainedFP fp); 81 typedef void (*SetFocusLostFP) (AccessBridge_FocusLostFP fp); 82 83 typedef void (*SetCaretUpdateFP) (AccessBridge_CaretUpdateFP fp); 84 85 typedef void (*SetMouseClickedFP) (AccessBridge_MouseClickedFP fp); 86 typedef void (*SetMouseEnteredFP) (AccessBridge_MouseEnteredFP fp); 87 typedef void (*SetMouseExitedFP) (AccessBridge_MouseExitedFP fp); 88 typedef void (*SetMousePressedFP) (AccessBridge_MousePressedFP fp); 89 typedef void (*SetMouseReleasedFP) (AccessBridge_MouseReleasedFP fp); 90 91 typedef void (*SetMenuCanceledFP) (AccessBridge_MenuCanceledFP fp); 92 typedef void (*SetMenuDeselectedFP) (AccessBridge_MenuDeselectedFP fp); 93 typedef void (*SetMenuSelectedFP) (AccessBridge_MenuSelectedFP fp); 94 typedef void (*SetPopupMenuCanceledFP) (AccessBridge_PopupMenuCanceledFP fp); 95 typedef void (*SetPopupMenuWillBecomeInvisibleFP) (AccessBridge_PopupMenuWillBecomeInvisibleFP fp); 96 typedef void (*SetPopupMenuWillBecomeVisibleFP) (AccessBridge_PopupMenuWillBecomeVisibleFP fp); 97 98 typedef void (*SetPropertyNameChangeFP) (AccessBridge_PropertyNameChangeFP fp); 99 typedef void (*SetPropertyDescriptionChangeFP) (AccessBridge_PropertyDescriptionChangeFP fp); 100 typedef void (*SetPropertyStateChangeFP) (AccessBridge_PropertyStateChangeFP fp); 101 typedef void (*SetPropertyValueChangeFP) (AccessBridge_PropertyValueChangeFP fp); 102 typedef void (*SetPropertySelectionChangeFP) (AccessBridge_PropertySelectionChangeFP fp); 103 typedef void (*SetPropertyTextChangeFP) (AccessBridge_PropertyTextChangeFP fp); 104 typedef void (*SetPropertyCaretChangeFP) (AccessBridge_PropertyCaretChangeFP fp); 105 typedef void (*SetPropertyVisibleDataChangeFP) (AccessBridge_PropertyVisibleDataChangeFP fp); 106 typedef void (*SetPropertyChildChangeFP) (AccessBridge_PropertyChildChangeFP fp); 107 typedef void (*SetPropertyActiveDescendentChangeFP) (AccessBridge_PropertyActiveDescendentChangeFP fp); 108 109 typedef void (*SetPropertyTableModelChangeFP) (AccessBridge_PropertyTableModelChangeFP fp); 110 111 typedef void (*ReleaseJavaObjectFP) (long vmID, Java_Object object); 112 113 typedef BOOL (*GetVersionInfoFP) (long vmID, AccessBridgeVersionInfo *info); 114 115 typedef BOOL (*IsJavaWindowFP) (HWND window); 116 typedef BOOL (*IsSameObjectFP) (long vmID, JOBJECT64 obj1, JOBJECT64 obj2); 117 typedef BOOL (*GetAccessibleContextFromHWNDFP) (HWND window, long *vmID, AccessibleContext *ac); 118 typedef HWND (*getHWNDFromAccessibleContextFP) (long vmID, AccessibleContext ac); 119 120 typedef BOOL (*GetAccessibleContextAtFP) (long vmID, AccessibleContext acParent, 121 jint x, jint y, AccessibleContext *ac); 122 typedef BOOL (*GetAccessibleContextWithFocusFP) (HWND window, long *vmID, AccessibleContext *ac); 123 typedef BOOL (*GetAccessibleContextInfoFP) (long vmID, AccessibleContext ac, AccessibleContextInfo *info); 124 typedef AccessibleContext (*GetAccessibleChildFromContextFP) (long vmID, AccessibleContext ac, jint i); 125 typedef AccessibleContext (*GetAccessibleParentFromContextFP) (long vmID, AccessibleContext ac); 126 127 /* begin AccessibleTable */ 128 typedef BOOL (*getAccessibleTableInfoFP) (long vmID, AccessibleContext ac, AccessibleTableInfo *tableInfo); 129 typedef BOOL (*getAccessibleTableCellInfoFP) (long vmID, AccessibleTable accessibleTable, 130 jint row, jint column, AccessibleTableCellInfo *tableCellInfo); 131 132 typedef BOOL (*getAccessibleTableRowHeaderFP) (long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo); 133 typedef BOOL (*getAccessibleTableColumnHeaderFP) (long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo); 134 135 typedef AccessibleContext (*getAccessibleTableRowDescriptionFP) (long vmID, AccessibleContext acParent, jint row); 136 typedef AccessibleContext (*getAccessibleTableColumnDescriptionFP) (long vmID, AccessibleContext acParent, jint column); 137 138 typedef jint (*getAccessibleTableRowSelectionCountFP) (long vmID, AccessibleTable table); 139 typedef BOOL (*isAccessibleTableRowSelectedFP) (long vmID, AccessibleTable table, jint row); 140 typedef BOOL (*getAccessibleTableRowSelectionsFP) (long vmID, AccessibleTable table, jint count, 141 jint *selections); 142 143 typedef jint (*getAccessibleTableColumnSelectionCountFP) (long vmID, AccessibleTable table); 144 typedef BOOL (*isAccessibleTableColumnSelectedFP) (long vmID, AccessibleTable table, jint column); 145 typedef BOOL (*getAccessibleTableColumnSelectionsFP) (long vmID, AccessibleTable table, jint count, 146 jint *selections); 147 148 typedef jint (*getAccessibleTableRowFP) (long vmID, AccessibleTable table, jint index); 149 typedef jint (*getAccessibleTableColumnFP) (long vmID, AccessibleTable table, jint index); 150 typedef jint (*getAccessibleTableIndexFP) (long vmID, AccessibleTable table, jint row, jint column); 151 /* end AccessibleTable */ 152 153 /* AccessibleRelationSet */ 154 typedef BOOL (*getAccessibleRelationSetFP) (long vmID, AccessibleContext accessibleContext, 155 AccessibleRelationSetInfo *relationSetInfo); 156 157 /* AccessibleHypertext */ 158 typedef BOOL (*getAccessibleHypertextFP)(long vmID, AccessibleContext accessibleContext, 159 AccessibleHypertextInfo *hypertextInfo); 160 161 typedef BOOL (*activateAccessibleHyperlinkFP)(long vmID, AccessibleContext accessibleContext, 162 AccessibleHyperlink accessibleHyperlink); 163 164 typedef jint (*getAccessibleHyperlinkCountFP)(const long vmID, 165 const AccessibleContext accessibleContext); 166 167 typedef BOOL (*getAccessibleHypertextExtFP) (const long vmID, 168 const AccessibleContext accessibleContext, 169 const jint nStartIndex, 170 AccessibleHypertextInfo *hypertextInfo); 171 172 typedef jint (*getAccessibleHypertextLinkIndexFP)(const long vmID, 173 const AccessibleHypertext hypertext, 174 const jint nIndex); 175 176 typedef BOOL (*getAccessibleHyperlinkFP)(const long vmID, 177 const AccessibleHypertext hypertext, 178 const jint nIndex, 179 AccessibleHyperlinkInfo *hyperlinkInfo); 180 181 182 /* Accessible KeyBindings, Icons and Actions */ 183 typedef BOOL (*getAccessibleKeyBindingsFP)(long vmID, AccessibleContext accessibleContext, 184 AccessibleKeyBindings *keyBindings); 185 186 typedef BOOL (*getAccessibleIconsFP)(long vmID, AccessibleContext accessibleContext, 187 AccessibleIcons *icons); 188 189 typedef BOOL (*getAccessibleActionsFP)(long vmID, AccessibleContext accessibleContext, 190 AccessibleActions *actions); 191 192 typedef BOOL (*doAccessibleActionsFP)(long vmID, AccessibleContext accessibleContext, 193 AccessibleActionsToDo *actionsToDo, jint *failure); 194 195 196 /* AccessibleText */ 197 198 typedef BOOL (*GetAccessibleTextInfoFP) (long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y); 199 typedef BOOL (*GetAccessibleTextItemsFP) (long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index); 200 typedef BOOL (*GetAccessibleTextSelectionInfoFP) (long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection); 201 typedef BOOL (*GetAccessibleTextAttributesFP) (long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes); 202 typedef BOOL (*GetAccessibleTextRectFP) (long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index); 203 typedef BOOL (*GetAccessibleTextLineBoundsFP) (long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex); 204 typedef BOOL (*GetAccessibleTextRangeFP) (long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len); 205 206 typedef BOOL (*GetCurrentAccessibleValueFromContextFP) (long vmID, AccessibleValue av, wchar_t *value, short len); 207 typedef BOOL (*GetMaximumAccessibleValueFromContextFP) (long vmID, AccessibleValue av, wchar_t *value, short len); 208 typedef BOOL (*GetMinimumAccessibleValueFromContextFP) (long vmID, AccessibleValue av, wchar_t *value, short len); 209 210 typedef void (*AddAccessibleSelectionFromContextFP) (long vmID, AccessibleSelection as, int i); 211 typedef void (*ClearAccessibleSelectionFromContextFP) (long vmID, AccessibleSelection as); 212 typedef JOBJECT64 (*GetAccessibleSelectionFromContextFP) (long vmID, AccessibleSelection as, int i); 213 typedef int (*GetAccessibleSelectionCountFromContextFP) (long vmID, AccessibleSelection as); 214 typedef BOOL (*IsAccessibleChildSelectedFromContextFP) (long vmID, AccessibleSelection as, int i); 215 typedef void (*RemoveAccessibleSelectionFromContextFP) (long vmID, AccessibleSelection as, int i); 216 typedef void (*SelectAllAccessibleSelectionFromContextFP) (long vmID, AccessibleSelection as); 217 218 /* Utility methods */ 219 220 typedef BOOL (*setTextContentsFP) (const long vmID, const AccessibleContext ac, const wchar_t *text); 221 typedef AccessibleContext (*getParentWithRoleFP) (const long vmID, const AccessibleContext ac, const wchar_t *role); 222 typedef AccessibleContext (*getParentWithRoleElseRootFP) (const long vmID, const AccessibleContext ac, const wchar_t *role); 223 typedef AccessibleContext (*getTopLevelObjectFP) (const long vmID, const AccessibleContext ac); 224 typedef int (*getObjectDepthFP) (const long vmID, const AccessibleContext ac); 225 typedef AccessibleContext (*getActiveDescendentFP) (const long vmID, const AccessibleContext ac); 226 227 228 typedef BOOL (*getVirtualAccessibleNameFP) (const long vmID, const AccessibleContext accessibleContext, 229 wchar_t *name, int len); 230 231 typedef BOOL (*requestFocusFP) (const long vmID, const AccessibleContext accessibleContext); 232 233 typedef BOOL (*selectTextRangeFP) (const long vmID, const AccessibleContext accessibleContext, 234 const int startIndex, const int endIndex); 235 236 typedef BOOL (*getTextAttributesInRangeFP) (const long vmID, const AccessibleContext accessibleContext, 237 const int startIndex, const int endIndex, 238 AccessibleTextAttributesInfo *attributes, short *len); 239 240 typedef int (*getVisibleChildrenCountFP) (const long vmID, const AccessibleContext accessibleContext); 241 242 typedef BOOL (*getVisibleChildrenFP) (const long vmID, const AccessibleContext accessibleContext, 243 const int startIndex, VisibleChildrenInfo *children); 244 245 typedef BOOL (*setCaretPositionFP) (const long vmID, const AccessibleContext accessibleContext, const int position); 246 247 typedef BOOL (*getCaretLocationFP) (long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index); 248 249 typedef int (*getEventsWaitingFP) (); 250 251 typedef struct AccessBridgeFPsTag { 252 Windows_runFP Windows_run; 253 254 SetPropertyChangeFP SetPropertyChange; 255 256 SetJavaShutdownFP SetJavaShutdown; 257 SetFocusGainedFP SetFocusGained; 258 SetFocusLostFP SetFocusLost; 259 260 SetCaretUpdateFP SetCaretUpdate; 261 262 SetMouseClickedFP SetMouseClicked; 263 SetMouseEnteredFP SetMouseEntered; 264 SetMouseExitedFP SetMouseExited; 265 SetMousePressedFP SetMousePressed; 266 SetMouseReleasedFP SetMouseReleased; 267 268 SetMenuCanceledFP SetMenuCanceled; 269 SetMenuDeselectedFP SetMenuDeselected; 270 SetMenuSelectedFP SetMenuSelected; 271 SetPopupMenuCanceledFP SetPopupMenuCanceled; 272 SetPopupMenuWillBecomeInvisibleFP SetPopupMenuWillBecomeInvisible; 273 SetPopupMenuWillBecomeVisibleFP SetPopupMenuWillBecomeVisible; 274 275 SetPropertyNameChangeFP SetPropertyNameChange; 276 SetPropertyDescriptionChangeFP SetPropertyDescriptionChange; 277 SetPropertyStateChangeFP SetPropertyStateChange; 278 SetPropertyValueChangeFP SetPropertyValueChange; 279 SetPropertySelectionChangeFP SetPropertySelectionChange; 280 SetPropertyTextChangeFP SetPropertyTextChange; 281 SetPropertyCaretChangeFP SetPropertyCaretChange; 282 SetPropertyVisibleDataChangeFP SetPropertyVisibleDataChange; 283 SetPropertyChildChangeFP SetPropertyChildChange; 284 SetPropertyActiveDescendentChangeFP SetPropertyActiveDescendentChange; 285 286 SetPropertyTableModelChangeFP SetPropertyTableModelChange; 287 288 ReleaseJavaObjectFP ReleaseJavaObject; 289 GetVersionInfoFP GetVersionInfo; 290 291 IsJavaWindowFP IsJavaWindow; 292 IsSameObjectFP IsSameObject; 293 GetAccessibleContextFromHWNDFP GetAccessibleContextFromHWND; 294 getHWNDFromAccessibleContextFP getHWNDFromAccessibleContext; 295 296 GetAccessibleContextAtFP GetAccessibleContextAt; 297 GetAccessibleContextWithFocusFP GetAccessibleContextWithFocus; 298 GetAccessibleContextInfoFP GetAccessibleContextInfo; 299 GetAccessibleChildFromContextFP GetAccessibleChildFromContext; 300 GetAccessibleParentFromContextFP GetAccessibleParentFromContext; 301 302 getAccessibleTableInfoFP getAccessibleTableInfo; 303 getAccessibleTableCellInfoFP getAccessibleTableCellInfo; 304 305 getAccessibleTableRowHeaderFP getAccessibleTableRowHeader; 306 getAccessibleTableColumnHeaderFP getAccessibleTableColumnHeader; 307 308 getAccessibleTableRowDescriptionFP getAccessibleTableRowDescription; 309 getAccessibleTableColumnDescriptionFP getAccessibleTableColumnDescription; 310 311 getAccessibleTableRowSelectionCountFP getAccessibleTableRowSelectionCount; 312 isAccessibleTableRowSelectedFP isAccessibleTableRowSelected; 313 getAccessibleTableRowSelectionsFP getAccessibleTableRowSelections; 314 315 getAccessibleTableColumnSelectionCountFP getAccessibleTableColumnSelectionCount; 316 isAccessibleTableColumnSelectedFP isAccessibleTableColumnSelected; 317 getAccessibleTableColumnSelectionsFP getAccessibleTableColumnSelections; 318 319 getAccessibleTableRowFP getAccessibleTableRow; 320 getAccessibleTableColumnFP getAccessibleTableColumn; 321 getAccessibleTableIndexFP getAccessibleTableIndex; 322 323 getAccessibleRelationSetFP getAccessibleRelationSet; 324 325 getAccessibleHypertextFP getAccessibleHypertext; 326 activateAccessibleHyperlinkFP activateAccessibleHyperlink; 327 getAccessibleHyperlinkCountFP getAccessibleHyperlinkCount; 328 getAccessibleHypertextExtFP getAccessibleHypertextExt; 329 getAccessibleHypertextLinkIndexFP getAccessibleHypertextLinkIndex; 330 getAccessibleHyperlinkFP getAccessibleHyperlink; 331 332 getAccessibleKeyBindingsFP getAccessibleKeyBindings; 333 getAccessibleIconsFP getAccessibleIcons; 334 getAccessibleActionsFP getAccessibleActions; 335 doAccessibleActionsFP doAccessibleActions; 336 337 GetAccessibleTextInfoFP GetAccessibleTextInfo; 338 GetAccessibleTextItemsFP GetAccessibleTextItems; 339 GetAccessibleTextSelectionInfoFP GetAccessibleTextSelectionInfo; 340 GetAccessibleTextAttributesFP GetAccessibleTextAttributes; 341 GetAccessibleTextRectFP GetAccessibleTextRect; 342 GetAccessibleTextLineBoundsFP GetAccessibleTextLineBounds; 343 GetAccessibleTextRangeFP GetAccessibleTextRange; 344 345 GetCurrentAccessibleValueFromContextFP GetCurrentAccessibleValueFromContext; 346 GetMaximumAccessibleValueFromContextFP GetMaximumAccessibleValueFromContext; 347 GetMinimumAccessibleValueFromContextFP GetMinimumAccessibleValueFromContext; 348 349 AddAccessibleSelectionFromContextFP AddAccessibleSelectionFromContext; 350 ClearAccessibleSelectionFromContextFP ClearAccessibleSelectionFromContext; 351 GetAccessibleSelectionFromContextFP GetAccessibleSelectionFromContext; 352 GetAccessibleSelectionCountFromContextFP GetAccessibleSelectionCountFromContext; 353 IsAccessibleChildSelectedFromContextFP IsAccessibleChildSelectedFromContext; 354 RemoveAccessibleSelectionFromContextFP RemoveAccessibleSelectionFromContext; 355 SelectAllAccessibleSelectionFromContextFP SelectAllAccessibleSelectionFromContext; 356 357 setTextContentsFP setTextContents; 358 getParentWithRoleFP getParentWithRole; 359 getTopLevelObjectFP getTopLevelObject; 360 getParentWithRoleElseRootFP getParentWithRoleElseRoot; 361 getObjectDepthFP getObjectDepth; 362 getActiveDescendentFP getActiveDescendent; 363 364 getVirtualAccessibleNameFP getVirtualAccessibleName; 365 requestFocusFP requestFocus; 366 selectTextRangeFP selectTextRange; 367 getTextAttributesInRangeFP getTextAttributesInRange; 368 getVisibleChildrenCountFP getVisibleChildrenCount; 369 getVisibleChildrenFP getVisibleChildren; 370 setCaretPositionFP setCaretPosition; 371 getCaretLocationFP getCaretLocation; 372 373 getEventsWaitingFP getEventsWaiting; 374 375 } AccessBridgeFPs; 376 377 378 /** 379 * Initialize the world 380 */ 381 BOOL initializeAccessBridge(); 382 BOOL shutdownAccessBridge(); 383 384 /** 385 * Window routines 386 */ 387 BOOL IsJavaWindow(HWND window); 388 389 // Returns the virtual machine ID and AccessibleContext for a top-level window 390 BOOL GetAccessibleContextFromHWND(HWND target, long *vmID, AccessibleContext *ac); 391 392 // Returns the HWND from the AccessibleContext of a top-level window 393 HWND getHWNDFromAccessibleContext(long vmID, AccessibleContext ac); 394 395 396 /** 397 * Event handling routines 398 */ 399 void SetJavaShutdown(AccessBridge_JavaShutdownFP fp); 400 void SetFocusGained(AccessBridge_FocusGainedFP fp); 401 void SetFocusLost(AccessBridge_FocusLostFP fp); 402 403 void SetCaretUpdate(AccessBridge_CaretUpdateFP fp); 404 405 void SetMouseClicked(AccessBridge_MouseClickedFP fp); 406 void SetMouseEntered(AccessBridge_MouseEnteredFP fp); 407 void SetMouseExited(AccessBridge_MouseExitedFP fp); 408 void SetMousePressed(AccessBridge_MousePressedFP fp); 409 void SetMouseReleased(AccessBridge_MouseReleasedFP fp); 410 411 void SetMenuCanceled(AccessBridge_MenuCanceledFP fp); 412 void SetMenuDeselected(AccessBridge_MenuDeselectedFP fp); 413 void SetMenuSelected(AccessBridge_MenuSelectedFP fp); 414 void SetPopupMenuCanceled(AccessBridge_PopupMenuCanceledFP fp); 415 void SetPopupMenuWillBecomeInvisible(AccessBridge_PopupMenuWillBecomeInvisibleFP fp); 416 void SetPopupMenuWillBecomeVisible(AccessBridge_PopupMenuWillBecomeVisibleFP fp); 417 418 void SetPropertyNameChange(AccessBridge_PropertyNameChangeFP fp); 419 void SetPropertyDescriptionChange(AccessBridge_PropertyDescriptionChangeFP fp); 420 void SetPropertyStateChange(AccessBridge_PropertyStateChangeFP fp); 421 void SetPropertyValueChange(AccessBridge_PropertyValueChangeFP fp); 422 void SetPropertySelectionChange(AccessBridge_PropertySelectionChangeFP fp); 423 void SetPropertyTextChange(AccessBridge_PropertyTextChangeFP fp); 424 void SetPropertyCaretChange(AccessBridge_PropertyCaretChangeFP fp); 425 void SetPropertyVisibleDataChange(AccessBridge_PropertyVisibleDataChangeFP fp); 426 void SetPropertyChildChange(AccessBridge_PropertyChildChangeFP fp); 427 void SetPropertyActiveDescendentChange(AccessBridge_PropertyActiveDescendentChangeFP fp); 428 429 void SetPropertyTableModelChange(AccessBridge_PropertyTableModelChangeFP fp); 430 431 432 /** 433 * General routines 434 */ 435 void ReleaseJavaObject(long vmID, Java_Object object); 436 BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info); 437 HWND GetHWNDFromAccessibleContext(long vmID, JOBJECT64 accesibleContext); 438 439 /** 440 * Accessible Context routines 441 */ 442 BOOL GetAccessibleContextAt(long vmID, AccessibleContext acParent, 443 jint x, jint y, AccessibleContext *ac); 444 BOOL GetAccessibleContextWithFocus(HWND window, long *vmID, AccessibleContext *ac); 445 BOOL GetAccessibleContextInfo(long vmID, AccessibleContext ac, AccessibleContextInfo *info); 446 AccessibleContext GetAccessibleChildFromContext(long vmID, AccessibleContext ac, jint index); 447 AccessibleContext GetAccessibleParentFromContext(long vmID, AccessibleContext ac); 448 449 /** 450 * Accessible Text routines 451 */ 452 BOOL GetAccessibleTextInfo(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y); 453 BOOL GetAccessibleTextItems(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index); 454 BOOL GetAccessibleTextSelectionInfo(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection); 455 BOOL GetAccessibleTextAttributes(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes); 456 BOOL GetAccessibleTextRect(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index); 457 BOOL GetAccessibleTextLineBounds(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex); 458 BOOL GetAccessibleTextRange(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len); 459 460 /* begin AccessibleTable routines */ 461 BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo); 462 463 BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable, jint row, jint column, 464 AccessibleTableCellInfo *tableCellInfo); 465 466 BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo); 467 BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo); 468 469 AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row); 470 AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column); 471 472 jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table); 473 BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row); 474 BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections); 475 476 jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table); 477 BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column); 478 BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections); 479 480 jint getAccessibleTableRow(long vmID, AccessibleTable table, jint index); 481 jint getAccessibleTableColumn(long vmID, AccessibleTable table, jint index); 482 jint getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column); 483 /* end AccessibleTable */ 484 485 /* ----- AccessibleRelationSet routines */ 486 BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext, 487 AccessibleRelationSetInfo *relationSetInfo); 488 489 /* ----- AccessibleHypertext routines */ 490 491 /* 492 * Returns hypertext information associated with a component. 493 */ 494 BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext, 495 AccessibleHypertextInfo *hypertextInfo); 496 497 /* 498 * Requests that a hyperlink be activated. 499 */ 500 BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext, 501 AccessibleHyperlink accessibleHyperlink); 502 503 /* 504 * Returns the number of hyperlinks in a component 505 * Maps to AccessibleHypertext.getLinkCount. 506 * Returns -1 on error. 507 */ 508 jint getAccessibleHyperlinkCount(const long vmID, 509 const AccessibleHypertext hypertext); 510 511 /* 512 * This method is used to iterate through the hyperlinks in a component. It 513 * returns hypertext information for a component starting at hyperlink index 514 * nStartIndex. No more than MAX_HYPERLINKS AccessibleHypertextInfo objects will 515 * be returned for each call to this method. 516 * Returns FALSE on error. 517 */ 518 BOOL getAccessibleHypertextExt(const long vmID, 519 const AccessibleContext accessibleContext, 520 const jint nStartIndex, 521 /* OUT */ AccessibleHypertextInfo *hypertextInfo); 522 523 /* 524 * Returns the index into an array of hyperlinks that is associated with 525 * a character index in document; maps to AccessibleHypertext.getLinkIndex 526 * Returns -1 on error. 527 */ 528 jint getAccessibleHypertextLinkIndex(const long vmID, 529 const AccessibleHypertext hypertext, 530 const jint nIndex); 531 532 /* 533 * Returns the nth hyperlink in a document 534 * Maps to AccessibleHypertext.getLink. 535 * Returns FALSE on error 536 */ 537 BOOL getAccessibleHyperlink(const long vmID, 538 const AccessibleHypertext hypertext, 539 const jint nIndex, 540 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo); 541 542 /* Accessible KeyBindings, Icons and Actions */ 543 544 /* 545 * Returns a list of key bindings associated with a component. 546 */ 547 BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext, 548 AccessibleKeyBindings *keyBindings); 549 550 /* 551 * Returns a list of icons associate with a component. 552 */ 553 BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext, 554 AccessibleIcons *icons); 555 556 /* 557 * Returns a list of actions that a component can perform. 558 */ 559 BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, 560 AccessibleActions *actions); 561 562 /* 563 * Request that a list of AccessibleActions be performed by a component. 564 * Returns TRUE if all actions are performed. Returns FALSE 565 * when the first requested action fails in which case "failure" 566 * contains the index of the action that failed. 567 */ 568 BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext, 569 AccessibleActionsToDo *actionsToDo, jint *failure); 570 571 572 573 /* Additional utility methods */ 574 575 /* 576 * Returns whether two object references refer to the same object. 577 */ 578 BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2); 579 580 /** 581 * Sets editable text contents. The AccessibleContext must implement AccessibleEditableText and 582 * be editable. The maximum text length that can be set is MAX_STRING_SIZE - 1. 583 * Returns whether successful 584 */ 585 BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text); 586 587 /** 588 * Returns the Accessible Context with the specified role that is the 589 * ancestor of a given object. The role is one of the role strings 590 * defined in AccessBridgePackages.h 591 * If there is no ancestor object that has the specified role, 592 * returns (AccessibleContext)0. 593 */ 594 AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, 595 const wchar_t *role); 596 597 /** 598 * Returns the Accessible Context with the specified role that is the 599 * ancestor of a given object. The role is one of the role strings 600 * defined in AccessBridgePackages.h. If an object with the specified 601 * role does not exist, returns the top level object for the Java Window. 602 * Returns (AccessibleContext)0 on error. 603 */ 604 AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, 605 const wchar_t *role); 606 607 /** 608 * Returns the Accessible Context for the top level object in 609 * a Java Window. This is same Accessible Context that is obtained 610 * from GetAccessibleContextFromHWND for that window. Returns 611 * (AccessibleContext)0 on error. 612 */ 613 AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext); 614 615 /** 616 * Returns how deep in the object hierarchy a given object is. 617 * The top most object in the object hierarchy has an object depth of 0. 618 * Returns -1 on error. 619 */ 620 int getObjectDepth (const long vmID, const AccessibleContext accessibleContext); 621 622 /** 623 * Returns the Accessible Context of the current ActiveDescendent of an object. 624 * This method assumes the ActiveDescendent is the component that is currently 625 * selected in a container object. 626 * Returns (AccessibleContext)0 on error or if there is no selection. 627 */ 628 AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext); 629 630 /** 631 * Accessible Value routines 632 */ 633 BOOL GetCurrentAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len); 634 BOOL GetMaximumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len); 635 BOOL GetMinimumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len); 636 637 /** 638 * Accessible Selection routines 639 */ 640 void AddAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i); 641 void ClearAccessibleSelectionFromContext(long vmID, AccessibleSelection as); 642 JOBJECT64 GetAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i); 643 int GetAccessibleSelectionCountFromContext(long vmID, AccessibleSelection as); 644 BOOL IsAccessibleChildSelectedFromContext(long vmID, AccessibleSelection as, int i); 645 void RemoveAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i); 646 void SelectAllAccessibleSelectionFromContext(long vmID, AccessibleSelection as); 647 648 /** 649 * Additional methods for Teton 650 */ 651 652 /** 653 * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns 654 * whether successful. 655 * 656 * Bug ID 4916682 - Implement JAWS AccessibleName policy 657 */ 658 BOOL getVirtualAccessibleName(const long vmID, const AccessibleContext accessibleContext, 659 wchar_t *name, int len); 660 661 /** 662 * Request focus for a component. Returns whether successful. 663 * 664 * Bug ID 4944757 - requestFocus method needed 665 */ 666 BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext); 667 668 /** 669 * Selects text between two indices. Selection includes the text at the start index 670 * and the text at the end index. Returns whether successful. 671 * 672 * Bug ID 4944758 - selectTextRange method needed 673 */ 674 BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext, const int startIndex, 675 const int endIndex); 676 677 /** 678 * Get text attributes between two indices. The attribute list includes the text at the 679 * start index and the text at the end index. Returns whether successful; 680 * 681 * Bug ID 4944761 - getTextAttributes between two indices method needed 682 */ 683 BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext, 684 const int startIndex, const int endIndex, 685 AccessibleTextAttributesInfo *attributes, short *len); 686 687 /** 688 * Returns the number of visible children of a component. Returns -1 on error. 689 * 690 * Bug ID 4944762- getVisibleChildren for list-like components needed 691 */ 692 int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext); 693 694 /** 695 * Gets the visible children of an AccessibleContext. Returns whether successful. 696 * 697 * Bug ID 4944762- getVisibleChildren for list-like components needed 698 */ 699 BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext, 700 const int startIndex, 701 VisibleChildrenInfo *visibleChildrenInfo); 702 703 /** 704 * Set the caret to a text position. Returns whether successful. 705 * 706 * Bug ID 4944770 - setCaretPosition method needed 707 */ 708 BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext, 709 const int position); 710 711 /** 712 * Gets the text caret location 713 */ 714 BOOL getCaretLocation(long vmID, AccessibleContext ac, 715 AccessibleTextRectInfo *rectInfo, jint index); 716 717 /** 718 * Gets the number of events waiting to fire 719 */ 720 int getEventsWaiting(); 721 722 #ifdef __cplusplus 723 } 724 #endif 725