1 /* 2 * Copyright (c) 2005, 2015, 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 /* 27 * @(#)AccessBridgeCalls.c 1.25 05/08/22 28 */ 29 30 /* 31 * Wrapper functions around calls to the AccessBridge DLL 32 */ 33 34 35 #include <windows.h> 36 #include <jni.h> 37 38 39 //#define ACCESSBRIDGE_32 40 //#define ACCESSBRIDGE_64 41 42 #include "AccessBridgeCalls.h" 43 #include "AccessBridgeDebug.h" 44 45 #ifdef __cplusplus 46 extern "C" { 47 #endif 48 49 HINSTANCE theAccessBridgeInstance; 50 AccessBridgeFPs theAccessBridge; 51 52 BOOL theAccessBridgeInitializedFlag = FALSE; 53 54 #define LOAD_FP(result, type, name) \ 55 PrintDebugString("LOAD_FP loading: %s ...", name); \ 56 if ((theAccessBridge.result = \ 57 (type) GetProcAddress(theAccessBridgeInstance, name)) == (type) 0) { \ 58 PrintDebugString("LOAD_FP failed: %s", name); \ 59 return FALSE; \ 60 } 61 62 BOOL initializeAccessBridge() { 63 64 #ifdef ACCESSBRIDGE_ARCH_32 // For 32bit AT new bridge 65 theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-32"); 66 #else 67 #ifdef ACCESSBRIDGE_ARCH_64 // For 64bit AT new bridge 68 theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-64"); 69 #else // legacy 70 theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE"); 71 #endif 72 #endif 73 if (theAccessBridgeInstance != 0) { 74 LOAD_FP(Windows_run, Windows_runFP, "Windows_run"); 75 76 LOAD_FP(SetJavaShutdown, SetJavaShutdownFP, "setJavaShutdownFP"); 77 LOAD_FP(SetFocusGained, SetFocusGainedFP, "setFocusGainedFP"); 78 LOAD_FP(SetFocusLost, SetFocusLostFP, "setFocusLostFP"); 79 80 LOAD_FP(SetCaretUpdate, SetCaretUpdateFP, "setCaretUpdateFP"); 81 82 LOAD_FP(SetMouseClicked, SetMouseClickedFP, "setMouseClickedFP"); 83 LOAD_FP(SetMouseEntered, SetMouseEnteredFP, "setMouseEnteredFP"); 84 LOAD_FP(SetMouseExited, SetMouseExitedFP, "setMouseExitedFP"); 85 LOAD_FP(SetMousePressed, SetMousePressedFP, "setMousePressedFP"); 86 LOAD_FP(SetMouseReleased, SetMouseReleasedFP, "setMouseReleasedFP"); 87 88 LOAD_FP(SetMenuCanceled, SetMenuCanceledFP, "setMenuCanceledFP"); 89 LOAD_FP(SetMenuDeselected, SetMenuDeselectedFP, "setMenuDeselectedFP"); 90 LOAD_FP(SetMenuSelected, SetMenuSelectedFP, "setMenuSelectedFP"); 91 LOAD_FP(SetPopupMenuCanceled, SetPopupMenuCanceledFP, "setPopupMenuCanceledFP"); 92 LOAD_FP(SetPopupMenuWillBecomeInvisible, SetPopupMenuWillBecomeInvisibleFP, "setPopupMenuWillBecomeInvisibleFP"); 93 LOAD_FP(SetPopupMenuWillBecomeVisible, SetPopupMenuWillBecomeVisibleFP, "setPopupMenuWillBecomeVisibleFP"); 94 95 LOAD_FP(SetPropertyNameChange, SetPropertyNameChangeFP, "setPropertyNameChangeFP"); 96 LOAD_FP(SetPropertyDescriptionChange, SetPropertyDescriptionChangeFP, "setPropertyDescriptionChangeFP"); 97 LOAD_FP(SetPropertyStateChange, SetPropertyStateChangeFP, "setPropertyStateChangeFP"); 98 LOAD_FP(SetPropertyValueChange, SetPropertyValueChangeFP, "setPropertyValueChangeFP"); 99 LOAD_FP(SetPropertySelectionChange, SetPropertySelectionChangeFP, "setPropertySelectionChangeFP"); 100 LOAD_FP(SetPropertyTextChange, SetPropertyTextChangeFP, "setPropertyTextChangeFP"); 101 LOAD_FP(SetPropertyCaretChange, SetPropertyCaretChangeFP, "setPropertyCaretChangeFP"); 102 LOAD_FP(SetPropertyVisibleDataChange, SetPropertyVisibleDataChangeFP, "setPropertyVisibleDataChangeFP"); 103 LOAD_FP(SetPropertyChildChange, SetPropertyChildChangeFP, "setPropertyChildChangeFP"); 104 LOAD_FP(SetPropertyActiveDescendentChange, SetPropertyActiveDescendentChangeFP, "setPropertyActiveDescendentChangeFP"); 105 106 LOAD_FP(SetPropertyTableModelChange, SetPropertyTableModelChangeFP, "setPropertyTableModelChangeFP"); 107 108 LOAD_FP(ReleaseJavaObject, ReleaseJavaObjectFP, "releaseJavaObject"); 109 LOAD_FP(GetVersionInfo, GetVersionInfoFP, "getVersionInfo"); 110 111 LOAD_FP(IsJavaWindow, IsJavaWindowFP, "isJavaWindow"); 112 LOAD_FP(IsSameObject, IsSameObjectFP, "isSameObject"); 113 LOAD_FP(GetAccessibleContextFromHWND, GetAccessibleContextFromHWNDFP, "getAccessibleContextFromHWND"); 114 LOAD_FP(getHWNDFromAccessibleContext, getHWNDFromAccessibleContextFP, "getHWNDFromAccessibleContext"); 115 116 LOAD_FP(GetAccessibleContextAt, GetAccessibleContextAtFP, "getAccessibleContextAt"); 117 LOAD_FP(GetAccessibleContextWithFocus, GetAccessibleContextWithFocusFP, "getAccessibleContextWithFocus"); 118 LOAD_FP(GetAccessibleContextInfo, GetAccessibleContextInfoFP, "getAccessibleContextInfo"); 119 LOAD_FP(GetAccessibleChildFromContext, GetAccessibleChildFromContextFP, "getAccessibleChildFromContext"); 120 LOAD_FP(GetAccessibleParentFromContext, GetAccessibleParentFromContextFP, "getAccessibleParentFromContext"); 121 122 /* begin AccessibleTable */ 123 LOAD_FP(getAccessibleTableInfo, getAccessibleTableInfoFP, "getAccessibleTableInfo"); 124 LOAD_FP(getAccessibleTableCellInfo, getAccessibleTableCellInfoFP, "getAccessibleTableCellInfo"); 125 126 LOAD_FP(getAccessibleTableRowHeader, getAccessibleTableRowHeaderFP, "getAccessibleTableRowHeader"); 127 LOAD_FP(getAccessibleTableColumnHeader, getAccessibleTableColumnHeaderFP, "getAccessibleTableColumnHeader"); 128 129 LOAD_FP(getAccessibleTableRowDescription, getAccessibleTableRowDescriptionFP, "getAccessibleTableRowDescription"); 130 LOAD_FP(getAccessibleTableColumnDescription, getAccessibleTableColumnDescriptionFP, "getAccessibleTableColumnDescription"); 131 132 LOAD_FP(getAccessibleTableRowSelectionCount, getAccessibleTableRowSelectionCountFP, 133 "getAccessibleTableRowSelectionCount"); 134 LOAD_FP(isAccessibleTableRowSelected, isAccessibleTableRowSelectedFP, 135 "isAccessibleTableRowSelected"); 136 LOAD_FP(getAccessibleTableRowSelections, getAccessibleTableRowSelectionsFP, 137 "getAccessibleTableRowSelections"); 138 139 LOAD_FP(getAccessibleTableColumnSelectionCount, getAccessibleTableColumnSelectionCountFP, 140 "getAccessibleTableColumnSelectionCount"); 141 LOAD_FP(isAccessibleTableColumnSelected, isAccessibleTableColumnSelectedFP, 142 "isAccessibleTableColumnSelected"); 143 LOAD_FP(getAccessibleTableColumnSelections, getAccessibleTableColumnSelectionsFP, 144 "getAccessibleTableColumnSelections"); 145 146 LOAD_FP(getAccessibleTableRow, getAccessibleTableRowFP, 147 "getAccessibleTableRow"); 148 LOAD_FP(getAccessibleTableColumn, getAccessibleTableColumnFP, 149 "getAccessibleTableColumn"); 150 LOAD_FP(getAccessibleTableIndex, getAccessibleTableIndexFP, 151 "getAccessibleTableIndex"); 152 153 /* end AccessibleTable */ 154 155 /* AccessibleRelationSet */ 156 LOAD_FP(getAccessibleRelationSet, getAccessibleRelationSetFP, "getAccessibleRelationSet"); 157 158 /* AccessibleHypertext */ 159 LOAD_FP(getAccessibleHypertext, getAccessibleHypertextFP, "getAccessibleHypertext"); 160 LOAD_FP(activateAccessibleHyperlink, activateAccessibleHyperlinkFP, "activateAccessibleHyperlink"); 161 LOAD_FP(getAccessibleHyperlinkCount, getAccessibleHyperlinkCountFP, "getAccessibleHyperlinkCount"); 162 LOAD_FP(getAccessibleHypertextExt, getAccessibleHypertextExtFP, "getAccessibleHypertextExt"); 163 LOAD_FP(getAccessibleHypertextLinkIndex, getAccessibleHypertextLinkIndexFP, "getAccessibleHypertextLinkIndex"); 164 LOAD_FP(getAccessibleHyperlink, getAccessibleHyperlinkFP, "getAccessibleHyperlink"); 165 166 /* Accessible KeyBinding, Icon and Action */ 167 LOAD_FP(getAccessibleKeyBindings, getAccessibleKeyBindingsFP, "getAccessibleKeyBindings"); 168 LOAD_FP(getAccessibleIcons, getAccessibleIconsFP, "getAccessibleIcons"); 169 LOAD_FP(getAccessibleActions, getAccessibleActionsFP, "getAccessibleActions"); 170 LOAD_FP(doAccessibleActions, doAccessibleActionsFP, "doAccessibleActions"); 171 172 /* AccessibleText */ 173 LOAD_FP(GetAccessibleTextInfo, GetAccessibleTextInfoFP, "getAccessibleTextInfo"); 174 LOAD_FP(GetAccessibleTextItems, GetAccessibleTextItemsFP, "getAccessibleTextItems"); 175 LOAD_FP(GetAccessibleTextSelectionInfo, GetAccessibleTextSelectionInfoFP, "getAccessibleTextSelectionInfo"); 176 LOAD_FP(GetAccessibleTextAttributes, GetAccessibleTextAttributesFP, "getAccessibleTextAttributes"); 177 LOAD_FP(GetAccessibleTextRect, GetAccessibleTextRectFP, "getAccessibleTextRect"); 178 LOAD_FP(GetAccessibleTextLineBounds, GetAccessibleTextLineBoundsFP, "getAccessibleTextLineBounds"); 179 LOAD_FP(GetAccessibleTextRange, GetAccessibleTextRangeFP, "getAccessibleTextRange"); 180 181 LOAD_FP(GetCurrentAccessibleValueFromContext, GetCurrentAccessibleValueFromContextFP, "getCurrentAccessibleValueFromContext"); 182 LOAD_FP(GetMaximumAccessibleValueFromContext, GetMaximumAccessibleValueFromContextFP, "getMaximumAccessibleValueFromContext"); 183 LOAD_FP(GetMinimumAccessibleValueFromContext, GetMinimumAccessibleValueFromContextFP, "getMinimumAccessibleValueFromContext"); 184 185 LOAD_FP(AddAccessibleSelectionFromContext, AddAccessibleSelectionFromContextFP, "addAccessibleSelectionFromContext"); 186 LOAD_FP(ClearAccessibleSelectionFromContext, ClearAccessibleSelectionFromContextFP, "clearAccessibleSelectionFromContext"); 187 LOAD_FP(GetAccessibleSelectionFromContext, GetAccessibleSelectionFromContextFP, "getAccessibleSelectionFromContext"); 188 LOAD_FP(GetAccessibleSelectionCountFromContext, GetAccessibleSelectionCountFromContextFP, "getAccessibleSelectionCountFromContext"); 189 LOAD_FP(IsAccessibleChildSelectedFromContext, IsAccessibleChildSelectedFromContextFP, "isAccessibleChildSelectedFromContext"); 190 LOAD_FP(RemoveAccessibleSelectionFromContext, RemoveAccessibleSelectionFromContextFP, "removeAccessibleSelectionFromContext"); 191 LOAD_FP(SelectAllAccessibleSelectionFromContext, SelectAllAccessibleSelectionFromContextFP, "selectAllAccessibleSelectionFromContext"); 192 193 LOAD_FP(setTextContents, setTextContentsFP, "setTextContents"); 194 LOAD_FP(getParentWithRole, getParentWithRoleFP, "getParentWithRole"); 195 LOAD_FP(getTopLevelObject, getTopLevelObjectFP, "getTopLevelObject"); 196 LOAD_FP(getParentWithRoleElseRoot, getParentWithRoleElseRootFP, "getParentWithRoleElseRoot"); 197 LOAD_FP(getObjectDepth, getObjectDepthFP, "getObjectDepth"); 198 LOAD_FP(getActiveDescendent, getActiveDescendentFP, "getActiveDescendent"); 199 200 // additional methods for Teton 201 LOAD_FP(getVirtualAccessibleName, getVirtualAccessibleNameFP, "getVirtualAccessibleName"); 202 LOAD_FP(requestFocus, requestFocusFP, "requestFocus"); 203 LOAD_FP(selectTextRange, selectTextRangeFP, "selectTextRange"); 204 LOAD_FP(getTextAttributesInRange, getTextAttributesInRangeFP, "getTextAttributesInRange"); 205 LOAD_FP(getVisibleChildrenCount, getVisibleChildrenCountFP, "getVisibleChildrenCount"); 206 LOAD_FP(getVisibleChildren, getVisibleChildrenFP, "getVisibleChildren"); 207 LOAD_FP(setCaretPosition, setCaretPositionFP, "setCaretPosition"); 208 LOAD_FP(getCaretLocation, getCaretLocationFP, "getCaretLocation"); 209 210 LOAD_FP(getEventsWaiting, getEventsWaitingFP, "getEventsWaiting"); 211 212 theAccessBridge.Windows_run(); 213 214 theAccessBridgeInitializedFlag = TRUE; 215 PrintDebugString("theAccessBridgeInitializedFlag = TRUE"); 216 return TRUE; 217 } else { 218 return FALSE; 219 } 220 } 221 222 223 BOOL shutdownAccessBridge() { 224 BOOL result; 225 DWORD error; 226 theAccessBridgeInitializedFlag = FALSE; 227 if (theAccessBridgeInstance != (HANDLE) 0) { 228 result = FreeLibrary(theAccessBridgeInstance); 229 if (result != TRUE) { 230 error = GetLastError(); 231 } 232 return TRUE; 233 } 234 return FALSE; 235 } 236 237 238 void SetJavaShutdown(AccessBridge_JavaShutdownFP fp) { 239 if (theAccessBridgeInitializedFlag == TRUE) { 240 theAccessBridge.SetJavaShutdown(fp); 241 } 242 } 243 244 void SetFocusGained(AccessBridge_FocusGainedFP fp) { 245 if (theAccessBridgeInitializedFlag == TRUE) { 246 theAccessBridge.SetFocusGained(fp); 247 } 248 } 249 250 void SetFocusLost(AccessBridge_FocusLostFP fp) { 251 if (theAccessBridgeInitializedFlag == TRUE) { 252 theAccessBridge.SetFocusLost(fp); 253 } 254 } 255 256 257 void SetCaretUpdate(AccessBridge_CaretUpdateFP fp) { 258 if (theAccessBridgeInitializedFlag == TRUE) { 259 theAccessBridge.SetCaretUpdate(fp); 260 } 261 } 262 263 264 void SetMouseClicked(AccessBridge_MouseClickedFP fp) { 265 if (theAccessBridgeInitializedFlag == TRUE) { 266 theAccessBridge.SetMouseClicked(fp); 267 } 268 } 269 270 void SetMouseEntered(AccessBridge_MouseEnteredFP fp) { 271 if (theAccessBridgeInitializedFlag == TRUE) { 272 theAccessBridge.SetMouseEntered(fp); 273 } 274 } 275 276 void SetMouseExited(AccessBridge_MouseExitedFP fp) { 277 if (theAccessBridgeInitializedFlag == TRUE) { 278 theAccessBridge.SetMouseExited(fp); 279 } 280 } 281 282 void SetMousePressed(AccessBridge_MousePressedFP fp) { 283 if (theAccessBridgeInitializedFlag == TRUE) { 284 theAccessBridge.SetMousePressed(fp); 285 } 286 } 287 288 void SetMouseReleased(AccessBridge_MouseReleasedFP fp) { 289 if (theAccessBridgeInitializedFlag == TRUE) { 290 theAccessBridge.SetMouseReleased(fp); 291 } 292 } 293 294 295 void SetMenuCanceled(AccessBridge_MenuCanceledFP fp) { 296 if (theAccessBridgeInitializedFlag == TRUE) { 297 theAccessBridge.SetMenuCanceled(fp); 298 } 299 } 300 301 void SetMenuDeselected(AccessBridge_MenuDeselectedFP fp) { 302 if (theAccessBridgeInitializedFlag == TRUE) { 303 theAccessBridge.SetMenuDeselected(fp); 304 } 305 } 306 307 void SetMenuSelected(AccessBridge_MenuSelectedFP fp) { 308 if (theAccessBridgeInitializedFlag == TRUE) { 309 theAccessBridge.SetMenuSelected(fp); 310 } 311 } 312 313 void SetPopupMenuCanceled(AccessBridge_PopupMenuCanceledFP fp) { 314 if (theAccessBridgeInitializedFlag == TRUE) { 315 theAccessBridge.SetPopupMenuCanceled(fp); 316 } 317 } 318 319 void SetPopupMenuWillBecomeInvisible(AccessBridge_PopupMenuWillBecomeInvisibleFP fp) { 320 if (theAccessBridgeInitializedFlag == TRUE) { 321 theAccessBridge.SetPopupMenuWillBecomeInvisible(fp); 322 } 323 } 324 325 void SetPopupMenuWillBecomeVisible(AccessBridge_PopupMenuWillBecomeVisibleFP fp) { 326 if (theAccessBridgeInitializedFlag == TRUE) { 327 theAccessBridge.SetPopupMenuWillBecomeVisible(fp); 328 } 329 } 330 331 332 void SetPropertyNameChange(AccessBridge_PropertyNameChangeFP fp) { 333 if (theAccessBridgeInitializedFlag == TRUE) { 334 theAccessBridge.SetPropertyNameChange(fp); 335 } 336 } 337 338 void SetPropertyDescriptionChange(AccessBridge_PropertyDescriptionChangeFP fp) { 339 if (theAccessBridgeInitializedFlag == TRUE) { 340 theAccessBridge.SetPropertyDescriptionChange(fp); 341 } 342 } 343 344 void SetPropertyStateChange(AccessBridge_PropertyStateChangeFP fp) { 345 if (theAccessBridgeInitializedFlag == TRUE) { 346 theAccessBridge.SetPropertyStateChange(fp); 347 } 348 } 349 350 void SetPropertyValueChange(AccessBridge_PropertyValueChangeFP fp) { 351 if (theAccessBridgeInitializedFlag == TRUE) { 352 theAccessBridge.SetPropertyValueChange(fp); 353 } 354 } 355 356 void SetPropertySelectionChange(AccessBridge_PropertySelectionChangeFP fp) { 357 if (theAccessBridgeInitializedFlag == TRUE) { 358 theAccessBridge.SetPropertySelectionChange(fp); 359 } 360 } 361 362 void SetPropertyTextChange(AccessBridge_PropertyTextChangeFP fp) { 363 if (theAccessBridgeInitializedFlag == TRUE) { 364 theAccessBridge.SetPropertyTextChange(fp); 365 } 366 } 367 368 void SetPropertyCaretChange(AccessBridge_PropertyCaretChangeFP fp) { 369 if (theAccessBridgeInitializedFlag == TRUE) { 370 theAccessBridge.SetPropertyCaretChange(fp); 371 } 372 } 373 374 void SetPropertyVisibleDataChange(AccessBridge_PropertyVisibleDataChangeFP fp) { 375 if (theAccessBridgeInitializedFlag == TRUE) { 376 theAccessBridge.SetPropertyVisibleDataChange(fp); 377 } 378 } 379 380 void SetPropertyChildChange(AccessBridge_PropertyChildChangeFP fp) { 381 if (theAccessBridgeInitializedFlag == TRUE) { 382 theAccessBridge.SetPropertyChildChange(fp); 383 } 384 } 385 386 void SetPropertyActiveDescendentChange(AccessBridge_PropertyActiveDescendentChangeFP fp) { 387 if (theAccessBridgeInitializedFlag == TRUE) { 388 theAccessBridge.SetPropertyActiveDescendentChange(fp); 389 } 390 } 391 392 void SetPropertyTableModelChange(AccessBridge_PropertyTableModelChangeFP fp) { 393 if (theAccessBridgeInitializedFlag == TRUE) { 394 theAccessBridge.SetPropertyTableModelChange(fp); 395 } 396 } 397 398 /** 399 * General routines 400 */ 401 void ReleaseJavaObject(long vmID, Java_Object object) { 402 if (theAccessBridgeInitializedFlag == TRUE) { 403 theAccessBridge.ReleaseJavaObject(vmID, object); 404 } 405 } 406 407 BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info) { 408 if (theAccessBridgeInitializedFlag == TRUE) { 409 return theAccessBridge.GetVersionInfo(vmID, info); 410 } 411 return FALSE; 412 } 413 414 415 /** 416 * Window routines 417 */ 418 BOOL IsJavaWindow(HWND window) { 419 if (theAccessBridgeInitializedFlag == TRUE) { 420 BOOL ret ; 421 ret = theAccessBridge.IsJavaWindow(window); 422 return ret ; 423 424 } 425 return FALSE; 426 } 427 428 429 /** 430 * Returns the virtual machine ID and AccessibleContext for a top-level window 431 */ 432 BOOL GetAccessibleContextFromHWND(HWND target, long *vmID, AccessibleContext *ac) { 433 if (theAccessBridgeInitializedFlag == TRUE) { 434 return theAccessBridge.GetAccessibleContextFromHWND(target, vmID, ac); 435 } 436 return FALSE; 437 } 438 439 /** 440 * Returns the HWND from the AccessibleContext of a top-level window. Returns 0 441 * on error or if the AccessibleContext does not refer to a top-level window. 442 */ 443 HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accesibleContext) { 444 if (theAccessBridgeInitializedFlag == TRUE) { 445 return theAccessBridge.getHWNDFromAccessibleContext(vmID, accesibleContext); 446 } 447 return (HWND)0; 448 } 449 450 /** 451 * returns whether two objects are the same 452 */ 453 BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) { 454 if (theAccessBridgeInitializedFlag == TRUE) { 455 return theAccessBridge.IsSameObject(vmID, obj1, obj2); 456 } 457 return FALSE; 458 } 459 460 /** 461 * Sets editable text contents. The AccessibleContext must implement AccessibleEditableText and 462 * be editable. The maximum text length is MAX_STRING_SIZE - 1. 463 * Returns whether successful 464 */ 465 BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text) { 466 467 if (theAccessBridgeInitializedFlag == TRUE) { 468 return theAccessBridge.setTextContents(vmID, accessibleContext, text); 469 } 470 return FALSE; 471 } 472 473 /** 474 * Returns the Accessible Context with the specified role that is the 475 * ancestor of a given object. The role is one of the role strings 476 * defined in AccessBridgePackages.h 477 * If there is no ancestor object that has the specified role, 478 * returns (AccessibleContext)0. 479 */ 480 AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, 481 const wchar_t *role) { 482 483 if (theAccessBridgeInitializedFlag == TRUE) { 484 return theAccessBridge.getParentWithRole(vmID, accessibleContext, role); 485 } 486 return (AccessibleContext)0; 487 } 488 489 /** 490 * Returns the Accessible Context with the specified role that is the 491 * ancestor of a given object. The role is one of the role strings 492 * defined in AccessBridgePackages.h. If an object with the specified 493 * role does not exist, returns the top level object for the Java Window. 494 * Returns (AccessibleContext)0 on error. 495 */ 496 AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, 497 const wchar_t *role) { 498 499 if (theAccessBridgeInitializedFlag == TRUE) { 500 return theAccessBridge.getParentWithRoleElseRoot(vmID, accessibleContext, role); 501 } 502 return (AccessibleContext)0; 503 } 504 505 /** 506 * Returns the Accessible Context for the top level object in 507 * a Java Window. This is same Accessible Context that is obtained 508 * from GetAccessibleContextFromHWND for that window. Returns 509 * (AccessibleContext)0 on error. 510 */ 511 AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext) { 512 513 if (theAccessBridgeInitializedFlag == TRUE) { 514 return theAccessBridge.getTopLevelObject(vmID, accessibleContext); 515 } 516 return (AccessibleContext)0; 517 } 518 519 /** 520 * Returns how deep in the object hierarchy a given object is. 521 * The top most object in the object hierarchy has an object depth of 0. 522 * Returns -1 on error. 523 */ 524 int getObjectDepth (const long vmID, const AccessibleContext accessibleContext) { 525 526 if (theAccessBridgeInitializedFlag == TRUE) { 527 return theAccessBridge.getObjectDepth(vmID, accessibleContext); 528 } 529 return -1; 530 } 531 532 /** 533 * Returns the Accessible Context of the current ActiveDescendent of an object. 534 * This method assumes the ActiveDescendent is the component that is currently 535 * selected in a container object. 536 * Returns (AccessibleContext)0 on error or if there is no selection. 537 */ 538 AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) { 539 540 if (theAccessBridgeInitializedFlag == TRUE) { 541 return theAccessBridge.getActiveDescendent(vmID, accessibleContext); 542 } 543 return (AccessibleContext)0; 544 } 545 546 547 /** 548 * Accessible Context routines 549 */ 550 BOOL GetAccessibleContextAt(long vmID, AccessibleContext acParent, 551 jint x, jint y, AccessibleContext *ac) { 552 if (theAccessBridgeInitializedFlag == TRUE) { 553 return theAccessBridge.GetAccessibleContextAt(vmID, acParent, x, y, ac); 554 } 555 return FALSE; 556 } 557 558 BOOL GetAccessibleContextWithFocus(HWND window, long *vmID, AccessibleContext *ac) { 559 if (theAccessBridgeInitializedFlag == TRUE) { 560 return theAccessBridge.GetAccessibleContextWithFocus(window, vmID, ac); 561 } 562 return FALSE; 563 } 564 565 BOOL GetAccessibleContextInfo(long vmID, AccessibleContext ac, AccessibleContextInfo *info) { 566 if (theAccessBridgeInitializedFlag == TRUE) { 567 return theAccessBridge.GetAccessibleContextInfo(vmID, ac, info); 568 } 569 return FALSE; 570 } 571 572 AccessibleContext GetAccessibleChildFromContext(long vmID, AccessibleContext ac, jint index) { 573 if (theAccessBridgeInitializedFlag == TRUE) { 574 return theAccessBridge.GetAccessibleChildFromContext(vmID, ac, index); 575 } 576 return (AccessibleContext) 0; 577 } 578 579 AccessibleContext GetAccessibleParentFromContext(long vmID, AccessibleContext ac) { 580 if (theAccessBridgeInitializedFlag == TRUE) { 581 return theAccessBridge.GetAccessibleParentFromContext(vmID, ac); 582 } 583 return (AccessibleContext) 0; 584 } 585 586 /* begin AccessibleTable routines */ 587 588 /* 589 * get information about an AccessibleTable 590 */ 591 BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { 592 if (theAccessBridgeInitializedFlag == TRUE) { 593 return theAccessBridge.getAccessibleTableInfo(vmID, acParent, tableInfo); 594 } 595 return FALSE; 596 } 597 598 /* 599 * get information about an AccessibleTable cell 600 */ 601 BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable, 602 jint row, jint column, AccessibleTableCellInfo *tableCellInfo) { 603 if (theAccessBridgeInitializedFlag == TRUE) { 604 return theAccessBridge.getAccessibleTableCellInfo(vmID, accessibleTable, row, column, tableCellInfo); 605 } 606 return FALSE; 607 } 608 609 /* 610 * get information about an AccessibleTable row header 611 */ 612 BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { 613 if (theAccessBridgeInitializedFlag == TRUE) { 614 return theAccessBridge.getAccessibleTableRowHeader(vmID, acParent, tableInfo); 615 } 616 return FALSE; 617 } 618 619 /* 620 * get information about an AccessibleTable column header 621 */ 622 BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { 623 624 if (theAccessBridgeInitializedFlag == TRUE) { 625 return theAccessBridge.getAccessibleTableColumnHeader(vmID, acParent, tableInfo); 626 } 627 return FALSE; 628 } 629 630 /* 631 * return a description of an AccessibleTable row header 632 */ 633 AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row) { 634 if (theAccessBridgeInitializedFlag == TRUE) { 635 return theAccessBridge.getAccessibleTableRowDescription(vmID, acParent, row); 636 } 637 return (AccessibleContext)0; 638 } 639 640 /* 641 * return a description of an AccessibleTable column header 642 */ 643 AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column) { 644 if (theAccessBridgeInitializedFlag == TRUE) { 645 return theAccessBridge.getAccessibleTableColumnDescription(vmID, acParent, column); 646 } 647 return (AccessibleContext)0; 648 } 649 650 /* 651 * return the number of rows selected in an AccessibleTable 652 */ 653 jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table) { 654 if (theAccessBridgeInitializedFlag == TRUE) { 655 return theAccessBridge.getAccessibleTableRowSelectionCount(vmID, table); 656 } 657 return -1; 658 } 659 660 /* 661 * return whether a row is selected in an AccessibleTable 662 */ 663 BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row) { 664 if (theAccessBridgeInitializedFlag == TRUE) { 665 return theAccessBridge.isAccessibleTableRowSelected(vmID, table, row); 666 } 667 return FALSE; 668 } 669 670 /* 671 * get an array of selected rows in an AccessibleTable 672 */ 673 BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections) { 674 if (theAccessBridgeInitializedFlag == TRUE) { 675 return theAccessBridge.getAccessibleTableRowSelections(vmID, table, count, selections); 676 } 677 return FALSE; 678 } 679 680 /* 681 * return the number of columns selected in an AccessibleTable 682 */ 683 jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table) { 684 if (theAccessBridgeInitializedFlag == TRUE) { 685 return theAccessBridge.getAccessibleTableColumnSelectionCount(vmID, table); 686 } 687 return -1; 688 } 689 690 /* 691 * return whether a column is selected in an AccessibleTable 692 */ 693 BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column) { 694 if (theAccessBridgeInitializedFlag == TRUE) { 695 return theAccessBridge.isAccessibleTableColumnSelected(vmID, table, column); 696 } 697 return FALSE; 698 } 699 700 /* 701 * get an array of columns selected in an AccessibleTable 702 */ 703 BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections) { 704 if (theAccessBridgeInitializedFlag == TRUE) { 705 return theAccessBridge.getAccessibleTableColumnSelections(vmID, table, count, selections); 706 } 707 return FALSE; 708 } 709 710 /* 711 * return the row number for a cell at a given index 712 */ 713 jint 714 getAccessibleTableRow(long vmID, AccessibleTable table, jint index) { 715 if (theAccessBridgeInitializedFlag == TRUE) { 716 return theAccessBridge.getAccessibleTableRow(vmID, table, index); 717 } 718 return -1; 719 } 720 721 /* 722 * return the column number for a cell at a given index 723 */ 724 jint 725 getAccessibleTableColumn(long vmID, AccessibleTable table, jint index) { 726 if (theAccessBridgeInitializedFlag == TRUE) { 727 return theAccessBridge.getAccessibleTableColumn(vmID, table, index); 728 } 729 return -1; 730 } 731 732 /* 733 * return the index of a cell at a given row and column 734 */ 735 jint 736 getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column) { 737 if (theAccessBridgeInitializedFlag == TRUE) { 738 return theAccessBridge.getAccessibleTableIndex(vmID, table, row, column); 739 } 740 return -1; 741 } 742 743 /* end AccessibleTable routines */ 744 745 746 /** 747 * Accessible Text routines 748 */ 749 BOOL GetAccessibleTextInfo(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y) { 750 if (theAccessBridgeInitializedFlag == TRUE) { 751 return theAccessBridge.GetAccessibleTextInfo(vmID, at, textInfo, x, y); 752 } 753 return FALSE; 754 } 755 756 BOOL GetAccessibleTextItems(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index) { 757 if (theAccessBridgeInitializedFlag == TRUE) { 758 return theAccessBridge.GetAccessibleTextItems(vmID, at, textItems, index); 759 } 760 return FALSE; 761 } 762 763 BOOL GetAccessibleTextSelectionInfo(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection) { 764 if (theAccessBridgeInitializedFlag == TRUE) { 765 return theAccessBridge.GetAccessibleTextSelectionInfo(vmID, at, textSelection); 766 } 767 return FALSE; 768 } 769 770 BOOL GetAccessibleTextAttributes(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes) { 771 if (theAccessBridgeInitializedFlag == TRUE) { 772 return theAccessBridge.GetAccessibleTextAttributes(vmID, at, index, attributes); 773 } 774 return FALSE; 775 } 776 777 BOOL GetAccessibleTextRect(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index) { 778 if (theAccessBridgeInitializedFlag == TRUE) { 779 return theAccessBridge.GetAccessibleTextRect(vmID, at, rectInfo, index); 780 } 781 return FALSE; 782 } 783 784 BOOL GetAccessibleTextLineBounds(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex) { 785 if (theAccessBridgeInitializedFlag == TRUE) { 786 return theAccessBridge.GetAccessibleTextLineBounds(vmID, at, index, startIndex, endIndex); 787 } 788 return FALSE; 789 } 790 791 BOOL GetAccessibleTextRange(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len) { 792 if (theAccessBridgeInitializedFlag == TRUE) { 793 return theAccessBridge.GetAccessibleTextRange(vmID, at, start, end, text, len); 794 } 795 return FALSE; 796 } 797 798 /** 799 * AccessibleRelationSet routines 800 */ 801 BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext, 802 AccessibleRelationSetInfo *relationSetInfo) { 803 if (theAccessBridgeInitializedFlag == TRUE) { 804 return theAccessBridge.getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo); 805 } 806 return FALSE; 807 } 808 809 /** 810 * AccessibleHypertext routines 811 */ 812 813 // Gets AccessibleHypertext for an AccessibleContext 814 BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext, 815 AccessibleHypertextInfo *hypertextInfo) { 816 if (theAccessBridgeInitializedFlag == TRUE) { 817 return theAccessBridge.getAccessibleHypertext(vmID, accessibleContext, hypertextInfo); 818 } 819 return FALSE; 820 } 821 822 // Activates an AccessibleHyperlink for an AccessibleContext 823 BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext, 824 AccessibleHyperlink accessibleHyperlink) { 825 if (theAccessBridgeInitializedFlag == TRUE) { 826 return theAccessBridge.activateAccessibleHyperlink(vmID, accessibleContext, accessibleHyperlink); 827 } 828 return FALSE; 829 } 830 831 /* 832 * Returns the number of hyperlinks in a component 833 * Maps to AccessibleHypertext.getLinkCount. 834 * Returns -1 on error. 835 */ 836 jint getAccessibleHyperlinkCount(const long vmID, 837 const AccessibleContext accessibleContext) { 838 839 if (theAccessBridgeInitializedFlag == TRUE) { 840 return theAccessBridge.getAccessibleHyperlinkCount(vmID, accessibleContext); 841 } 842 return -1; 843 } 844 845 /* 846 * This method is used to iterate through the hyperlinks in a component. It 847 * returns hypertext information for a component starting at hyperlink index 848 * nStartIndex. No more than MAX_HYPERLINKS AccessibleHypertextInfo objects will 849 * be returned for each call to this method. 850 * returns FALSE on error. 851 */ 852 BOOL getAccessibleHypertextExt(const long vmID, 853 const AccessibleContext accessibleContext, 854 const jint nStartIndex, 855 /* OUT */ AccessibleHypertextInfo *hypertextInfo) { 856 857 if (theAccessBridgeInitializedFlag == TRUE) { 858 return theAccessBridge.getAccessibleHypertextExt(vmID, 859 accessibleContext, 860 nStartIndex, 861 hypertextInfo); 862 } 863 return FALSE; 864 } 865 866 /* 867 * Returns the index into an array of hyperlinks that is associated with 868 * a character index in document; 869 * Maps to AccessibleHypertext.getLinkIndex. 870 * Returns -1 on error. 871 */ 872 jint getAccessibleHypertextLinkIndex(const long vmID, 873 const AccessibleHypertext hypertext, 874 const jint nIndex) { 875 876 if (theAccessBridgeInitializedFlag == TRUE) { 877 return theAccessBridge.getAccessibleHypertextLinkIndex(vmID, 878 hypertext, 879 nIndex); 880 } 881 return -1; 882 } 883 884 /* 885 * Returns the nth hyperlink in a document. 886 * Maps to AccessibleHypertext.getLink. 887 * Returns -1 on error 888 */ 889 BOOL getAccessibleHyperlink(const long vmID, 890 const AccessibleHypertext hypertext, 891 const jint nIndex, 892 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) { 893 894 if (theAccessBridgeInitializedFlag == TRUE) { 895 return theAccessBridge.getAccessibleHyperlink(vmID, 896 hypertext, 897 nIndex, 898 hyperlinkInfo); 899 } 900 return FALSE; 901 } 902 903 904 /* Accessible KeyBindings, Icons and Actions */ 905 BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext, 906 AccessibleKeyBindings *keyBindings) { 907 if (theAccessBridgeInitializedFlag == TRUE) { 908 return theAccessBridge.getAccessibleKeyBindings(vmID, accessibleContext, keyBindings); 909 } 910 return FALSE; 911 } 912 913 BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext, 914 AccessibleIcons *icons) { 915 if (theAccessBridgeInitializedFlag == TRUE) { 916 return theAccessBridge.getAccessibleIcons(vmID, accessibleContext, icons); 917 } 918 return FALSE; 919 } 920 921 BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, 922 AccessibleActions *actions) { 923 if (theAccessBridgeInitializedFlag == TRUE) { 924 return theAccessBridge.getAccessibleActions(vmID, accessibleContext, actions); 925 } 926 return FALSE; 927 } 928 929 BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext, 930 AccessibleActionsToDo *actionsToDo, jint *failure) { 931 if (theAccessBridgeInitializedFlag == TRUE) { 932 return theAccessBridge.doAccessibleActions(vmID, accessibleContext, actionsToDo, failure); 933 } 934 return FALSE; 935 } 936 937 /** 938 * Accessible Value routines 939 */ 940 BOOL GetCurrentAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { 941 if (theAccessBridgeInitializedFlag == TRUE) { 942 return theAccessBridge.GetCurrentAccessibleValueFromContext(vmID, av, value, len); 943 } 944 return FALSE; 945 } 946 947 BOOL GetMaximumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { 948 if (theAccessBridgeInitializedFlag == TRUE) { 949 return theAccessBridge.GetMaximumAccessibleValueFromContext(vmID, av, value, len); 950 } 951 return FALSE; 952 } 953 954 BOOL GetMinimumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { 955 if (theAccessBridgeInitializedFlag == TRUE) { 956 return theAccessBridge.GetMinimumAccessibleValueFromContext(vmID, av, value, len); 957 } 958 return FALSE; 959 } 960 961 962 /** 963 * Accessible Selection routines 964 */ 965 void addAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { 966 if (theAccessBridgeInitializedFlag == TRUE) { 967 theAccessBridge.AddAccessibleSelectionFromContext(vmID, as, i); 968 } 969 } 970 971 void clearAccessibleSelectionFromContext(long vmID, AccessibleSelection as) { 972 if (theAccessBridgeInitializedFlag == TRUE) { 973 theAccessBridge.ClearAccessibleSelectionFromContext(vmID, as); 974 } 975 } 976 977 JOBJECT64 GetAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { 978 if (theAccessBridgeInitializedFlag == TRUE) { 979 return theAccessBridge.GetAccessibleSelectionFromContext(vmID, as, i); 980 } 981 return (JOBJECT64) 0; 982 } 983 984 int GetAccessibleSelectionCountFromContext(long vmID, AccessibleSelection as) { 985 if (theAccessBridgeInitializedFlag == TRUE) { 986 return theAccessBridge.GetAccessibleSelectionCountFromContext(vmID, as); 987 } 988 return -1; 989 } 990 991 BOOL IsAccessibleChildSelectedFromContext(long vmID, AccessibleSelection as, int i) { 992 if (theAccessBridgeInitializedFlag == TRUE) { 993 return theAccessBridge.IsAccessibleChildSelectedFromContext(vmID, as, i); 994 } 995 return FALSE; 996 } 997 998 void RemoveAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { 999 if (theAccessBridgeInitializedFlag == TRUE) { 1000 theAccessBridge.RemoveAccessibleSelectionFromContext(vmID, as, i); 1001 } 1002 } 1003 1004 void SelectAllAccessibleSelectionFromContext(long vmID, AccessibleSelection as) { 1005 if (theAccessBridgeInitializedFlag == TRUE) { 1006 theAccessBridge.SelectAllAccessibleSelectionFromContext(vmID, as); 1007 } 1008 } 1009 1010 /** 1011 * Additional methods for Teton 1012 */ 1013 1014 /** 1015 * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns 1016 * whether successful. 1017 * 1018 * Bug ID 4916682 - Implement JAWS AccessibleName policy 1019 */ 1020 BOOL getVirtualAccessibleName(const long vmID, const AccessibleContext accessibleContext, 1021 wchar_t *name, int len) { 1022 if (theAccessBridgeInitializedFlag == TRUE) { 1023 return theAccessBridge.getVirtualAccessibleName(vmID, accessibleContext, name, len); 1024 } 1025 return FALSE; 1026 } 1027 1028 /** 1029 * Request focus for a component. Returns whether successful; 1030 * 1031 * Bug ID 4944757 - requestFocus method needed 1032 */ 1033 BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext) { 1034 if (theAccessBridgeInitializedFlag == TRUE) { 1035 return theAccessBridge.requestFocus(vmID, accessibleContext); 1036 } 1037 return FALSE; 1038 } 1039 1040 /** 1041 * Selects text between two indices. Selection includes the text at the start index 1042 * and the text at the end index. Returns whether successful; 1043 * 1044 * Bug ID 4944758 - selectTextRange method needed 1045 */ 1046 BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext, 1047 const int startIndex, const int endIndex) { 1048 if (theAccessBridgeInitializedFlag == TRUE) { 1049 return theAccessBridge.selectTextRange(vmID, accessibleContext, startIndex, endIndex); 1050 } 1051 return FALSE; 1052 } 1053 1054 /** 1055 * Get text attributes between two indices. The attribute list includes the text at the 1056 * start index and the text at the end index. Returns whether successful; 1057 * 1058 * Bug ID 4944761 - getTextAttributes between two indices method needed 1059 */ 1060 BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext, 1061 const int startIndex, const int endIndex, 1062 AccessibleTextAttributesInfo *attributes, short *len) { 1063 if (theAccessBridgeInitializedFlag == TRUE) { 1064 return theAccessBridge.getTextAttributesInRange(vmID, accessibleContext, startIndex, 1065 endIndex, attributes, len); 1066 } 1067 return FALSE; 1068 } 1069 1070 /** 1071 * Returns the number of visible children of a component. Returns -1 on error. 1072 * 1073 * Bug ID 4944762- getVisibleChildren for list-like components needed 1074 */ 1075 int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext) { 1076 if (theAccessBridgeInitializedFlag == TRUE) { 1077 return theAccessBridge.getVisibleChildrenCount(vmID, accessibleContext); 1078 } 1079 return FALSE; 1080 } 1081 1082 /** 1083 * Gets the visible children of an AccessibleContext. Returns whether successful; 1084 * 1085 * Bug ID 4944762- getVisibleChildren for list-like components needed 1086 */ 1087 BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext, 1088 const int startIndex, VisibleChildrenInfo *visibleChildrenInfo) { 1089 if (theAccessBridgeInitializedFlag == TRUE) { 1090 return theAccessBridge.getVisibleChildren(vmID, accessibleContext, startIndex, 1091 visibleChildrenInfo); 1092 } 1093 return FALSE; 1094 } 1095 1096 /** 1097 * Set the caret to a text position. Returns whether successful; 1098 * 1099 * Bug ID 4944770 - setCaretPosition method needed 1100 */ 1101 BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext, 1102 const int position) { 1103 if (theAccessBridgeInitializedFlag == TRUE) { 1104 return theAccessBridge.setCaretPosition(vmID, accessibleContext, position); 1105 } 1106 return FALSE; 1107 } 1108 1109 /** 1110 * Gets the text caret location 1111 */ 1112 BOOL getCaretLocation(long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index) { 1113 if (theAccessBridgeInitializedFlag == TRUE) { 1114 return theAccessBridge.getCaretLocation(vmID, ac, rectInfo, index); 1115 } 1116 return FALSE; 1117 } 1118 1119 /** 1120 * Gets the number of events waiting to fire 1121 */ 1122 int getEventsWaiting() { 1123 if (theAccessBridgeInitializedFlag == TRUE) { 1124 return theAccessBridge.getEventsWaiting(); 1125 } 1126 return FALSE; 1127 } 1128 1129 #ifdef __cplusplus 1130 } 1131 #endif