Path: blob/master/src/jdk.accessibility/windows/native/bridge/AccessBridgeCalls.c
40957 views
/*1*2* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7*8* - Redistributions of source code must retain the above copyright9* notice, this list of conditions and the following disclaimer.10*11* - Redistributions in binary form must reproduce the above copyright12* notice, this list of conditions and the following disclaimer in the13* documentation and/or other materials provided with the distribution.14*15* - Neither the name of Oracle nor the names of its16* contributors may be used to endorse or promote products derived17* from this software without specific prior written permission.18*19* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS20* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,21* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR22* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR23* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,24* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,25* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR26* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF27* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING28* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/3132/*33* Wrapper functions around calls to the AccessBridge DLL34*/353637#include <windows.h>38#include <jni.h>394041//#define ACCESSBRIDGE_3242//#define ACCESSBRIDGE_644344#include "AccessBridgeCalls.h"4546#ifdef __cplusplus47extern "C" {48#endif4950HINSTANCE theAccessBridgeInstance;51AccessBridgeFPs theAccessBridge;5253BOOL theAccessBridgeInitializedFlag = FALSE;5455#define LOAD_FP(result, type, name) \56if ((theAccessBridge.result = \57(type) GetProcAddress(theAccessBridgeInstance, name)) == (type) 0) { \58return FALSE; \59}6061BOOL initializeAccessBridge() {6263#ifdef ACCESSBRIDGE_ARCH_32 // For 32 bit AT interfacing with Java on 64 bit OS64theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-32");65#else66#ifdef ACCESSBRIDGE_ARCH_64 // For 64 bit AT interfacing with Java on 64 bit OS67theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-64");68#else // For 32 bit AT interfacing with Java on 32 bit OS69theAccessBridgeInstance = 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;214return TRUE;215} else {216return FALSE;217}218}219220221BOOL shutdownAccessBridge() {222BOOL result;223DWORD error;224theAccessBridgeInitializedFlag = FALSE;225if (theAccessBridgeInstance != (HANDLE) 0) {226result = FreeLibrary(theAccessBridgeInstance);227if (result != TRUE) {228error = GetLastError();229}230return TRUE;231}232return FALSE;233}234235236void SetJavaShutdown(AccessBridge_JavaShutdownFP fp) {237if (theAccessBridgeInitializedFlag == TRUE) {238theAccessBridge.SetJavaShutdown(fp);239}240}241242void SetFocusGained(AccessBridge_FocusGainedFP fp) {243if (theAccessBridgeInitializedFlag == TRUE) {244theAccessBridge.SetFocusGained(fp);245}246}247248void SetFocusLost(AccessBridge_FocusLostFP fp) {249if (theAccessBridgeInitializedFlag == TRUE) {250theAccessBridge.SetFocusLost(fp);251}252}253254255void SetCaretUpdate(AccessBridge_CaretUpdateFP fp) {256if (theAccessBridgeInitializedFlag == TRUE) {257theAccessBridge.SetCaretUpdate(fp);258}259}260261262void SetMouseClicked(AccessBridge_MouseClickedFP fp) {263if (theAccessBridgeInitializedFlag == TRUE) {264theAccessBridge.SetMouseClicked(fp);265}266}267268void SetMouseEntered(AccessBridge_MouseEnteredFP fp) {269if (theAccessBridgeInitializedFlag == TRUE) {270theAccessBridge.SetMouseEntered(fp);271}272}273274void SetMouseExited(AccessBridge_MouseExitedFP fp) {275if (theAccessBridgeInitializedFlag == TRUE) {276theAccessBridge.SetMouseExited(fp);277}278}279280void SetMousePressed(AccessBridge_MousePressedFP fp) {281if (theAccessBridgeInitializedFlag == TRUE) {282theAccessBridge.SetMousePressed(fp);283}284}285286void SetMouseReleased(AccessBridge_MouseReleasedFP fp) {287if (theAccessBridgeInitializedFlag == TRUE) {288theAccessBridge.SetMouseReleased(fp);289}290}291292293void SetMenuCanceled(AccessBridge_MenuCanceledFP fp) {294if (theAccessBridgeInitializedFlag == TRUE) {295theAccessBridge.SetMenuCanceled(fp);296}297}298299void SetMenuDeselected(AccessBridge_MenuDeselectedFP fp) {300if (theAccessBridgeInitializedFlag == TRUE) {301theAccessBridge.SetMenuDeselected(fp);302}303}304305void SetMenuSelected(AccessBridge_MenuSelectedFP fp) {306if (theAccessBridgeInitializedFlag == TRUE) {307theAccessBridge.SetMenuSelected(fp);308}309}310311void SetPopupMenuCanceled(AccessBridge_PopupMenuCanceledFP fp) {312if (theAccessBridgeInitializedFlag == TRUE) {313theAccessBridge.SetPopupMenuCanceled(fp);314}315}316317void SetPopupMenuWillBecomeInvisible(AccessBridge_PopupMenuWillBecomeInvisibleFP fp) {318if (theAccessBridgeInitializedFlag == TRUE) {319theAccessBridge.SetPopupMenuWillBecomeInvisible(fp);320}321}322323void SetPopupMenuWillBecomeVisible(AccessBridge_PopupMenuWillBecomeVisibleFP fp) {324if (theAccessBridgeInitializedFlag == TRUE) {325theAccessBridge.SetPopupMenuWillBecomeVisible(fp);326}327}328329330void SetPropertyNameChange(AccessBridge_PropertyNameChangeFP fp) {331if (theAccessBridgeInitializedFlag == TRUE) {332theAccessBridge.SetPropertyNameChange(fp);333}334}335336void SetPropertyDescriptionChange(AccessBridge_PropertyDescriptionChangeFP fp) {337if (theAccessBridgeInitializedFlag == TRUE) {338theAccessBridge.SetPropertyDescriptionChange(fp);339}340}341342void SetPropertyStateChange(AccessBridge_PropertyStateChangeFP fp) {343if (theAccessBridgeInitializedFlag == TRUE) {344theAccessBridge.SetPropertyStateChange(fp);345}346}347348void SetPropertyValueChange(AccessBridge_PropertyValueChangeFP fp) {349if (theAccessBridgeInitializedFlag == TRUE) {350theAccessBridge.SetPropertyValueChange(fp);351}352}353354void SetPropertySelectionChange(AccessBridge_PropertySelectionChangeFP fp) {355if (theAccessBridgeInitializedFlag == TRUE) {356theAccessBridge.SetPropertySelectionChange(fp);357}358}359360void SetPropertyTextChange(AccessBridge_PropertyTextChangeFP fp) {361if (theAccessBridgeInitializedFlag == TRUE) {362theAccessBridge.SetPropertyTextChange(fp);363}364}365366void SetPropertyCaretChange(AccessBridge_PropertyCaretChangeFP fp) {367if (theAccessBridgeInitializedFlag == TRUE) {368theAccessBridge.SetPropertyCaretChange(fp);369}370}371372void SetPropertyVisibleDataChange(AccessBridge_PropertyVisibleDataChangeFP fp) {373if (theAccessBridgeInitializedFlag == TRUE) {374theAccessBridge.SetPropertyVisibleDataChange(fp);375}376}377378void SetPropertyChildChange(AccessBridge_PropertyChildChangeFP fp) {379if (theAccessBridgeInitializedFlag == TRUE) {380theAccessBridge.SetPropertyChildChange(fp);381}382}383384void SetPropertyActiveDescendentChange(AccessBridge_PropertyActiveDescendentChangeFP fp) {385if (theAccessBridgeInitializedFlag == TRUE) {386theAccessBridge.SetPropertyActiveDescendentChange(fp);387}388}389390void SetPropertyTableModelChange(AccessBridge_PropertyTableModelChangeFP fp) {391if (theAccessBridgeInitializedFlag == TRUE) {392theAccessBridge.SetPropertyTableModelChange(fp);393}394}395396/**397* General routines398*/399void ReleaseJavaObject(long vmID, Java_Object object) {400if (theAccessBridgeInitializedFlag == TRUE) {401theAccessBridge.ReleaseJavaObject(vmID, object);402}403}404405BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info) {406if (theAccessBridgeInitializedFlag == TRUE) {407return theAccessBridge.GetVersionInfo(vmID, info);408}409return FALSE;410}411412413/**414* Window routines415*/416BOOL IsJavaWindow(HWND window) {417if (theAccessBridgeInitializedFlag == TRUE) {418BOOL ret ;419ret = theAccessBridge.IsJavaWindow(window);420return ret ;421422}423return FALSE;424}425426427/**428* Returns the virtual machine ID and AccessibleContext for a top-level window429*/430BOOL GetAccessibleContextFromHWND(HWND target, long *vmID, AccessibleContext *ac) {431if (theAccessBridgeInitializedFlag == TRUE) {432return theAccessBridge.GetAccessibleContextFromHWND(target, vmID, ac);433}434return FALSE;435}436437/**438* Returns the HWND from the AccessibleContext of a top-level window. Returns 0439* on error or if the AccessibleContext does not refer to a top-level window.440*/441HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accesibleContext) {442if (theAccessBridgeInitializedFlag == TRUE) {443return theAccessBridge.getHWNDFromAccessibleContext(vmID, accesibleContext);444}445return (HWND)0;446}447448/**449* returns whether two objects are the same450*/451BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) {452if (theAccessBridgeInitializedFlag == TRUE) {453return theAccessBridge.IsSameObject(vmID, obj1, obj2);454}455return FALSE;456}457458/**459* Sets editable text contents. The AccessibleContext must implement AccessibleEditableText and460* be editable. The maximum text length is MAX_STRING_SIZE - 1.461* Returns whether successful462*/463BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text) {464465if (theAccessBridgeInitializedFlag == TRUE) {466return theAccessBridge.setTextContents(vmID, accessibleContext, text);467}468return FALSE;469}470471/**472* Returns the Accessible Context with the specified role that is the473* ancestor of a given object. The role is one of the role strings474* defined in AccessBridgePackages.h475* If there is no ancestor object that has the specified role,476* returns (AccessibleContext)0.477*/478AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext,479const wchar_t *role) {480481if (theAccessBridgeInitializedFlag == TRUE) {482return theAccessBridge.getParentWithRole(vmID, accessibleContext, role);483}484return (AccessibleContext)0;485}486487/**488* Returns the Accessible Context with the specified role that is the489* ancestor of a given object. The role is one of the role strings490* defined in AccessBridgePackages.h. If an object with the specified491* role does not exist, returns the top level object for the Java Window.492* Returns (AccessibleContext)0 on error.493*/494AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext,495const wchar_t *role) {496497if (theAccessBridgeInitializedFlag == TRUE) {498return theAccessBridge.getParentWithRoleElseRoot(vmID, accessibleContext, role);499}500return (AccessibleContext)0;501}502503/**504* Returns the Accessible Context for the top level object in505* a Java Window. This is same Accessible Context that is obtained506* from GetAccessibleContextFromHWND for that window. Returns507* (AccessibleContext)0 on error.508*/509AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext) {510511if (theAccessBridgeInitializedFlag == TRUE) {512return theAccessBridge.getTopLevelObject(vmID, accessibleContext);513}514return (AccessibleContext)0;515}516517/**518* Returns how deep in the object hierarchy a given object is.519* The top most object in the object hierarchy has an object depth of 0.520* Returns -1 on error.521*/522int getObjectDepth (const long vmID, const AccessibleContext accessibleContext) {523524if (theAccessBridgeInitializedFlag == TRUE) {525return theAccessBridge.getObjectDepth(vmID, accessibleContext);526}527return -1;528}529530/**531* Returns the Accessible Context of the current ActiveDescendent of an object.532* This method assumes the ActiveDescendent is the component that is currently533* selected in a container object.534* Returns (AccessibleContext)0 on error or if there is no selection.535*/536AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) {537538if (theAccessBridgeInitializedFlag == TRUE) {539return theAccessBridge.getActiveDescendent(vmID, accessibleContext);540}541return (AccessibleContext)0;542}543544545/**546* Accessible Context routines547*/548BOOL GetAccessibleContextAt(long vmID, AccessibleContext acParent,549jint x, jint y, AccessibleContext *ac) {550if (theAccessBridgeInitializedFlag == TRUE) {551return theAccessBridge.GetAccessibleContextAt(vmID, acParent, x, y, ac);552}553return FALSE;554}555556BOOL GetAccessibleContextWithFocus(HWND window, long *vmID, AccessibleContext *ac) {557if (theAccessBridgeInitializedFlag == TRUE) {558return theAccessBridge.GetAccessibleContextWithFocus(window, vmID, ac);559}560return FALSE;561}562563BOOL GetAccessibleContextInfo(long vmID, AccessibleContext ac, AccessibleContextInfo *info) {564if (theAccessBridgeInitializedFlag == TRUE) {565return theAccessBridge.GetAccessibleContextInfo(vmID, ac, info);566}567return FALSE;568}569570AccessibleContext GetAccessibleChildFromContext(long vmID, AccessibleContext ac, jint index) {571if (theAccessBridgeInitializedFlag == TRUE) {572return theAccessBridge.GetAccessibleChildFromContext(vmID, ac, index);573}574return (AccessibleContext) 0;575}576577AccessibleContext GetAccessibleParentFromContext(long vmID, AccessibleContext ac) {578if (theAccessBridgeInitializedFlag == TRUE) {579return theAccessBridge.GetAccessibleParentFromContext(vmID, ac);580}581return (AccessibleContext) 0;582}583584/* begin AccessibleTable routines */585586/*587* get information about an AccessibleTable588*/589BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {590if (theAccessBridgeInitializedFlag == TRUE) {591return theAccessBridge.getAccessibleTableInfo(vmID, acParent, tableInfo);592}593return FALSE;594}595596/*597* get information about an AccessibleTable cell598*/599BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable,600jint row, jint column, AccessibleTableCellInfo *tableCellInfo) {601if (theAccessBridgeInitializedFlag == TRUE) {602return theAccessBridge.getAccessibleTableCellInfo(vmID, accessibleTable, row, column, tableCellInfo);603}604return FALSE;605}606607/*608* get information about an AccessibleTable row header609*/610BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {611if (theAccessBridgeInitializedFlag == TRUE) {612return theAccessBridge.getAccessibleTableRowHeader(vmID, acParent, tableInfo);613}614return FALSE;615}616617/*618* get information about an AccessibleTable column header619*/620BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) {621622if (theAccessBridgeInitializedFlag == TRUE) {623return theAccessBridge.getAccessibleTableColumnHeader(vmID, acParent, tableInfo);624}625return FALSE;626}627628/*629* return a description of an AccessibleTable row header630*/631AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row) {632if (theAccessBridgeInitializedFlag == TRUE) {633return theAccessBridge.getAccessibleTableRowDescription(vmID, acParent, row);634}635return (AccessibleContext)0;636}637638/*639* return a description of an AccessibleTable column header640*/641AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column) {642if (theAccessBridgeInitializedFlag == TRUE) {643return theAccessBridge.getAccessibleTableColumnDescription(vmID, acParent, column);644}645return (AccessibleContext)0;646}647648/*649* return the number of rows selected in an AccessibleTable650*/651jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table) {652if (theAccessBridgeInitializedFlag == TRUE) {653return theAccessBridge.getAccessibleTableRowSelectionCount(vmID, table);654}655return -1;656}657658/*659* return whether a row is selected in an AccessibleTable660*/661BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row) {662if (theAccessBridgeInitializedFlag == TRUE) {663return theAccessBridge.isAccessibleTableRowSelected(vmID, table, row);664}665return FALSE;666}667668/*669* get an array of selected rows in an AccessibleTable670*/671BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections) {672if (theAccessBridgeInitializedFlag == TRUE) {673return theAccessBridge.getAccessibleTableRowSelections(vmID, table, count, selections);674}675return FALSE;676}677678/*679* return the number of columns selected in an AccessibleTable680*/681jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table) {682if (theAccessBridgeInitializedFlag == TRUE) {683return theAccessBridge.getAccessibleTableColumnSelectionCount(vmID, table);684}685return -1;686}687688/*689* return whether a column is selected in an AccessibleTable690*/691BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column) {692if (theAccessBridgeInitializedFlag == TRUE) {693return theAccessBridge.isAccessibleTableColumnSelected(vmID, table, column);694}695return FALSE;696}697698/*699* get an array of columns selected in an AccessibleTable700*/701BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections) {702if (theAccessBridgeInitializedFlag == TRUE) {703return theAccessBridge.getAccessibleTableColumnSelections(vmID, table, count, selections);704}705return FALSE;706}707708/*709* return the row number for a cell at a given index710*/711jint712getAccessibleTableRow(long vmID, AccessibleTable table, jint index) {713if (theAccessBridgeInitializedFlag == TRUE) {714return theAccessBridge.getAccessibleTableRow(vmID, table, index);715}716return -1;717}718719/*720* return the column number for a cell at a given index721*/722jint723getAccessibleTableColumn(long vmID, AccessibleTable table, jint index) {724if (theAccessBridgeInitializedFlag == TRUE) {725return theAccessBridge.getAccessibleTableColumn(vmID, table, index);726}727return -1;728}729730/*731* return the index of a cell at a given row and column732*/733jint734getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column) {735if (theAccessBridgeInitializedFlag == TRUE) {736return theAccessBridge.getAccessibleTableIndex(vmID, table, row, column);737}738return -1;739}740741/* end AccessibleTable routines */742743744/**745* Accessible Text routines746*/747BOOL GetAccessibleTextInfo(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y) {748if (theAccessBridgeInitializedFlag == TRUE) {749return theAccessBridge.GetAccessibleTextInfo(vmID, at, textInfo, x, y);750}751return FALSE;752}753754BOOL GetAccessibleTextItems(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index) {755if (theAccessBridgeInitializedFlag == TRUE) {756return theAccessBridge.GetAccessibleTextItems(vmID, at, textItems, index);757}758return FALSE;759}760761BOOL GetAccessibleTextSelectionInfo(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection) {762if (theAccessBridgeInitializedFlag == TRUE) {763return theAccessBridge.GetAccessibleTextSelectionInfo(vmID, at, textSelection);764}765return FALSE;766}767768BOOL GetAccessibleTextAttributes(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes) {769if (theAccessBridgeInitializedFlag == TRUE) {770return theAccessBridge.GetAccessibleTextAttributes(vmID, at, index, attributes);771}772return FALSE;773}774775BOOL GetAccessibleTextRect(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index) {776if (theAccessBridgeInitializedFlag == TRUE) {777return theAccessBridge.GetAccessibleTextRect(vmID, at, rectInfo, index);778}779return FALSE;780}781782BOOL GetAccessibleTextLineBounds(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex) {783if (theAccessBridgeInitializedFlag == TRUE) {784return theAccessBridge.GetAccessibleTextLineBounds(vmID, at, index, startIndex, endIndex);785}786return FALSE;787}788789BOOL GetAccessibleTextRange(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len) {790if (theAccessBridgeInitializedFlag == TRUE) {791return theAccessBridge.GetAccessibleTextRange(vmID, at, start, end, text, len);792}793return FALSE;794}795796/**797* AccessibleRelationSet routines798*/799BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext,800AccessibleRelationSetInfo *relationSetInfo) {801if (theAccessBridgeInitializedFlag == TRUE) {802return theAccessBridge.getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo);803}804return FALSE;805}806807/**808* AccessibleHypertext routines809*/810811// Gets AccessibleHypertext for an AccessibleContext812BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext,813AccessibleHypertextInfo *hypertextInfo) {814if (theAccessBridgeInitializedFlag == TRUE) {815return theAccessBridge.getAccessibleHypertext(vmID, accessibleContext, hypertextInfo);816}817return FALSE;818}819820// Activates an AccessibleHyperlink for an AccessibleContext821BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext,822AccessibleHyperlink accessibleHyperlink) {823if (theAccessBridgeInitializedFlag == TRUE) {824return theAccessBridge.activateAccessibleHyperlink(vmID, accessibleContext, accessibleHyperlink);825}826return FALSE;827}828829/*830* Returns the number of hyperlinks in a component831* Maps to AccessibleHypertext.getLinkCount.832* Returns -1 on error.833*/834jint getAccessibleHyperlinkCount(const long vmID,835const AccessibleContext accessibleContext) {836837if (theAccessBridgeInitializedFlag == TRUE) {838return theAccessBridge.getAccessibleHyperlinkCount(vmID, accessibleContext);839}840return -1;841}842843/*844* This method is used to iterate through the hyperlinks in a component. It845* returns hypertext information for a component starting at hyperlink index846* nStartIndex. No more than MAX_HYPERLINKS AccessibleHypertextInfo objects will847* be returned for each call to this method.848* returns FALSE on error.849*/850BOOL getAccessibleHypertextExt(const long vmID,851const AccessibleContext accessibleContext,852const jint nStartIndex,853/* OUT */ AccessibleHypertextInfo *hypertextInfo) {854855if (theAccessBridgeInitializedFlag == TRUE) {856return theAccessBridge.getAccessibleHypertextExt(vmID,857accessibleContext,858nStartIndex,859hypertextInfo);860}861return FALSE;862}863864/*865* Returns the index into an array of hyperlinks that is associated with866* a character index in document;867* Maps to AccessibleHypertext.getLinkIndex.868* Returns -1 on error.869*/870jint getAccessibleHypertextLinkIndex(const long vmID,871const AccessibleHypertext hypertext,872const jint nIndex) {873874if (theAccessBridgeInitializedFlag == TRUE) {875return theAccessBridge.getAccessibleHypertextLinkIndex(vmID,876hypertext,877nIndex);878}879return -1;880}881882/*883* Returns the nth hyperlink in a document.884* Maps to AccessibleHypertext.getLink.885* Returns -1 on error886*/887BOOL getAccessibleHyperlink(const long vmID,888const AccessibleHypertext hypertext,889const jint nIndex,890/* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) {891892if (theAccessBridgeInitializedFlag == TRUE) {893return theAccessBridge.getAccessibleHyperlink(vmID,894hypertext,895nIndex,896hyperlinkInfo);897}898return FALSE;899}900901902/* Accessible KeyBindings, Icons and Actions */903BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext,904AccessibleKeyBindings *keyBindings) {905if (theAccessBridgeInitializedFlag == TRUE) {906return theAccessBridge.getAccessibleKeyBindings(vmID, accessibleContext, keyBindings);907}908return FALSE;909}910911BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext,912AccessibleIcons *icons) {913if (theAccessBridgeInitializedFlag == TRUE) {914return theAccessBridge.getAccessibleIcons(vmID, accessibleContext, icons);915}916return FALSE;917}918919BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext,920AccessibleActions *actions) {921if (theAccessBridgeInitializedFlag == TRUE) {922return theAccessBridge.getAccessibleActions(vmID, accessibleContext, actions);923}924return FALSE;925}926927BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext,928AccessibleActionsToDo *actionsToDo, jint *failure) {929if (theAccessBridgeInitializedFlag == TRUE) {930return theAccessBridge.doAccessibleActions(vmID, accessibleContext, actionsToDo, failure);931}932return FALSE;933}934935/**936* Accessible Value routines937*/938BOOL GetCurrentAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {939if (theAccessBridgeInitializedFlag == TRUE) {940return theAccessBridge.GetCurrentAccessibleValueFromContext(vmID, av, value, len);941}942return FALSE;943}944945BOOL GetMaximumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {946if (theAccessBridgeInitializedFlag == TRUE) {947return theAccessBridge.GetMaximumAccessibleValueFromContext(vmID, av, value, len);948}949return FALSE;950}951952BOOL GetMinimumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) {953if (theAccessBridgeInitializedFlag == TRUE) {954return theAccessBridge.GetMinimumAccessibleValueFromContext(vmID, av, value, len);955}956return FALSE;957}958959960/**961* Accessible Selection routines962*/963void addAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {964if (theAccessBridgeInitializedFlag == TRUE) {965theAccessBridge.AddAccessibleSelectionFromContext(vmID, as, i);966}967}968969void clearAccessibleSelectionFromContext(long vmID, AccessibleSelection as) {970if (theAccessBridgeInitializedFlag == TRUE) {971theAccessBridge.ClearAccessibleSelectionFromContext(vmID, as);972}973}974975JOBJECT64 GetAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {976if (theAccessBridgeInitializedFlag == TRUE) {977return theAccessBridge.GetAccessibleSelectionFromContext(vmID, as, i);978}979return (JOBJECT64) 0;980}981982int GetAccessibleSelectionCountFromContext(long vmID, AccessibleSelection as) {983if (theAccessBridgeInitializedFlag == TRUE) {984return theAccessBridge.GetAccessibleSelectionCountFromContext(vmID, as);985}986return -1;987}988989BOOL IsAccessibleChildSelectedFromContext(long vmID, AccessibleSelection as, int i) {990if (theAccessBridgeInitializedFlag == TRUE) {991return theAccessBridge.IsAccessibleChildSelectedFromContext(vmID, as, i);992}993return FALSE;994}995996void RemoveAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) {997if (theAccessBridgeInitializedFlag == TRUE) {998theAccessBridge.RemoveAccessibleSelectionFromContext(vmID, as, i);999}1000}10011002void SelectAllAccessibleSelectionFromContext(long vmID, AccessibleSelection as) {1003if (theAccessBridgeInitializedFlag == TRUE) {1004theAccessBridge.SelectAllAccessibleSelectionFromContext(vmID, as);1005}1006}10071008/**1009* Additional methods for Teton1010*/10111012/**1013* Gets the AccessibleName for a component based upon the JAWS algorithm. Returns1014* whether successful.1015*1016* Bug ID 4916682 - Implement JAWS AccessibleName policy1017*/1018BOOL getVirtualAccessibleName(const long vmID, const AccessibleContext accessibleContext,1019wchar_t *name, int len) {1020if (theAccessBridgeInitializedFlag == TRUE) {1021return theAccessBridge.getVirtualAccessibleName(vmID, accessibleContext, name, len);1022}1023return FALSE;1024}10251026/**1027* Request focus for a component. Returns whether successful;1028*1029* Bug ID 4944757 - requestFocus method needed1030*/1031BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext) {1032if (theAccessBridgeInitializedFlag == TRUE) {1033return theAccessBridge.requestFocus(vmID, accessibleContext);1034}1035return FALSE;1036}10371038/**1039* Selects text between two indices. Selection includes the text at the start index1040* and the text at the end index. Returns whether successful;1041*1042* Bug ID 4944758 - selectTextRange method needed1043*/1044BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext,1045const int startIndex, const int endIndex) {1046if (theAccessBridgeInitializedFlag == TRUE) {1047return theAccessBridge.selectTextRange(vmID, accessibleContext, startIndex, endIndex);1048}1049return FALSE;1050}10511052/**1053* Get text attributes between two indices. The attribute list includes the text at the1054* start index and the text at the end index. Returns whether successful;1055*1056* Bug ID 4944761 - getTextAttributes between two indices method needed1057*/1058BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext,1059const int startIndex, const int endIndex,1060AccessibleTextAttributesInfo *attributes, short *len) {1061if (theAccessBridgeInitializedFlag == TRUE) {1062return theAccessBridge.getTextAttributesInRange(vmID, accessibleContext, startIndex,1063endIndex, attributes, len);1064}1065return FALSE;1066}10671068/**1069* Returns the number of visible children of a component. Returns -1 on error.1070*1071* Bug ID 4944762- getVisibleChildren for list-like components needed1072*/1073int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext) {1074if (theAccessBridgeInitializedFlag == TRUE) {1075return theAccessBridge.getVisibleChildrenCount(vmID, accessibleContext);1076}1077return FALSE;1078}10791080/**1081* Gets the visible children of an AccessibleContext. Returns whether successful;1082*1083* Bug ID 4944762- getVisibleChildren for list-like components needed1084*/1085BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext,1086const int startIndex, VisibleChildrenInfo *visibleChildrenInfo) {1087if (theAccessBridgeInitializedFlag == TRUE) {1088return theAccessBridge.getVisibleChildren(vmID, accessibleContext, startIndex,1089visibleChildrenInfo);1090}1091return FALSE;1092}10931094/**1095* Set the caret to a text position. Returns whether successful;1096*1097* Bug ID 4944770 - setCaretPosition method needed1098*/1099BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext,1100const int position) {1101if (theAccessBridgeInitializedFlag == TRUE) {1102return theAccessBridge.setCaretPosition(vmID, accessibleContext, position);1103}1104return FALSE;1105}11061107/**1108* Gets the text caret location1109*/1110BOOL getCaretLocation(long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index) {1111if (theAccessBridgeInitializedFlag == TRUE) {1112return theAccessBridge.getCaretLocation(vmID, ac, rectInfo, index);1113}1114return FALSE;1115}11161117/**1118* Gets the number of events waiting to fire1119*/1120int getEventsWaiting() {1121if (theAccessBridgeInitializedFlag == TRUE) {1122return theAccessBridge.getEventsWaiting();1123}1124return FALSE;1125}11261127#ifdef __cplusplus1128}1129#endif113011311132