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 * Glue routines called by Windows AT into the WindowsAccessBridge dll 28 */ 29 30 #include "AccessBridgeDebug.h" 31 #include "AccessBridgeWindowsEntryPoints.h" 32 #include "WinAccessBridge.h" 33 #include "accessBridgeResource.h" 34 35 #include <windows.h> 36 #include <jni.h> 37 38 39 extern WinAccessBridge *theWindowsAccessBridge; 40 extern HWND theDialogWindow; 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /** 47 * Windows_run - where Windows executables will load/unload us 48 * 49 */ 50 void Windows_run() { 51 // open our window 52 if (theWindowsAccessBridge != (WinAccessBridge *) 0) { 53 theWindowsAccessBridge->initWindow(); 54 DEBUG_CODE(SetDlgItemText(theDialogWindow, cInvokedByText, "Windows")); 55 } 56 } 57 58 /* 59 /** 60 * Windows_shutdown - where Windows executables will load/unload us 61 * 62 * 63 void Windows_shutdown() { 64 if (theWindowsAccessBridge != (WinAccessBridge *) 0) { 65 theWindowsAccessBridge->initWindow(); 66 } 67 } 68 */ 69 70 /** 71 * getTopLevelHWND - returns the top-level window parent of the descendent 72 * 73 */ 74 HWND getTopLevelHWND(HWND descendent) { 75 HWND hwnd; 76 if (descendent == NULL) { 77 return NULL; 78 } 79 80 if (!IsWindow(descendent)) { 81 return NULL; 82 } 83 84 hwnd = descendent; 85 for(;;) { 86 LONG style = GetWindowLong(hwnd, GWL_STYLE); 87 if ( (style & WS_CHILD) == 0 ) { 88 // found a non-child window so terminate 89 break; 90 } 91 hwnd = GetParent(hwnd); 92 } 93 94 return hwnd; 95 } 96 97 void releaseJavaObject(long vmID, JOBJECT64 object) { 98 if (theWindowsAccessBridge != 0) { 99 theWindowsAccessBridge->releaseJavaObject(vmID, object); 100 } 101 } 102 103 void getVersionInfo(long vmID, AccessBridgeVersionInfo *info) { 104 if (theWindowsAccessBridge != 0) { 105 theWindowsAccessBridge->getVersionInfo(vmID, info); 106 } 107 } 108 109 110 BOOL isJavaWindow(HWND window) { 111 if (theWindowsAccessBridge != 0) { 112 return theWindowsAccessBridge->isJavaWindow(window); 113 } 114 return FALSE; 115 } 116 117 /* 118 * Returns whether two object references refer to the same object 119 */ 120 BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) { 121 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer) 122 PrintDebugString("\r\nAccessBridgeWindowsEntryPoints::isSameObject(%p %p)", obj1, obj2); 123 #else // JOBJECT64 is jlong (64 bit) 124 PrintDebugString("\r\nAccessBridgeWindowsEntryPoints::isSameObject(%016I64X %016I64X)", obj1, obj2); 125 #endif 126 if (theWindowsAccessBridge != 0) { 127 return theWindowsAccessBridge->isSameObject(vmID, obj1, obj2); 128 } 129 return FALSE; 130 } 131 132 /** 133 * Sets a text field to the specified string. Returns whether successful 134 */ 135 BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext,const wchar_t *text) { 136 137 if (theWindowsAccessBridge != 0) { 138 return theWindowsAccessBridge->setTextContents(vmID, accessibleContext, text); 139 } 140 return FALSE; 141 } 142 143 /** 144 * Returns the Accessible Context of an object of the specified role that is the 145 * ancestor of a given object. If the object is of the specified role 146 * or an ancestor object of the specified role was found, returns the object's 147 * AccessibleContext. 148 * If there is no ancestor object of the specified role, 149 * returns (AccessibleContext)0. 150 */ 151 AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { 152 153 if (theWindowsAccessBridge != 0) { 154 return theWindowsAccessBridge->getParentWithRole(vmID, accessibleContext, role); 155 } 156 return (AccessibleContext)0; 157 } 158 159 160 /** 161 * Returns the Accessible Context for the top level object in 162 * a Java Window. This is same Accessible Context that is obtained 163 * from GetAccessibleContextFromHWND for that window. Returns 164 * (AccessibleContext)0 on error. 165 */ 166 AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext) { 167 168 if (theWindowsAccessBridge != 0) { 169 return theWindowsAccessBridge->getTopLevelObject(vmID, accessibleContext); 170 } 171 return (AccessibleContext)0; 172 } 173 174 /** 175 * If there is an Ancestor object of the specified role, 176 * returns the Accessible Context of the found object. 177 * Otherwise, returns the top level object for that 178 * Java Window. Returns (AccessibleContext)0 on error. 179 */ 180 AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { 181 182 if (theWindowsAccessBridge != 0) { 183 return theWindowsAccessBridge->getParentWithRoleElseRoot(vmID, accessibleContext, role); 184 } 185 return (AccessibleContext)0; 186 } 187 188 /** 189 * Returns how deep in the object hierarchy a given object is. 190 * The top most object in the object hierarchy has an object depth of 0. 191 * Returns -1 on error. 192 */ 193 int getObjectDepth (const long vmID, const AccessibleContext accessibleContext) { 194 195 if (theWindowsAccessBridge != 0) { 196 return theWindowsAccessBridge->getObjectDepth(vmID, accessibleContext); 197 } 198 return -1; 199 } 200 201 /** 202 * Returns the Accessible Context of the currently ActiveDescendent of an object. 203 * Returns (AccessibleContext)0 on error. 204 */ 205 AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) { 206 207 if (theWindowsAccessBridge != 0) { 208 return theWindowsAccessBridge->getActiveDescendent(vmID, accessibleContext); 209 } 210 return (AccessibleContext)0; 211 } 212 213 // -------- Accessible Context methods ------------- 214 215 BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext) { 216 if (theWindowsAccessBridge != 0) { 217 return theWindowsAccessBridge->getAccessibleContextFromHWND(window, vmID, AccessibleContext); 218 } 219 return FALSE; 220 } 221 222 HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext) { 223 if (theWindowsAccessBridge != 0) { 224 return theWindowsAccessBridge->getHWNDFromAccessibleContext(vmID, accessibleContext); 225 } 226 return (HWND)0; 227 } 228 229 BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent, 230 jint x, jint y, JOBJECT64 *AccessibleContext) { 231 if (theWindowsAccessBridge != 0) { 232 return theWindowsAccessBridge->getAccessibleContextAt(vmID, AccessibleContextParent, 233 x, y, AccessibleContext); 234 } 235 return FALSE; 236 } 237 238 BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext) { 239 if (theWindowsAccessBridge != 0) { 240 return theWindowsAccessBridge->getAccessibleContextWithFocus(window, vmID, AccessibleContext); 241 } 242 return FALSE; 243 } 244 245 BOOL getAccessibleContextInfo(long vmID, 246 JOBJECT64 AccessibleContext, 247 AccessibleContextInfo *info) { 248 if (theWindowsAccessBridge != 0) { 249 return theWindowsAccessBridge->getAccessibleContextInfo( 250 vmID, 251 AccessibleContext, 252 info); 253 } 254 return FALSE; 255 } 256 257 JOBJECT64 getAccessibleChildFromContext(long vmID, 258 JOBJECT64 AccessibleContext, 259 jint childIndex) { 260 if (theWindowsAccessBridge != 0) { 261 return theWindowsAccessBridge->getAccessibleChildFromContext( 262 vmID, 263 AccessibleContext, 264 childIndex); 265 } 266 return (JOBJECT64) 0; 267 } 268 269 JOBJECT64 getAccessibleParentFromContext(long vmID, 270 JOBJECT64 AccessibleContext) { 271 if (theWindowsAccessBridge != 0) { 272 return theWindowsAccessBridge->getAccessibleParentFromContext( 273 vmID, 274 AccessibleContext); 275 } 276 return (JOBJECT64) 0; 277 } 278 279 // -------- begin AccessibleTable routines ------------- 280 281 BOOL getAccessibleTableInfo(long vmID, JOBJECT64 ac, 282 AccessibleTableInfo *tableInfo) { 283 if (theWindowsAccessBridge != 0) { 284 return theWindowsAccessBridge->getAccessibleTableInfo( 285 vmID, 286 ac, 287 tableInfo); 288 } 289 return FALSE; 290 } 291 292 BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, 293 jint row, jint column, AccessibleTableCellInfo *tableCellInfo) { 294 295 if (theWindowsAccessBridge != 0) { 296 return theWindowsAccessBridge->getAccessibleTableCellInfo( 297 vmID, 298 accessibleTable, 299 row, column, tableCellInfo); 300 } 301 return FALSE; 302 } 303 304 BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo) { 305 306 if (theWindowsAccessBridge != 0) { 307 return theWindowsAccessBridge->getAccessibleTableRowHeader( 308 vmID, 309 acParent, 310 tableInfo); 311 } 312 return FALSE; 313 } 314 315 BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo) { 316 317 if (theWindowsAccessBridge != 0) { 318 return theWindowsAccessBridge->getAccessibleTableColumnHeader( 319 vmID, 320 acParent, 321 tableInfo); 322 } 323 return FALSE; 324 } 325 326 JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row) { 327 328 if (theWindowsAccessBridge != 0) { 329 return (JOBJECT64)theWindowsAccessBridge->getAccessibleTableRowDescription( 330 vmID, 331 acParent, 332 row); 333 } 334 return (JOBJECT64)0; 335 } 336 337 JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column) { 338 339 if (theWindowsAccessBridge != 0) { 340 return (JOBJECT64)theWindowsAccessBridge->getAccessibleTableColumnDescription( 341 vmID, 342 acParent, 343 column); 344 } 345 return (JOBJECT64)0; 346 } 347 348 jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable) { 349 if (theWindowsAccessBridge != 0) { 350 return theWindowsAccessBridge->getAccessibleTableRowSelectionCount(vmID, accessibleTable); 351 } 352 return -1; 353 } 354 355 BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row) { 356 if (theWindowsAccessBridge != 0 ) { 357 return theWindowsAccessBridge->isAccessibleTableRowSelected(vmID, accessibleTable, row); 358 } 359 return FALSE; 360 } 361 362 BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count, jint *selections) { 363 if (theWindowsAccessBridge != 0 ) { 364 return theWindowsAccessBridge->getAccessibleTableRowSelections(vmID, accessibleTable, count, 365 selections); 366 } 367 return FALSE; 368 } 369 370 371 jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable) { 372 if (theWindowsAccessBridge != 0 ) { 373 return theWindowsAccessBridge->getAccessibleTableColumnSelectionCount(vmID, accessibleTable); 374 } 375 return -1; 376 } 377 378 BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column) { 379 if (theWindowsAccessBridge != 0 ) { 380 return theWindowsAccessBridge->isAccessibleTableColumnSelected(vmID, accessibleTable, column); 381 } 382 return FALSE; 383 } 384 385 BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count, jint *selections) { 386 if (theWindowsAccessBridge != 0 ) { 387 return theWindowsAccessBridge->getAccessibleTableColumnSelections(vmID, accessibleTable, count, 388 selections); 389 } 390 return FALSE; 391 } 392 393 jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index) { 394 if (theWindowsAccessBridge != 0 ) { 395 return theWindowsAccessBridge->getAccessibleTableRow(vmID, accessibleTable, index); 396 } 397 return -1; 398 } 399 400 jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index) { 401 if (theWindowsAccessBridge != 0 ) { 402 return theWindowsAccessBridge->getAccessibleTableColumn(vmID, accessibleTable, index); 403 } 404 return -1; 405 } 406 407 jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column) { 408 if (theWindowsAccessBridge != 0 ) { 409 return theWindowsAccessBridge->getAccessibleTableIndex(vmID, accessibleTable, row, column); 410 } 411 return -1; 412 } 413 414 /* --------- end AccessibleTable routines ------- */ 415 416 // --------- AccessibleRelationSet methods 417 418 BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext, 419 AccessibleRelationSetInfo *relationSetInfo) { 420 if (theWindowsAccessBridge != 0) { 421 return theWindowsAccessBridge->getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo); 422 } 423 return FALSE; 424 } 425 426 // --------- AccessibleHypertext methods 427 428 BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, 429 AccessibleHypertextInfo *accessibleHypertextInfo) { 430 if (theWindowsAccessBridge != 0) { 431 return theWindowsAccessBridge->getAccessibleHypertext(vmID, accessibleContext, 432 accessibleHypertextInfo); 433 } 434 return FALSE; 435 } 436 437 BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink) { 438 if (theWindowsAccessBridge != 0) { 439 return theWindowsAccessBridge->activateAccessibleHyperlink(vmID, accessibleContext, 440 accessibleHyperlink); 441 } 442 return FALSE; 443 } 444 445 jint getAccessibleHyperlinkCount(const long vmID, 446 const AccessibleContext accessibleContext) { 447 448 if (theWindowsAccessBridge != 0) { 449 return theWindowsAccessBridge->getAccessibleHyperlinkCount(vmID, accessibleContext); 450 } 451 return -1; 452 } 453 454 455 BOOL getAccessibleHypertextExt(const long vmID, 456 const AccessibleContext accessibleContext, 457 const jint nStartIndex, 458 /* OUT */ AccessibleHypertextInfo *hypertextInfo) { 459 460 if (theWindowsAccessBridge != 0) { 461 return theWindowsAccessBridge->getAccessibleHypertextExt(vmID, 462 accessibleContext, 463 nStartIndex, 464 hypertextInfo); 465 } 466 return FALSE; 467 } 468 469 470 jint getAccessibleHypertextLinkIndex(const long vmID, 471 const AccessibleHypertext hypertext, 472 const jint nIndex) { 473 474 if (theWindowsAccessBridge != 0) { 475 return theWindowsAccessBridge->getAccessibleHypertextLinkIndex(vmID, 476 hypertext, 477 nIndex); 478 } 479 return -1; 480 } 481 482 483 BOOL getAccessibleHyperlink(const long vmID, 484 const AccessibleHypertext hypertext, 485 const jint nIndex, 486 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) { 487 488 if (theWindowsAccessBridge != 0) { 489 return theWindowsAccessBridge->getAccessibleHyperlink(vmID, 490 hypertext, 491 nIndex, 492 hyperlinkInfo); 493 } 494 return FALSE; 495 } 496 497 498 /* Accessible KeyBindings, Icons and Actions */ 499 BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext, AccessibleKeyBindings *keyBindings) { 500 501 if (theWindowsAccessBridge != 0) { 502 return theWindowsAccessBridge->getAccessibleKeyBindings(vmID, accessibleContext, keyBindings); 503 } 504 return FALSE; 505 } 506 507 BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext, AccessibleIcons *icons) { 508 509 if (theWindowsAccessBridge != 0) { 510 return theWindowsAccessBridge->getAccessibleIcons(vmID, accessibleContext, icons); 511 } 512 return FALSE; 513 } 514 515 BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext, AccessibleActions *actions) { 516 517 if (theWindowsAccessBridge != 0) { 518 return theWindowsAccessBridge->getAccessibleActions(vmID, accessibleContext, actions); 519 } 520 return FALSE; 521 } 522 523 BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext, AccessibleActionsToDo *actionsToDo, 524 jint *failure) { 525 526 if (theWindowsAccessBridge != 0) { 527 return theWindowsAccessBridge->doAccessibleActions(vmID, accessibleContext, actionsToDo, 528 failure); 529 } 530 return FALSE; 531 } 532 533 /** 534 * Additional methods for Teton 535 */ 536 537 /** 538 * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns 539 * whether successful. 540 * 541 * Bug ID 4916682 - Implement JAWS AccessibleName policy 542 */ 543 BOOL getVirtualAccessibleName(long vmID, AccessibleContext accessibleContext, wchar_t *name, int len) { 544 if (theWindowsAccessBridge != 0) { 545 return theWindowsAccessBridge->getVirtualAccessibleName(vmID, accessibleContext, name, len); 546 } 547 return FALSE; 548 } 549 550 /** 551 * Request focus for a component. Returns whether successful; 552 * 553 * Bug ID 4944757 - requestFocus method needed 554 */ 555 BOOL requestFocus(long vmID, AccessibleContext accessibleContext) { 556 if (theWindowsAccessBridge != 0) { 557 return theWindowsAccessBridge->requestFocus(vmID, accessibleContext); 558 } 559 return FALSE; 560 } 561 562 /** 563 * Selects text between two indices. Selection includes the text at the start index 564 * and the text at the end index. Returns whether successful; 565 * 566 * Bug ID 4944758 - selectTextRange method needed 567 */ 568 BOOL selectTextRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex) { 569 if (theWindowsAccessBridge != 0) { 570 return theWindowsAccessBridge->selectTextRange(vmID, accessibleContext, startIndex, endIndex); 571 } 572 return FALSE; 573 } 574 575 /** 576 * Get text attributes between two indices. The attribute list includes the text at the 577 * start index and the text at the end index. Returns whether successful; 578 * 579 * Bug ID 4944761 - getTextAttributes between two indices method needed 580 */ 581 BOOL getTextAttributesInRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex, 582 AccessibleTextAttributesInfo *attributes, short *len) { 583 if (theWindowsAccessBridge != 0) { 584 return theWindowsAccessBridge->getTextAttributesInRange(vmID, accessibleContext, 585 startIndex, endIndex, attributes, len); 586 } 587 return FALSE; 588 } 589 590 /** 591 * Gets the number of visible children of a component. Returns -1 on error. 592 * 593 * Bug ID 4944762- getVisibleChildren for list-like components needed 594 */ 595 int getVisibleChildrenCount(long vmID, AccessibleContext accessibleContext) { 596 if (theWindowsAccessBridge != 0) { 597 return theWindowsAccessBridge->getVisibleChildrenCount(vmID, accessibleContext); 598 } 599 return FALSE; 600 } 601 602 /** 603 * Gets the visible children of an AccessibleContext. Returns whether successful; 604 * 605 * Bug ID 4944762- getVisibleChildren for list-like components needed 606 */ 607 BOOL getVisibleChildren(long vmID, AccessibleContext accessibleContext, int startIndex, 608 VisibleChildrenInfo *visibleChildrenInfo) { 609 if (theWindowsAccessBridge != 0) { 610 return theWindowsAccessBridge->getVisibleChildren(vmID, accessibleContext, startIndex, 611 visibleChildrenInfo); 612 } 613 return FALSE; 614 } 615 616 /** 617 * Set the caret to a text position. Returns whether successful; 618 * 619 * Bug ID 4944770 - setCaretPosition method needed 620 */ 621 BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext, 622 const int position) { 623 if (theWindowsAccessBridge != 0) { 624 return theWindowsAccessBridge->setCaretPosition(vmID, accessibleContext, position); 625 } 626 return FALSE; 627 } 628 629 // -------- Accessible Text methods ------------- 630 631 BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, 632 AccessibleTextInfo *textInfo, jint x, jint y) { 633 if (theWindowsAccessBridge != 0) { 634 return theWindowsAccessBridge->getAccessibleTextInfo( 635 vmID, 636 AccessibleContext, 637 textInfo, x, y); 638 } 639 return FALSE; 640 } 641 642 BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, 643 AccessibleTextItemsInfo *textItems, jint index) { 644 if (theWindowsAccessBridge != 0) { 645 return theWindowsAccessBridge->getAccessibleTextItems( 646 vmID, 647 AccessibleContext, 648 textItems, index); 649 } 650 return FALSE; 651 } 652 653 BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, 654 AccessibleTextSelectionInfo *selectionInfo) { 655 if (theWindowsAccessBridge != 0) { 656 return theWindowsAccessBridge->getAccessibleTextSelectionInfo( 657 vmID, 658 AccessibleContext, 659 selectionInfo); 660 } 661 return FALSE; 662 } 663 664 BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, 665 jint index, AccessibleTextAttributesInfo *attributes) { 666 if (theWindowsAccessBridge != 0) { 667 return theWindowsAccessBridge->getAccessibleTextAttributes( 668 vmID, 669 AccessibleContext, 670 index, attributes); 671 } 672 return FALSE; 673 } 674 675 BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, 676 AccessibleTextRectInfo *rectInfo, jint index) { 677 if (theWindowsAccessBridge != 0) { 678 return theWindowsAccessBridge->getAccessibleTextRect( 679 vmID, 680 AccessibleContext, 681 rectInfo, index); 682 } 683 return FALSE; 684 } 685 686 BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, 687 AccessibleTextRectInfo *rectInfo, jint index) { 688 if (theWindowsAccessBridge != 0) { 689 return theWindowsAccessBridge->getCaretLocation(vmID, 690 AccessibleContext, 691 rectInfo, index); 692 } 693 return FALSE; 694 } 695 696 int getEventsWaiting() { 697 if (theWindowsAccessBridge != 0) { 698 return theWindowsAccessBridge->getEventsWaiting(); 699 } 700 return FALSE; 701 } 702 703 BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, 704 jint index, jint *startIndex, jint *endIndex) { 705 if (theWindowsAccessBridge != 0) { 706 return theWindowsAccessBridge->getAccessibleTextLineBounds( 707 vmID, 708 AccessibleContext, 709 index, startIndex, endIndex); 710 } 711 return FALSE; 712 } 713 714 BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, 715 jint start, jint end, wchar_t *text, short len) { 716 if (theWindowsAccessBridge != 0) { 717 return theWindowsAccessBridge->getAccessibleTextRange( 718 vmID, 719 AccessibleContext, 720 start, end, text, len); 721 } 722 return FALSE; 723 } 724 725 726 // -------- Accessible Value methods ------------- 727 728 BOOL getCurrentAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, 729 wchar_t *value, short len) { 730 if (theWindowsAccessBridge != 0) { 731 return theWindowsAccessBridge->getCurrentAccessibleValueFromContext( 732 vmID, AccessibleContext, value, len); 733 } 734 return FALSE; 735 } 736 737 BOOL getMaximumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, 738 wchar_t *value, short len) { 739 if (theWindowsAccessBridge != 0) { 740 return theWindowsAccessBridge->getMaximumAccessibleValueFromContext( 741 vmID, AccessibleContext, value, len); 742 } 743 return FALSE; 744 } 745 746 BOOL getMinimumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, 747 wchar_t *value, short len) { 748 if (theWindowsAccessBridge != 0) { 749 return theWindowsAccessBridge->getMinimumAccessibleValueFromContext( 750 vmID, AccessibleContext, value, len); 751 } 752 return FALSE; 753 } 754 755 // -------- Accessible Selection methods ------------- 756 757 void addAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { 758 if (theWindowsAccessBridge != 0) { 759 theWindowsAccessBridge->addAccessibleSelectionFromContext( 760 vmID, AccessibleContext, i); 761 } 762 } 763 764 void clearAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext) { 765 if (theWindowsAccessBridge != 0) { 766 theWindowsAccessBridge->clearAccessibleSelectionFromContext( 767 vmID, AccessibleContext); 768 } 769 } 770 771 JOBJECT64 getAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { 772 if (theWindowsAccessBridge != 0) { 773 return theWindowsAccessBridge->getAccessibleSelectionFromContext( 774 vmID, AccessibleContext, i); 775 } 776 return (JOBJECT64) 0; 777 } 778 779 int getAccessibleSelectionCountFromContext(long vmID, JOBJECT64 AccessibleContext) { 780 if (theWindowsAccessBridge != 0) { 781 return theWindowsAccessBridge->getAccessibleSelectionCountFromContext( 782 vmID, AccessibleContext); 783 } 784 return -1; 785 } 786 787 BOOL isAccessibleChildSelectedFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { 788 if (theWindowsAccessBridge != 0) { 789 return theWindowsAccessBridge->isAccessibleChildSelectedFromContext( 790 vmID, AccessibleContext, i); 791 } 792 return FALSE; 793 } 794 795 void removeAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { 796 if (theWindowsAccessBridge != 0) { 797 theWindowsAccessBridge->removeAccessibleSelectionFromContext( 798 vmID, AccessibleContext, i); 799 } 800 } 801 802 void selectAllAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext) { 803 if (theWindowsAccessBridge != 0) { 804 theWindowsAccessBridge->selectAllAccessibleSelectionFromContext( 805 vmID, AccessibleContext); 806 } 807 } 808 809 810 // -------- Event Handler methods ------------- 811 812 #define SET_EVENT_FP(function, callbackFP) \ 813 void function(callbackFP fp) { \ 814 if (theWindowsAccessBridge != 0) { \ 815 theWindowsAccessBridge->function(fp); \ 816 } \ 817 } 818 819 void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp) { 820 if (theWindowsAccessBridge != 0) { 821 theWindowsAccessBridge->setJavaShutdownFP(fp); 822 } 823 } 824 825 SET_EVENT_FP(setPropertyChangeFP, AccessBridge_PropertyChangeFP) 826 SET_EVENT_FP(setFocusGainedFP, AccessBridge_FocusGainedFP) 827 SET_EVENT_FP(setFocusLostFP, AccessBridge_FocusLostFP) 828 SET_EVENT_FP(setCaretUpdateFP, AccessBridge_CaretUpdateFP) 829 SET_EVENT_FP(setMouseClickedFP, AccessBridge_MouseClickedFP) 830 SET_EVENT_FP(setMouseEnteredFP, AccessBridge_MouseEnteredFP) 831 SET_EVENT_FP(setMouseExitedFP, AccessBridge_MouseExitedFP) 832 SET_EVENT_FP(setMousePressedFP, AccessBridge_MousePressedFP) 833 SET_EVENT_FP(setMouseReleasedFP, AccessBridge_MouseReleasedFP) 834 SET_EVENT_FP(setMenuCanceledFP, AccessBridge_MenuCanceledFP) 835 SET_EVENT_FP(setMenuDeselectedFP, AccessBridge_MenuDeselectedFP) 836 SET_EVENT_FP(setMenuSelectedFP, AccessBridge_MenuSelectedFP) 837 SET_EVENT_FP(setPopupMenuCanceledFP, AccessBridge_PopupMenuCanceledFP) 838 SET_EVENT_FP(setPopupMenuWillBecomeInvisibleFP, AccessBridge_PopupMenuWillBecomeInvisibleFP) 839 SET_EVENT_FP(setPopupMenuWillBecomeVisibleFP, AccessBridge_PopupMenuWillBecomeVisibleFP) 840 841 SET_EVENT_FP(setPropertyNameChangeFP, AccessBridge_PropertyNameChangeFP) 842 SET_EVENT_FP(setPropertyDescriptionChangeFP, AccessBridge_PropertyDescriptionChangeFP) 843 SET_EVENT_FP(setPropertyStateChangeFP, AccessBridge_PropertyStateChangeFP) 844 SET_EVENT_FP(setPropertyValueChangeFP, AccessBridge_PropertyValueChangeFP) 845 SET_EVENT_FP(setPropertySelectionChangeFP, AccessBridge_PropertySelectionChangeFP) 846 SET_EVENT_FP(setPropertyTextChangeFP, AccessBridge_PropertyTextChangeFP) 847 SET_EVENT_FP(setPropertyCaretChangeFP, AccessBridge_PropertyCaretChangeFP) 848 SET_EVENT_FP(setPropertyVisibleDataChangeFP, AccessBridge_PropertyVisibleDataChangeFP) 849 SET_EVENT_FP(setPropertyChildChangeFP, AccessBridge_PropertyChildChangeFP) 850 SET_EVENT_FP(setPropertyActiveDescendentChangeFP, AccessBridge_PropertyActiveDescendentChangeFP) 851 852 SET_EVENT_FP(setPropertyTableModelChangeFP, AccessBridge_PropertyTableModelChangeFP) 853 854 #ifdef __cplusplus 855 } 856 #endif