Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/windows/native/sun/bridge/AccessBridgeCalls.c
32287 views
/*1* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425/*26* @(#)AccessBridgeCalls.c 1.25 05/08/2227*/2829/*30* Wrapper functions around calls to the AccessBridge DLL31*/323334#include <windows.h>35#include <jni.h>363738//#define ACCESSBRIDGE_3239//#define ACCESSBRIDGE_644041#include "AccessBridgeCalls.h"42#include "AccessBridgeDebug.h"4344#ifdef __cplusplus45extern "C" {46#endif4748HINSTANCE theAccessBridgeInstance;49AccessBridgeFPs theAccessBridge;5051BOOL theAccessBridgeInitializedFlag = FALSE;5253#define LOAD_FP(result, type, name) \54PrintDebugString("LOAD_FP loading: %s ...", name); \55if ((theAccessBridge.result = \56(type) GetProcAddress(theAccessBridgeInstance, name)) == (type) 0) { \57PrintDebugString("LOAD_FP failed: %s", name); \58return FALSE; \59}6061BOOL initializeAccessBridge() {6263#ifdef ACCESSBRIDGE_ARCH_32 // For 32bit AT new bridge64theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-32");65#else66#ifdef ACCESSBRIDGE_ARCH_64 // For 64bit AT new bridge67theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-64");68#else // legacy69theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE");70#endif71#endif72if (theAccessBridgeInstance != 0) {73LOAD_FP(Windows_run, Windows_runFP, "Windows_run");7475LOAD_FP(SetJavaShutdown, SetJavaShutdownFP, "setJavaShutdownFP");76LOAD_FP(SetFocusGained, SetFocusGainedFP, "setFocusGainedFP");77LOAD_FP(SetFocusLost, SetFocusLostFP, "setFocusLostFP");7879LOAD_FP(SetCaretUpdate, SetCaretUpdateFP, "setCaretUpdateFP");8081LOAD_FP(SetMouseClicked, SetMouseClickedFP, "setMouseClickedFP");82LOAD_FP(SetMouseEntered, SetMouseEnteredFP, "setMouseEnteredFP");83LOAD_FP(SetMouseExited, SetMouseExitedFP, "setMouseExitedFP");84LOAD_FP(SetMousePressed, SetMousePressedFP, "setMousePressedFP");85LOAD_FP(SetMouseReleased, SetMouseReleasedFP, "setMouseReleasedFP");8687LOAD_FP(SetMenuCanceled, SetMenuCanceledFP, "setMenuCanceledFP");88LOAD_FP(SetMenuDeselected, SetMenuDeselectedFP, "setMenuDeselectedFP");89LOAD_FP(SetMenuSelected, SetMenuSelectedFP, "setMenuSelectedFP");90LOAD_FP(SetPopupMenuCanceled, SetPopupMenuCanceledFP, "setPopupMenuCanceledFP");91LOAD_FP(SetPopupMenuWillBecomeInvisible, SetPopupMenuWillBecomeInvisibleFP, "setPopupMenuWillBecomeInvisibleFP");92LOAD_FP(SetPopupMenuWillBecomeVisible, SetPopupMenuWillBecomeVisibleFP, "setPopupMenuWillBecomeVisibleFP");9394LOAD_FP(SetPropertyNameChange, SetPropertyNameChangeFP, "setPropertyNameChangeFP");95LOAD_FP(SetPropertyDescriptionChange, SetPropertyDescriptionChangeFP, "setPropertyDescriptionChangeFP");96LOAD_FP(SetPropertyStateChange, SetPropertyStateChangeFP, "setPropertyStateChangeFP");97LOAD_FP(SetPropertyValueChange, SetPropertyValueChangeFP, "setPropertyValueChangeFP");98LOAD_FP(SetPropertySelectionChange, SetPropertySelectionChangeFP, "setPropertySelectionChangeFP");99LOAD_FP(SetPropertyTextChange, SetPropertyTextChangeFP, "setPropertyTextChangeFP");100LOAD_FP(SetPropertyCaretChange, SetPropertyCaretChangeFP, "setPropertyCaretChangeFP");101LOAD_FP(SetPropertyVisibleDataChange, SetPropertyVisibleDataChangeFP, "setPropertyVisibleDataChangeFP");102LOAD_FP(SetPropertyChildChange, SetPropertyChildChangeFP, "setPropertyChildChangeFP");103LOAD_FP(SetPropertyActiveDescendentChange, SetPropertyActiveDescendentChangeFP, "setPropertyActiveDescendentChangeFP");104105LOAD_FP(SetPropertyTableModelChange, SetPropertyTableModelChangeFP, "setPropertyTableModelChangeFP");106107LOAD_FP(ReleaseJavaObject, ReleaseJavaObjectFP, "releaseJavaObject");108LOAD_FP(GetVersionInfo, GetVersionInfoFP, "getVersionInfo");109110LOAD_FP(IsJavaWindow, IsJavaWindowFP, "isJavaWindow");111LOAD_FP(IsSameObject, IsSameObjectFP, "isSameObject");112LOAD_FP(GetAccessibleContextFromHWND, GetAccessibleContextFromHWNDFP, "getAccessibleContextFromHWND");113LOAD_FP(getHWNDFromAccessibleContext, getHWNDFromAccessibleContextFP, "getHWNDFromAccessibleContext");114115LOAD_FP(GetAccessibleContextAt, GetAccessibleContextAtFP, "getAccessibleContextAt");116LOAD_FP(GetAccessibleContextWithFocus, GetAccessibleContextWithFocusFP, "getAccessibleContextWithFocus");117LOAD_FP(GetAccessibleContextInfo, GetAccessibleContextInfoFP, "getAccessibleContextInfo");118LOAD_FP(GetAccessibleChildFromContext, GetAccessibleChildFromContextFP, "getAccessibleChildFromContext");119LOAD_FP(GetAccessibleParentFromContext, GetAccessibleParentFromContextFP, "getAccessibleParentFromContext");120121/* begin AccessibleTable */122LOAD_FP(getAccessibleTableInfo, getAccessibleTableInfoFP, "getAccessibleTableInfo");123LOAD_FP(getAccessibleTableCellInfo, getAccessibleTableCellInfoFP, "getAccessibleTableCellInfo");124125LOAD_FP(getAccessibleTableRowHeader, getAccessibleTableRowHeaderFP, "getAccessibleTableRowHeader");126LOAD_FP(getAccessibleTableColumnHeader, getAccessibleTableColumnHeaderFP, "getAccessibleTableColumnHeader");127128LOAD_FP(getAccessibleTableRowDescription, getAccessibleTableRowDescriptionFP, "getAccessibleTableRowDescription");129LOAD_FP(getAccessibleTableColumnDescription, getAccessibleTableColumnDescriptionFP, "getAccessibleTableColumnDescription");130131LOAD_FP(getAccessibleTableRowSelectionCount, getAccessibleTableRowSelectionCountFP,132"getAccessibleTableRowSelectionCount");133LOAD_FP(isAccessibleTableRowSelected, isAccessibleTableRowSelectedFP,134"isAccessibleTableRowSelected");135LOAD_FP(getAccessibleTableRowSelections, getAccessibleTableRowSelectionsFP,136"getAccessibleTableRowSelections");137138LOAD_FP(getAccessibleTableColumnSelectionCount, getAccessibleTableColumnSelectionCountFP,139"getAccessibleTableColumnSelectionCount");140LOAD_FP(isAccessibleTableColumnSelected, isAccessibleTableColumnSelectedFP,141"isAccessibleTableColumnSelected");142LOAD_FP(getAccessibleTableColumnSelections, getAccessibleTableColumnSelectionsFP,143"getAccessibleTableColumnSelections");144145LOAD_FP(getAccessibleTableRow, getAccessibleTableRowFP,146"getAccessibleTableRow");147LOAD_FP(getAccessibleTableColumn, getAccessibleTableColumnFP,148"getAccessibleTableColumn");149LOAD_FP(getAccessibleTableIndex, getAccessibleTableIndexFP,150"getAccessibleTableIndex");151152/* end AccessibleTable */153154/* AccessibleRelationSet */155LOAD_FP(getAccessibleRelationSet, getAccessibleRelationSetFP, "getAccessibleRelationSet");156157/* AccessibleHypertext */158LOAD_FP(getAccessibleHypertext, getAccessibleHypertextFP, "getAccessibleHypertext");159LOAD_FP(activateAccessibleHyperlink, activateAccessibleHyperlinkFP, "activateAccessibleHyperlink");160LOAD_FP(getAccessibleHyperlinkCount, getAccessibleHyperlinkCountFP, "getAccessibleHyperlinkCount");161LOAD_FP(getAccessibleHypertextExt, getAccessibleHypertextExtFP, "getAccessibleHypertextExt");162LOAD_FP(getAccessibleHypertextLinkIndex, getAccessibleHypertextLinkIndexFP, "getAccessibleHypertextLinkIndex");163LOAD_FP(getAccessibleHyperlink, getAccessibleHyperlinkFP, "getAccessibleHyperlink");164165/* Accessible KeyBinding, Icon and Action */166LOAD_FP(getAccessibleKeyBindings, getAccessibleKeyBindingsFP, "getAccessibleKeyBindings");167LOAD_FP(getAccessibleIcons, getAccessibleIconsFP, "getAccessibleIcons");168LOAD_FP(getAccessibleActions, getAccessibleActionsFP, "getAccessibleActions");169LOAD_FP(doAccessibleActions, doAccessibleActionsFP, "doAccessibleActions");170171/* AccessibleText */172LOAD_FP(GetAccessibleTextInfo, GetAccessibleTextInfoFP, "getAccessibleTextInfo");173LOAD_FP(GetAccessibleTextItems, GetAccessibleTextItemsFP, "getAccessibleTextItems");174LOAD_FP(GetAccessibleTextSelectionInfo, GetAccessibleTextSelectionInfoFP, "getAccessibleTextSelectionInfo");175LOAD_FP(GetAccessibleTextAttributes, GetAccessibleTextAttributesFP, "getAccessibleTextAttributes");176LOAD_FP(GetAccessibleTextRect, GetAccessibleTextRectFP, "getAccessibleTextRect");177LOAD_FP(GetAccessibleTextLineBounds, GetAccessibleTextLineBoundsFP, "getAccessibleTextLineBounds");178LOAD_FP(GetAccessibleTextRange, GetAccessibleTextRangeFP, "getAccessibleTextRange");179180LOAD_FP(GetCurrentAccessibleValueFromContext, GetCurrentAccessibleValueFromContextFP, "getCurrentAccessibleValueFromContext");181LOAD_FP(GetMaximumAccessibleValueFromContext, GetMaximumAccessibleValueFromContextFP, "getMaximumAccessibleValueFromContext");182LOAD_FP(GetMinimumAccessibleValueFromContext, GetMinimumAccessibleValueFromContextFP, "getMinimumAccessibleValueFromContext");183184LOAD_FP(AddAccessibleSelectionFromContext, AddAccessibleSelectionFromContextFP, "addAccessibleSelectionFromContext");185LOAD_FP(ClearAccessibleSelectionFromContext, ClearAccessibleSelectionFromContextFP, "clearAccessibleSelectionFromContext");186LOAD_FP(GetAccessibleSelectionFromContext, GetAccessibleSelectionFromContextFP, "getAccessibleSelectionFromContext");187LOAD_FP(GetAccessibleSelectionCountFromContext, GetAccessibleSelectionCountFromContextFP, "getAccessibleSelectionCountFromContext");188LOAD_FP(IsAccessibleChildSelectedFromContext, IsAccessibleChildSelectedFromContextFP, "isAccessibleChildSelectedFromContext");189LOAD_FP(RemoveAccessibleSelectionFromContext, RemoveAccessibleSelectionFromContextFP, "removeAccessibleSelectionFromContext");190LOAD_FP(SelectAllAccessibleSelectionFromContext, SelectAllAccessibleSelectionFromContextFP, "selectAllAccessibleSelectionFromContext");191192LOAD_FP(setTextContents, setTextContentsFP, "setTextContents");193LOAD_FP(getParentWithRole, getParentWithRoleFP, "getParentWithRole");194LOAD_FP(getTopLevelObject, getTopLevelObjectFP, "getTopLevelObject");195LOAD_FP(getParentWithRoleElseRoot, getParentWithRoleElseRootFP, "getParentWithRoleElseRoot");196LOAD_FP(getObjectDepth, getObjectDepthFP, "getObjectDepth");197LOAD_FP(getActiveDescendent, getActiveDescendentFP, "getActiveDescendent");198199// additional methods for Teton200LOAD_FP(getVirtualAccessibleName, getVirtualAccessibleNameFP, "getVirtualAccessibleName");201LOAD_FP(requestFocus, requestFocusFP, "requestFocus");202LOAD_FP(selectTextRange, selectTextRangeFP, "selectTextRange");203LOAD_FP(getTextAttributesInRange, getTextAttributesInRangeFP, "getTextAttributesInRange");204LOAD_FP(getVisibleChildrenCount, getVisibleChildrenCountFP, "getVisibleChildrenCount");205LOAD_FP(getVisibleChildren, getVisibleChildrenFP, "getVisibleChildren");206LOAD_FP(setCaretPosition, setCaretPositionFP, "setCaretPosition");207LOAD_FP(getCaretLocation, getCaretLocationFP, "getCaretLocation");208209LOAD_FP(getEventsWaiting, getEventsWaitingFP, "getEventsWaiting");210211theAccessBridge.Windows_run();212213theAccessBridgeInitializedFlag = TRUE;214PrintDebugString("theAccessBridgeInitializedFlag = TRUE");215return TRUE;216} else {217return FALSE;218}219}220221222BOOL shutdownAccessBridge() {223BOOL result;224DWORD error;225theAccessBridgeInitializedFlag = FALSE;226if (theAccessBridgeInstance != (HANDLE) 0) {227result = FreeLibrary(theAccessBridgeInstance);228if (result != TRUE) {229error = GetLastError();230}231return TRUE;232}233return FALSE;234}235236237void SetJavaShutdown(AccessBridge_JavaShutdownFP fp) {238if (theAccessBridgeInitializedFlag == TRUE) {239theAccessBridge.SetJavaShutdown(fp);240}241}242243void SetFocusGained(AccessBridge_FocusGainedFP fp) {244if (theAccessBridgeInitializedFlag == TRUE) {245theAccessBridge.SetFocusGained(fp);246}247}248249void SetFocusLost(AccessBridge_FocusLostFP fp) {250if (theAccessBridgeInitializedFlag == TRUE) {251theAccessBridge.SetFocusLost(fp);252}253}254255256void SetCaretUpdate(AccessBridge_CaretUpdateFP fp) {257if (theAccessBridgeInitializedFlag == TRUE) {258theAccessBridge.SetCaretUpdate(fp);259}260}261262263void SetMouseClicked(AccessBridge_MouseClickedFP fp) {264if (theAccessBridgeInitializedFlag == TRUE) {265theAccessBridge.SetMouseClicked(fp);266}267}268269void SetMouseEntered(AccessBridge_MouseEnteredFP fp) {270if (theAccessBridgeInitializedFlag == TRUE) {271theAccessBridge.SetMouseEntered(fp);272}273}274275void SetMouseExited(AccessBridge_MouseExitedFP fp) {276if (theAccessBridgeInitializedFlag == TRUE) {277theAccessBridge.SetMouseExited(fp);278}279}280281void SetMousePressed(AccessBridge_MousePressedFP fp) {282if (theAccessBridgeInitializedFlag == TRUE) {283theAccessBridge.SetMousePressed(fp);284}285}286287void SetMouseReleased(AccessBridge_MouseReleasedFP fp) {288if (theAccessBridgeInitializedFlag == TRUE) {289theAccessBridge.SetMouseReleased(fp);290}291}292293294void SetMenuCanceled(AccessBridge_MenuCanceledFP fp) {295if (theAccessBridgeInitializedFlag == TRUE) {296theAccessBridge.SetMenuCanceled(fp);297}298}299300void SetMenuDeselected(AccessBridge_MenuDeselectedFP fp) {301if (theAccessBridgeInitializedFlag == TRUE) {302theAccessBridge.SetMenuDeselected(fp);303}304}305306void SetMenuSelected(AccessBridge_MenuSelectedFP fp) {307if (theAccessBridgeInitializedFlag == TRUE) {308theAccessBridge.SetMenuSelected(fp);309}310}311312void SetPopupMenuCanceled(AccessBridge_PopupMenuCanceledFP fp) {313if (theAccessBridgeInitializedFlag == TRUE) {314theAccessBridge.SetPopupMenuCanceled(fp);315}316}317318void SetPopupMenuWillBecomeInvisible(AccessBridge_PopupMenuWillBecomeInvisibleFP fp) {319if (theAccessBridgeInitializedFlag == TRUE) {320theAccessBridge.SetPopupMenuWillBecomeInvisible(fp);321}322}323324void SetPopupMenuWillBecomeVisible(AccessBridge_PopupMenuWillBecomeVisibleFP fp) {325if (theAccessBridgeInitializedFlag == TRUE) {326theAccessBridge.SetPopupMenuWillBecomeVisible(fp);327}328}329330331void SetPropertyNameChange(AccessBridge_PropertyNameChangeFP fp) {332if (theAccessBridgeInitializedFlag == TRUE) {333theAccessBridge.SetPropertyNameChange(fp);334}335}336337void SetPropertyDescriptionChange(AccessBridge_PropertyDescriptionChangeFP fp) {338if (theAccessBridgeInitializedFlag == TRUE) {339theAccessBridge.SetPropertyDescriptionChange(fp);340}341}342343void SetPropertyStateChange(AccessBridge_PropertyStateChangeFP fp) {344if (theAccessBridgeInitializedFlag == TRUE) {345theAccessBridge.SetPropertyStateChange(fp);346}347}348349void SetPropertyValueChange(AccessBridge_PropertyValueChangeFP fp) {350if (theAccessBridgeInitializedFlag == TRUE) {351theAccessBridge.SetPropertyValueChange(fp);352}353}354355void SetPropertySelectionChange(AccessBridge_PropertySelectionChangeFP fp) {356if (theAccessBridgeInitializedFlag == TRUE) {357theAccessBridge.SetPropertySelectionChange(fp);358}359}360361void SetPropertyTextChange(AccessBridge_PropertyTextChangeFP fp) {362if (theAccessBridgeInitializedFlag == TRUE) {363theAccessBridge.SetPropertyTextChange(fp);364}365}366367void SetPropertyCaretChange(AccessBridge_PropertyCaretChangeFP fp) {368if (theAccessBridgeInitializedFlag == TRUE) {369theAccessBridge.SetPropertyCaretChange(fp);370}371}372373void SetPropertyVisibleDataChange(AccessBridge_PropertyVisibleDataChangeFP fp) {374if (theAccessBridgeInitializedFlag == TRUE) {375theAccessBridge.SetPropertyVisibleDataChange(fp);376}377}378379void SetPropertyChildChange(AccessBridge_PropertyChildChangeFP fp) {380if (theAccessBridgeInitializedFlag == TRUE) {381theAccessBridge.SetPropertyChildChange(fp);382}383}384385void SetPropertyActiveDescendentChange(AccessBridge_PropertyActiveDescendentChangeFP fp) {386if (theAccessBridgeInitializedFlag == TRUE) {387theAccessBridge.SetPropertyActiveDescendentChange(fp);388}389}390391void SetPropertyTableModelChange(AccessBridge_PropertyTableModelChangeFP fp) {392if (theAccessBridgeInitializedFlag == TRUE) {393theAccessBridge.SetPropertyTableModelChange(fp);394}395}396397/**398* General routines399*/400void ReleaseJavaObject(long vmID, Java_Object object) {401if (theAccessBridgeInitializedFlag == TRUE) {402theAccessBridge.ReleaseJavaObject(vmID, object);403}404}405406BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info) {407if (theAccessBridgeInitializedFlag == TRUE) {408return theAccessBridge.GetVersionInfo(vmID, info);409}410return FALSE;411}412413414/**415* Window routines416*/417BOOL IsJavaWindow(HWND window) {418if (theAccessBridgeInitializedFlag == TRUE) {419BOOL ret ;420ret = theAccessBridge.IsJavaWindow(window);421return ret ;422423}424return FALSE;425}426427428/**429* Returns the virtual machine ID and AccessibleContext for a top-level window430*/431BOOL GetAccessibleContextFromHWND(HWND target, long *vmID, AccessibleContext *ac) {432if (theAccessBridgeInitializedFlag == TRUE) {433return theAccessBridge.GetAccessibleContextFromHWND(target, vmID, ac);434}435return FALSE;436}437438/**439* Returns the HWND from the AccessibleContext of a top-level window. Returns 0440* on error or if the AccessibleContext does not refer to a top-level window.441*/442HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accesibleContext) {443if (theAccessBridgeInitializedFlag == TRUE) {444return theAccessBridge.getHWNDFromAccessibleContext(vmID, accesibleContext);445}446return (HWND)0;447}448449/**450* returns whether two objects are the same451*/452BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) {453if (theAccessBridgeInitializedFlag == TRUE) {454return theAccessBridge.IsSameObject(vmID, obj1, obj2);455}456return FALSE;457}458459/**460* Sets editable text contents. The AccessibleContext must implement AccessibleEditableText and461* be editable. The maximum text length is MAX_STRING_SIZE - 1.462* Returns whether successful463*/464BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text) {465466if (theAccessBridgeInitializedFlag == TRUE) {467return theAccessBridge.setTextContents(vmID, accessibleContext, text);468}469return FALSE;470}471472/**473* Returns the Accessible Context with the specified role that is the474* ancestor of a given object. The role is one of the role strings475* defined in AccessBridgePackages.h476* If there is no ancestor object that has the specified role,477* returns (AccessibleContext)0.478*/479AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext,480const wchar_t *role) {481482if (theAccessBridgeInitializedFlag == TRUE) {483return theAccessBridge.getParentWithRole(vmID, accessibleContext, role);484}485return (AccessibleContext)0;486}487488/**489* Returns the Accessible Context with the specified role that is the490* ancestor of a given object. The role is one of the role strings491* defined in AccessBridgePackages.h. If an object with the specified492* role does not exist, returns the top level object for the Java Window.493* Returns (AccessibleContext)0 on error.494*/495AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext,496const wchar_t *role) {497498if (theAccessBridgeInitializedFlag == TRUE) {499return theAccessBridge.getParentWithRoleElseRoot(vmID, accessibleContext, role);500}501return (AccessibleContext)0;502}503504/**505* Returns the Accessible Context for the top level object in506* a Java Window. This is same Accessible Context that is obtained507* from GetAccessibleContextFromHWND for that window. Returns508* (AccessibleContext)0 on error.509*/510AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext) {511512if (theAccessBridgeInitializedFlag == TRUE) {513return theAccessBridge.getTopLevelObject(vmID, accessibleContext);514}515return (AccessibleContext)0;516}517518/**519* Returns how deep in the object hierarchy a given object is.520* The top most object in the object hierarchy has an object depth of 0.521* Returns -1 on error.522*/523int getObjectDepth (const long vmID, const AccessibleContext accessibleContext) {524525if (theAccessBridgeInitializedFlag == TRUE) {526return theAccessBridge.getObjectDepth(vmID, accessibleContext);527}528return -1;529}530531/**532* Returns the Accessible Context of the current ActiveDescendent of an object.533* This method assumes the ActiveDescendent is the component that is currently534* selected in a container object.535* Returns (AccessibleContext)0 on error or if there is no selection.536*/537AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) {538539if (theAccessBridgeInitializedFlag == TRUE) {540return theAccessBridge.getActiveDescendent(vmID, accessibleContext);541}542return (AccessibleContext)0;543}544545546/**547* Accessible Context routines548*/549BOOL GetAccessibleContextAt(long vmID, AccessibleContext acParent,550jint x, jint y, AccessibleContext *ac) {551if (theAccessBridgeInitializedFlag == TRUE) {552return theAccessBridge.GetAccessibleContextAt(vmID, acParent, x, y, ac);553}554return FALSE;555}556557BOOL GetAccessibleContextWithFocus(HWND window, long *vmID, AccessibleContext *ac) {558if (theAccessBridgeInitializedFlag == TRUE) {559return theAccessBridge.GetAccessibleContextWithFocus(window, vmID, ac);560}561return FALSE;562}563564BOOL GetAccessibleContextInfo(long vmID, AccessibleContext ac, AccessibleContextInfo *info) {565if (theAccessBridgeInitializedFlag == TRUE) {566return theAccessBridge.GetAccessibleContextInfo(vmID, ac, info);567}568return FALSE;569}570571AccessibleContext GetAccessibleChildFromContext(long vmID, AccessibleContext ac, jint index) {572if (theAccessBridgeInitializedFlag == TRUE) {573return theAccessBridge.GetAccessibleChildFromContext(vmID, ac, index);574}575return (AccessibleContext) 0;576}577578AccessibleContext GetAccessibleParentFromContext(long vmID, AccessibleContext ac) {579if (theAccessBridgeInitializedFlag == TRUE) {580return theAccessBridge.GetAccessibleParentFromContext(vmID, ac);581}582return (AccessibleContext) 0;583}584585/* begin AccessibleTable routines */586587/*588* get information about an AccessibleTable589*/590BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {591if (theAccessBridgeInitializedFlag == TRUE) {592return theAccessBridge.getAccessibleTableInfo(vmID, acParent, tableInfo);593}594return FALSE;595}596597/*598* get information about an AccessibleTable cell599*/600BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable,601jint row, jint column, AccessibleTableCellInfo *tableCellInfo) {602if (theAccessBridgeInitializedFlag == TRUE) {603return theAccessBridge.getAccessibleTableCellInfo(vmID, accessibleTable, row, column, tableCellInfo);604}605return FALSE;606}607608/*609* get information about an AccessibleTable row header610*/611BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {612if (theAccessBridgeInitializedFlag == TRUE) {613return theAccessBridge.getAccessibleTableRowHeader(vmID, acParent, tableInfo);614}615return FALSE;616}617618/*619* get information about an AccessibleTable column header620*/621BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {622623if (theAccessBridgeInitializedFlag == TRUE) {624return theAccessBridge.getAccessibleTableColumnHeader(vmID, acParent, tableInfo);625}626return FALSE;627}628629/*630* return a description of an AccessibleTable row header631*/632AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row) {633if (theAccessBridgeInitializedFlag == TRUE) {634return theAccessBridge.getAccessibleTableRowDescription(vmID, acParent, row);635}636return (AccessibleContext)0;637}638639/*640* return a description of an AccessibleTable column header641*/642AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column) {643if (theAccessBridgeInitializedFlag == TRUE) {644return theAccessBridge.getAccessibleTableColumnDescription(vmID, acParent, column);645}646return (AccessibleContext)0;647}648649/*650* return the number of rows selected in an AccessibleTable651*/652jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table) {653if (theAccessBridgeInitializedFlag == TRUE) {654return theAccessBridge.getAccessibleTableRowSelectionCount(vmID, table);655}656return -1;657}658659/*660* return whether a row is selected in an AccessibleTable661*/662BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row) {663if (theAccessBridgeInitializedFlag == TRUE) {664return theAccessBridge.isAccessibleTableRowSelected(vmID, table, row);665}666return FALSE;667}668669/*670* get an array of selected rows in an AccessibleTable671*/672BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections) {673if (theAccessBridgeInitializedFlag == TRUE) {674return theAccessBridge.getAccessibleTableRowSelections(vmID, table, count, selections);675}676return FALSE;677}678679/*680* return the number of columns selected in an AccessibleTable681*/682jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table) {683if (theAccessBridgeInitializedFlag == TRUE) {684return theAccessBridge.getAccessibleTableColumnSelectionCount(vmID, table);685}686return -1;687}688689/*690* return whether a column is selected in an AccessibleTable691*/692BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column) {693if (theAccessBridgeInitializedFlag == TRUE) {694return theAccessBridge.isAccessibleTableColumnSelected(vmID, table, column);695}696return FALSE;697}698699/*700* get an array of columns selected in an AccessibleTable701*/702BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections) {703if (theAccessBridgeInitializedFlag == TRUE) {704return theAccessBridge.getAccessibleTableColumnSelections(vmID, table, count, selections);705}706return FALSE;707}708709/*710* return the row number for a cell at a given index711*/712jint713getAccessibleTableRow(long vmID, AccessibleTable table, jint index) {714if (theAccessBridgeInitializedFlag == TRUE) {715return theAccessBridge.getAccessibleTableRow(vmID, table, index);716}717return -1;718}719720/*721* return the column number for a cell at a given index722*/723jint724getAccessibleTableColumn(long vmID, AccessibleTable table, jint index) {725if (theAccessBridgeInitializedFlag == TRUE) {726return theAccessBridge.getAccessibleTableColumn(vmID, table, index);727}728return -1;729}730731/*732* return the index of a cell at a given row and column733*/734jint735getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column) {736if (theAccessBridgeInitializedFlag == TRUE) {737return theAccessBridge.getAccessibleTableIndex(vmID, table, row, column);738}739return -1;740}741742/* end AccessibleTable routines */743744745/**746* Accessible Text routines747*/748BOOL GetAccessibleTextInfo(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y) {749if (theAccessBridgeInitializedFlag == TRUE) {750return theAccessBridge.GetAccessibleTextInfo(vmID, at, textInfo, x, y);751}752return FALSE;753}754755BOOL GetAccessibleTextItems(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index) {756if (theAccessBridgeInitializedFlag == TRUE) {757return theAccessBridge.GetAccessibleTextItems(vmID, at, textItems, index);758}759return FALSE;760}761762BOOL GetAccessibleTextSelectionInfo(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection) {763if (theAccessBridgeInitializedFlag == TRUE) {764return theAccessBridge.GetAccessibleTextSelectionInfo(vmID, at, textSelection);765}766return FALSE;767}768769BOOL GetAccessibleTextAttributes(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes) {770if (theAccessBridgeInitializedFlag == TRUE) {771return theAccessBridge.GetAccessibleTextAttributes(vmID, at, index, attributes);772}773return FALSE;774}775776BOOL GetAccessibleTextRect(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index) {777if (theAccessBridgeInitializedFlag == TRUE) {778return theAccessBridge.GetAccessibleTextRect(vmID, at, rectInfo, index);779}780return FALSE;781}782783BOOL GetAccessibleTextLineBounds(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex) {784if (theAccessBridgeInitializedFlag == TRUE) {785return theAccessBridge.GetAccessibleTextLineBounds(vmID, at, index, startIndex, endIndex);786}787return FALSE;788}789790BOOL GetAccessibleTextRange(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len) {791if (theAccessBridgeInitializedFlag == TRUE) {792return theAccessBridge.GetAccessibleTextRange(vmID, at, start, end, text, len);793}794return FALSE;795}796797/**798* AccessibleRelationSet routines799*/800BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext,801AccessibleRelationSetInfo *relationSetInfo) {802if (theAccessBridgeInitializedFlag == TRUE) {803return theAccessBridge.getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo);804}805return FALSE;806}807808/**809* AccessibleHypertext routines810*/811812// Gets AccessibleHypertext for an AccessibleContext813BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext,814AccessibleHypertextInfo *hypertextInfo) {815if (theAccessBridgeInitializedFlag == TRUE) {816return theAccessBridge.getAccessibleHypertext(vmID, accessibleContext, hypertextInfo);817}818return FALSE;819}820821// Activates an AccessibleHyperlink for an AccessibleContext822BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext,823AccessibleHyperlink accessibleHyperlink) {824if (theAccessBridgeInitializedFlag == TRUE) {825return theAccessBridge.activateAccessibleHyperlink(vmID, accessibleContext, accessibleHyperlink);826}827return FALSE;828}829830/*831* Returns the number of hyperlinks in a component832* Maps to AccessibleHypertext.getLinkCount.833* Returns -1 on error.834*/835jint getAccessibleHyperlinkCount(const long vmID,836const AccessibleContext accessibleContext) {837838if (theAccessBridgeInitializedFlag == TRUE) {839return theAccessBridge.getAccessibleHyperlinkCount(vmID, accessibleContext);840}841return -1;842}843844/*845* This method is used to iterate through the hyperlinks in a component. It846* returns hypertext information for a component starting at hyperlink index847* nStartIndex. No more than MAX_HYPERLINKS AccessibleHypertextInfo objects will848* be returned for each call to this method.849* returns FALSE on error.850*/851BOOL getAccessibleHypertextExt(const long vmID,852const AccessibleContext accessibleContext,853const jint nStartIndex,854/* OUT */ AccessibleHypertextInfo *hypertextInfo) {855856if (theAccessBridgeInitializedFlag == TRUE) {857return theAccessBridge.getAccessibleHypertextExt(vmID,858accessibleContext,859nStartIndex,860hypertextInfo);861}862return FALSE;863}864865/*866* Returns the index into an array of hyperlinks that is associated with867* a character index in document;868* Maps to AccessibleHypertext.getLinkIndex.869* Returns -1 on error.870*/871jint getAccessibleHypertextLinkIndex(const long vmID,872const AccessibleHypertext hypertext,873const jint nIndex) {874875if (theAccessBridgeInitializedFlag == TRUE) {876return theAccessBridge.getAccessibleHypertextLinkIndex(vmID,877hypertext,878nIndex);879}880return -1;881}882883/*884* Returns the nth hyperlink in a document.885* Maps to AccessibleHypertext.getLink.886* Returns -1 on error887*/888BOOL getAccessibleHyperlink(const long vmID,889const AccessibleHypertext hypertext,890const jint nIndex,891/* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) {892893if (theAccessBridgeInitializedFlag == TRUE) {894return theAccessBridge.getAccessibleHyperlink(vmID,895hypertext,896nIndex,897hyperlinkInfo);898}899return FALSE;900}901902903/* Accessible KeyBindings, Icons and Actions */904BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext,905AccessibleKeyBindings *keyBindings) {906if (theAccessBridgeInitializedFlag == TRUE) {907return theAccessBridge.getAccessibleKeyBindings(vmID, accessibleContext, keyBindings);908}909return FALSE;910}911912BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext,913AccessibleIcons *icons) {914if (theAccessBridgeInitializedFlag == TRUE) {915return theAccessBridge.getAccessibleIcons(vmID, accessibleContext, icons);916}917return FALSE;918}919920BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext,921AccessibleActions *actions) {922if (theAccessBridgeInitializedFlag == TRUE) {923return theAccessBridge.getAccessibleActions(vmID, accessibleContext, actions);924}925return FALSE;926}927928BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext,929AccessibleActionsToDo *actionsToDo, jint *failure) {930if (theAccessBridgeInitializedFlag == TRUE) {931return theAccessBridge.doAccessibleActions(vmID, accessibleContext, actionsToDo, failure);932}933return FALSE;934}935936/**937* Accessible Value routines938*/939BOOL GetCurrentAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {940if (theAccessBridgeInitializedFlag == TRUE) {941return theAccessBridge.GetCurrentAccessibleValueFromContext(vmID, av, value, len);942}943return FALSE;944}945946BOOL GetMaximumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {947if (theAccessBridgeInitializedFlag == TRUE) {948return theAccessBridge.GetMaximumAccessibleValueFromContext(vmID, av, value, len);949}950return FALSE;951}952953BOOL GetMinimumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {954if (theAccessBridgeInitializedFlag == TRUE) {955return theAccessBridge.GetMinimumAccessibleValueFromContext(vmID, av, value, len);956}957return FALSE;958}959960961/**962* Accessible Selection routines963*/964void addAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {965if (theAccessBridgeInitializedFlag == TRUE) {966theAccessBridge.AddAccessibleSelectionFromContext(vmID, as, i);967}968}969970void clearAccessibleSelectionFromContext(long vmID, AccessibleSelection as) {971if (theAccessBridgeInitializedFlag == TRUE) {972theAccessBridge.ClearAccessibleSelectionFromContext(vmID, as);973}974}975976JOBJECT64 GetAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {977if (theAccessBridgeInitializedFlag == TRUE) {978return theAccessBridge.GetAccessibleSelectionFromContext(vmID, as, i);979}980return (JOBJECT64) 0;981}982983int GetAccessibleSelectionCountFromContext(long vmID, AccessibleSelection as) {984if (theAccessBridgeInitializedFlag == TRUE) {985return theAccessBridge.GetAccessibleSelectionCountFromContext(vmID, as);986}987return -1;988}989990BOOL IsAccessibleChildSelectedFromContext(long vmID, AccessibleSelection as, int i) {991if (theAccessBridgeInitializedFlag == TRUE) {992return theAccessBridge.IsAccessibleChildSelectedFromContext(vmID, as, i);993}994return FALSE;995}996997void RemoveAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {998if (theAccessBridgeInitializedFlag == TRUE) {999theAccessBridge.RemoveAccessibleSelectionFromContext(vmID, as, i);1000}1001}10021003void SelectAllAccessibleSelectionFromContext(long vmID, AccessibleSelection as) {1004if (theAccessBridgeInitializedFlag == TRUE) {1005theAccessBridge.SelectAllAccessibleSelectionFromContext(vmID, as);1006}1007}10081009/**1010* Additional methods for Teton1011*/10121013/**1014* Gets the AccessibleName for a component based upon the JAWS algorithm. Returns1015* whether successful.1016*1017* Bug ID 4916682 - Implement JAWS AccessibleName policy1018*/1019BOOL getVirtualAccessibleName(const long vmID, const AccessibleContext accessibleContext,1020wchar_t *name, int len) {1021if (theAccessBridgeInitializedFlag == TRUE) {1022return theAccessBridge.getVirtualAccessibleName(vmID, accessibleContext, name, len);1023}1024return FALSE;1025}10261027/**1028* Request focus for a component. Returns whether successful;1029*1030* Bug ID 4944757 - requestFocus method needed1031*/1032BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext) {1033if (theAccessBridgeInitializedFlag == TRUE) {1034return theAccessBridge.requestFocus(vmID, accessibleContext);1035}1036return FALSE;1037}10381039/**1040* Selects text between two indices. Selection includes the text at the start index1041* and the text at the end index. Returns whether successful;1042*1043* Bug ID 4944758 - selectTextRange method needed1044*/1045BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext,1046const int startIndex, const int endIndex) {1047if (theAccessBridgeInitializedFlag == TRUE) {1048return theAccessBridge.selectTextRange(vmID, accessibleContext, startIndex, endIndex);1049}1050return FALSE;1051}10521053/**1054* Get text attributes between two indices. The attribute list includes the text at the1055* start index and the text at the end index. Returns whether successful;1056*1057* Bug ID 4944761 - getTextAttributes between two indices method needed1058*/1059BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext,1060const int startIndex, const int endIndex,1061AccessibleTextAttributesInfo *attributes, short *len) {1062if (theAccessBridgeInitializedFlag == TRUE) {1063return theAccessBridge.getTextAttributesInRange(vmID, accessibleContext, startIndex,1064endIndex, attributes, len);1065}1066return FALSE;1067}10681069/**1070* Returns the number of visible children of a component. Returns -1 on error.1071*1072* Bug ID 4944762- getVisibleChildren for list-like components needed1073*/1074int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext) {1075if (theAccessBridgeInitializedFlag == TRUE) {1076return theAccessBridge.getVisibleChildrenCount(vmID, accessibleContext);1077}1078return FALSE;1079}10801081/**1082* Gets the visible children of an AccessibleContext. Returns whether successful;1083*1084* Bug ID 4944762- getVisibleChildren for list-like components needed1085*/1086BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext,1087const int startIndex, VisibleChildrenInfo *visibleChildrenInfo) {1088if (theAccessBridgeInitializedFlag == TRUE) {1089return theAccessBridge.getVisibleChildren(vmID, accessibleContext, startIndex,1090visibleChildrenInfo);1091}1092return FALSE;1093}10941095/**1096* Set the caret to a text position. Returns whether successful;1097*1098* Bug ID 4944770 - setCaretPosition method needed1099*/1100BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext,1101const int position) {1102if (theAccessBridgeInitializedFlag == TRUE) {1103return theAccessBridge.setCaretPosition(vmID, accessibleContext, position);1104}1105return FALSE;1106}11071108/**1109* Gets the text caret location1110*/1111BOOL getCaretLocation(long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index) {1112if (theAccessBridgeInitializedFlag == TRUE) {1113return theAccessBridge.getCaretLocation(vmID, ac, rectInfo, index);1114}1115return FALSE;1116}11171118/**1119* Gets the number of events waiting to fire1120*/1121int getEventsWaiting() {1122if (theAccessBridgeInitializedFlag == TRUE) {1123return theAccessBridge.getEventsWaiting();1124}1125return FALSE;1126}11271128#ifdef __cplusplus1129}1130#endif113111321133