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