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