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