/* * * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * @(#)AccessBridgeCalls.c 1.25 05/08/22 */ /* * Wrapper functions around calls to the AccessBridge DLL */ #include #include //#define ACCESSBRIDGE_32 //#define ACCESSBRIDGE_64 #include "AccessBridgeCalls.h" #ifdef __cplusplus extern "C" { #endif HINSTANCE theAccessBridgeInstance; AccessBridgeFPs theAccessBridge; BOOL theAccessBridgeInitializedFlag = FALSE; #define LOAD_FP(result, type, name) \ if ((theAccessBridge.result = \ (type) GetProcAddress(theAccessBridgeInstance, name)) == (type) 0) { \ return FALSE; \ } BOOL initializeAccessBridge() { #ifdef ACCESSBRIDGE_ARCH_32 // For 32bit AT new bridge theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-32"); #else #ifdef ACCESSBRIDGE_ARCH_64 // For 64bit AT new bridge theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE-64"); #else // legacy theAccessBridgeInstance = LoadLibrary("WINDOWSACCESSBRIDGE"); #endif #endif if (theAccessBridgeInstance != 0) { LOAD_FP(Windows_run, Windows_runFP, "Windows_run"); LOAD_FP(SetJavaShutdown, SetJavaShutdownFP, "setJavaShutdownFP"); LOAD_FP(SetFocusGained, SetFocusGainedFP, "setFocusGainedFP"); LOAD_FP(SetFocusLost, SetFocusLostFP, "setFocusLostFP"); LOAD_FP(SetCaretUpdate, SetCaretUpdateFP, "setCaretUpdateFP"); LOAD_FP(SetMouseClicked, SetMouseClickedFP, "setMouseClickedFP"); LOAD_FP(SetMouseEntered, SetMouseEnteredFP, "setMouseEnteredFP"); LOAD_FP(SetMouseExited, SetMouseExitedFP, "setMouseExitedFP"); LOAD_FP(SetMousePressed, SetMousePressedFP, "setMousePressedFP"); LOAD_FP(SetMouseReleased, SetMouseReleasedFP, "setMouseReleasedFP"); LOAD_FP(SetMenuCanceled, SetMenuCanceledFP, "setMenuCanceledFP"); LOAD_FP(SetMenuDeselected, SetMenuDeselectedFP, "setMenuDeselectedFP"); LOAD_FP(SetMenuSelected, SetMenuSelectedFP, "setMenuSelectedFP"); LOAD_FP(SetPopupMenuCanceled, SetPopupMenuCanceledFP, "setPopupMenuCanceledFP"); LOAD_FP(SetPopupMenuWillBecomeInvisible, SetPopupMenuWillBecomeInvisibleFP, "setPopupMenuWillBecomeInvisibleFP"); LOAD_FP(SetPopupMenuWillBecomeVisible, SetPopupMenuWillBecomeVisibleFP, "setPopupMenuWillBecomeVisibleFP"); LOAD_FP(SetPropertyNameChange, SetPropertyNameChangeFP, "setPropertyNameChangeFP"); LOAD_FP(SetPropertyDescriptionChange, SetPropertyDescriptionChangeFP, "setPropertyDescriptionChangeFP"); LOAD_FP(SetPropertyStateChange, SetPropertyStateChangeFP, "setPropertyStateChangeFP"); LOAD_FP(SetPropertyValueChange, SetPropertyValueChangeFP, "setPropertyValueChangeFP"); LOAD_FP(SetPropertySelectionChange, SetPropertySelectionChangeFP, "setPropertySelectionChangeFP"); LOAD_FP(SetPropertyTextChange, SetPropertyTextChangeFP, "setPropertyTextChangeFP"); LOAD_FP(SetPropertyCaretChange, SetPropertyCaretChangeFP, "setPropertyCaretChangeFP"); LOAD_FP(SetPropertyVisibleDataChange, SetPropertyVisibleDataChangeFP, "setPropertyVisibleDataChangeFP"); LOAD_FP(SetPropertyChildChange, SetPropertyChildChangeFP, "setPropertyChildChangeFP"); LOAD_FP(SetPropertyActiveDescendentChange, SetPropertyActiveDescendentChangeFP, "setPropertyActiveDescendentChangeFP"); LOAD_FP(SetPropertyTableModelChange, SetPropertyTableModelChangeFP, "setPropertyTableModelChangeFP"); LOAD_FP(ReleaseJavaObject, ReleaseJavaObjectFP, "releaseJavaObject"); LOAD_FP(GetVersionInfo, GetVersionInfoFP, "getVersionInfo"); LOAD_FP(IsJavaWindow, IsJavaWindowFP, "isJavaWindow"); LOAD_FP(IsSameObject, IsSameObjectFP, "isSameObject"); LOAD_FP(GetAccessibleContextFromHWND, GetAccessibleContextFromHWNDFP, "getAccessibleContextFromHWND"); LOAD_FP(getHWNDFromAccessibleContext, getHWNDFromAccessibleContextFP, "getHWNDFromAccessibleContext"); LOAD_FP(GetAccessibleContextAt, GetAccessibleContextAtFP, "getAccessibleContextAt"); LOAD_FP(GetAccessibleContextWithFocus, GetAccessibleContextWithFocusFP, "getAccessibleContextWithFocus"); LOAD_FP(GetAccessibleContextInfo, GetAccessibleContextInfoFP, "getAccessibleContextInfo"); LOAD_FP(GetAccessibleChildFromContext, GetAccessibleChildFromContextFP, "getAccessibleChildFromContext"); LOAD_FP(GetAccessibleParentFromContext, GetAccessibleParentFromContextFP, "getAccessibleParentFromContext"); /* begin AccessibleTable */ LOAD_FP(getAccessibleTableInfo, getAccessibleTableInfoFP, "getAccessibleTableInfo"); LOAD_FP(getAccessibleTableCellInfo, getAccessibleTableCellInfoFP, "getAccessibleTableCellInfo"); LOAD_FP(getAccessibleTableRowHeader, getAccessibleTableRowHeaderFP, "getAccessibleTableRowHeader"); LOAD_FP(getAccessibleTableColumnHeader, getAccessibleTableColumnHeaderFP, "getAccessibleTableColumnHeader"); LOAD_FP(getAccessibleTableRowDescription, getAccessibleTableRowDescriptionFP, "getAccessibleTableRowDescription"); LOAD_FP(getAccessibleTableColumnDescription, getAccessibleTableColumnDescriptionFP, "getAccessibleTableColumnDescription"); LOAD_FP(getAccessibleTableRowSelectionCount, getAccessibleTableRowSelectionCountFP, "getAccessibleTableRowSelectionCount"); LOAD_FP(isAccessibleTableRowSelected, isAccessibleTableRowSelectedFP, "isAccessibleTableRowSelected"); LOAD_FP(getAccessibleTableRowSelections, getAccessibleTableRowSelectionsFP, "getAccessibleTableRowSelections"); LOAD_FP(getAccessibleTableColumnSelectionCount, getAccessibleTableColumnSelectionCountFP, "getAccessibleTableColumnSelectionCount"); LOAD_FP(isAccessibleTableColumnSelected, isAccessibleTableColumnSelectedFP, "isAccessibleTableColumnSelected"); LOAD_FP(getAccessibleTableColumnSelections, getAccessibleTableColumnSelectionsFP, "getAccessibleTableColumnSelections"); LOAD_FP(getAccessibleTableRow, getAccessibleTableRowFP, "getAccessibleTableRow"); LOAD_FP(getAccessibleTableColumn, getAccessibleTableColumnFP, "getAccessibleTableColumn"); LOAD_FP(getAccessibleTableIndex, getAccessibleTableIndexFP, "getAccessibleTableIndex"); /* end AccessibleTable */ /* AccessibleRelationSet */ LOAD_FP(getAccessibleRelationSet, getAccessibleRelationSetFP, "getAccessibleRelationSet"); /* AccessibleHypertext */ LOAD_FP(getAccessibleHypertext, getAccessibleHypertextFP, "getAccessibleHypertext"); LOAD_FP(activateAccessibleHyperlink, activateAccessibleHyperlinkFP, "activateAccessibleHyperlink"); LOAD_FP(getAccessibleHyperlinkCount, getAccessibleHyperlinkCountFP, "getAccessibleHyperlinkCount"); LOAD_FP(getAccessibleHypertextExt, getAccessibleHypertextExtFP, "getAccessibleHypertextExt"); LOAD_FP(getAccessibleHypertextLinkIndex, getAccessibleHypertextLinkIndexFP, "getAccessibleHypertextLinkIndex"); LOAD_FP(getAccessibleHyperlink, getAccessibleHyperlinkFP, "getAccessibleHyperlink"); /* Accessible KeyBinding, Icon and Action */ LOAD_FP(getAccessibleKeyBindings, getAccessibleKeyBindingsFP, "getAccessibleKeyBindings"); LOAD_FP(getAccessibleIcons, getAccessibleIconsFP, "getAccessibleIcons"); LOAD_FP(getAccessibleActions, getAccessibleActionsFP, "getAccessibleActions"); LOAD_FP(doAccessibleActions, doAccessibleActionsFP, "doAccessibleActions"); /* AccessibleText */ LOAD_FP(GetAccessibleTextInfo, GetAccessibleTextInfoFP, "getAccessibleTextInfo"); LOAD_FP(GetAccessibleTextItems, GetAccessibleTextItemsFP, "getAccessibleTextItems"); LOAD_FP(GetAccessibleTextSelectionInfo, GetAccessibleTextSelectionInfoFP, "getAccessibleTextSelectionInfo"); LOAD_FP(GetAccessibleTextAttributes, GetAccessibleTextAttributesFP, "getAccessibleTextAttributes"); LOAD_FP(GetAccessibleTextRect, GetAccessibleTextRectFP, "getAccessibleTextRect"); LOAD_FP(GetAccessibleTextLineBounds, GetAccessibleTextLineBoundsFP, "getAccessibleTextLineBounds"); LOAD_FP(GetAccessibleTextRange, GetAccessibleTextRangeFP, "getAccessibleTextRange"); LOAD_FP(GetCurrentAccessibleValueFromContext, GetCurrentAccessibleValueFromContextFP, "getCurrentAccessibleValueFromContext"); LOAD_FP(GetMaximumAccessibleValueFromContext, GetMaximumAccessibleValueFromContextFP, "getMaximumAccessibleValueFromContext"); LOAD_FP(GetMinimumAccessibleValueFromContext, GetMinimumAccessibleValueFromContextFP, "getMinimumAccessibleValueFromContext"); LOAD_FP(AddAccessibleSelectionFromContext, AddAccessibleSelectionFromContextFP, "addAccessibleSelectionFromContext"); LOAD_FP(ClearAccessibleSelectionFromContext, ClearAccessibleSelectionFromContextFP, "clearAccessibleSelectionFromContext"); LOAD_FP(GetAccessibleSelectionFromContext, GetAccessibleSelectionFromContextFP, "getAccessibleSelectionFromContext"); LOAD_FP(GetAccessibleSelectionCountFromContext, GetAccessibleSelectionCountFromContextFP, "getAccessibleSelectionCountFromContext"); LOAD_FP(IsAccessibleChildSelectedFromContext, IsAccessibleChildSelectedFromContextFP, "isAccessibleChildSelectedFromContext"); LOAD_FP(RemoveAccessibleSelectionFromContext, RemoveAccessibleSelectionFromContextFP, "removeAccessibleSelectionFromContext"); LOAD_FP(SelectAllAccessibleSelectionFromContext, SelectAllAccessibleSelectionFromContextFP, "selectAllAccessibleSelectionFromContext"); LOAD_FP(setTextContents, setTextContentsFP, "setTextContents"); LOAD_FP(getParentWithRole, getParentWithRoleFP, "getParentWithRole"); LOAD_FP(getTopLevelObject, getTopLevelObjectFP, "getTopLevelObject"); LOAD_FP(getParentWithRoleElseRoot, getParentWithRoleElseRootFP, "getParentWithRoleElseRoot"); LOAD_FP(getObjectDepth, getObjectDepthFP, "getObjectDepth"); LOAD_FP(getActiveDescendent, getActiveDescendentFP, "getActiveDescendent"); // additional methods for Teton LOAD_FP(getVirtualAccessibleName, getVirtualAccessibleNameFP, "getVirtualAccessibleName"); LOAD_FP(requestFocus, requestFocusFP, "requestFocus"); LOAD_FP(selectTextRange, selectTextRangeFP, "selectTextRange"); LOAD_FP(getTextAttributesInRange, getTextAttributesInRangeFP, "getTextAttributesInRange"); LOAD_FP(getVisibleChildrenCount, getVisibleChildrenCountFP, "getVisibleChildrenCount"); LOAD_FP(getVisibleChildren, getVisibleChildrenFP, "getVisibleChildren"); LOAD_FP(setCaretPosition, setCaretPositionFP, "setCaretPosition"); LOAD_FP(getCaretLocation, getCaretLocationFP, "getCaretLocation"); LOAD_FP(getEventsWaiting, getEventsWaitingFP, "getEventsWaiting"); theAccessBridge.Windows_run(); theAccessBridgeInitializedFlag = TRUE; return TRUE; } else { return FALSE; } } BOOL shutdownAccessBridge() { BOOL result; DWORD error; theAccessBridgeInitializedFlag = FALSE; if (theAccessBridgeInstance != (HANDLE) 0) { result = FreeLibrary(theAccessBridgeInstance); if (result != TRUE) { error = GetLastError(); } return TRUE; } return FALSE; } void SetJavaShutdown(AccessBridge_JavaShutdownFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetJavaShutdown(fp); } } void SetFocusGained(AccessBridge_FocusGainedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetFocusGained(fp); } } void SetFocusLost(AccessBridge_FocusLostFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetFocusLost(fp); } } void SetCaretUpdate(AccessBridge_CaretUpdateFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetCaretUpdate(fp); } } void SetMouseClicked(AccessBridge_MouseClickedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMouseClicked(fp); } } void SetMouseEntered(AccessBridge_MouseEnteredFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMouseEntered(fp); } } void SetMouseExited(AccessBridge_MouseExitedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMouseExited(fp); } } void SetMousePressed(AccessBridge_MousePressedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMousePressed(fp); } } void SetMouseReleased(AccessBridge_MouseReleasedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMouseReleased(fp); } } void SetMenuCanceled(AccessBridge_MenuCanceledFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMenuCanceled(fp); } } void SetMenuDeselected(AccessBridge_MenuDeselectedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMenuDeselected(fp); } } void SetMenuSelected(AccessBridge_MenuSelectedFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetMenuSelected(fp); } } void SetPopupMenuCanceled(AccessBridge_PopupMenuCanceledFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPopupMenuCanceled(fp); } } void SetPopupMenuWillBecomeInvisible(AccessBridge_PopupMenuWillBecomeInvisibleFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPopupMenuWillBecomeInvisible(fp); } } void SetPopupMenuWillBecomeVisible(AccessBridge_PopupMenuWillBecomeVisibleFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPopupMenuWillBecomeVisible(fp); } } void SetPropertyNameChange(AccessBridge_PropertyNameChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyNameChange(fp); } } void SetPropertyDescriptionChange(AccessBridge_PropertyDescriptionChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyDescriptionChange(fp); } } void SetPropertyStateChange(AccessBridge_PropertyStateChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyStateChange(fp); } } void SetPropertyValueChange(AccessBridge_PropertyValueChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyValueChange(fp); } } void SetPropertySelectionChange(AccessBridge_PropertySelectionChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertySelectionChange(fp); } } void SetPropertyTextChange(AccessBridge_PropertyTextChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyTextChange(fp); } } void SetPropertyCaretChange(AccessBridge_PropertyCaretChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyCaretChange(fp); } } void SetPropertyVisibleDataChange(AccessBridge_PropertyVisibleDataChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyVisibleDataChange(fp); } } void SetPropertyChildChange(AccessBridge_PropertyChildChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyChildChange(fp); } } void SetPropertyActiveDescendentChange(AccessBridge_PropertyActiveDescendentChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyActiveDescendentChange(fp); } } void SetPropertyTableModelChange(AccessBridge_PropertyTableModelChangeFP fp) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SetPropertyTableModelChange(fp); } } /** * General routines */ void ReleaseJavaObject(long vmID, Java_Object object) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.ReleaseJavaObject(vmID, object); } } BOOL GetVersionInfo(long vmID, AccessBridgeVersionInfo *info) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetVersionInfo(vmID, info); } return FALSE; } /** * Window routines */ BOOL IsJavaWindow(HWND window) { if (theAccessBridgeInitializedFlag == TRUE) { BOOL ret ; ret = theAccessBridge.IsJavaWindow(window); return ret ; } return FALSE; } /** * Returns the virtual machine ID and AccessibleContext for a top-level window */ BOOL GetAccessibleContextFromHWND(HWND target, long *vmID, AccessibleContext *ac) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleContextFromHWND(target, vmID, ac); } return FALSE; } /** * Returns the HWND from the AccessibleContext of a top-level window. Returns 0 * on error or if the AccessibleContext does not refer to a top-level window. */ HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accesibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getHWNDFromAccessibleContext(vmID, accesibleContext); } return (HWND)0; } /** * returns whether two objects are the same */ BOOL IsSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.IsSameObject(vmID, obj1, obj2); } return FALSE; } /** * Sets editable text contents. The AccessibleContext must implement AccessibleEditableText and * be editable. The maximum text length is MAX_STRING_SIZE - 1. * Returns whether successful */ BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.setTextContents(vmID, accessibleContext, text); } return FALSE; } /** * Returns the Accessible Context with the specified role that is the * ancestor of a given object. The role is one of the role strings * defined in AccessBridgePackages.h * If there is no ancestor object that has the specified role, * returns (AccessibleContext)0. */ AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getParentWithRole(vmID, accessibleContext, role); } return (AccessibleContext)0; } /** * Returns the Accessible Context with the specified role that is the * ancestor of a given object. The role is one of the role strings * defined in AccessBridgePackages.h. If an object with the specified * role does not exist, returns the top level object for the Java Window. * Returns (AccessibleContext)0 on error. */ AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getParentWithRoleElseRoot(vmID, accessibleContext, role); } return (AccessibleContext)0; } /** * Returns the Accessible Context for the top level object in * a Java Window. This is same Accessible Context that is obtained * from GetAccessibleContextFromHWND for that window. Returns * (AccessibleContext)0 on error. */ AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getTopLevelObject(vmID, accessibleContext); } return (AccessibleContext)0; } /** * Returns how deep in the object hierarchy a given object is. * The top most object in the object hierarchy has an object depth of 0. * Returns -1 on error. */ int getObjectDepth (const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getObjectDepth(vmID, accessibleContext); } return -1; } /** * Returns the Accessible Context of the current ActiveDescendent of an object. * This method assumes the ActiveDescendent is the component that is currently * selected in a container object. * Returns (AccessibleContext)0 on error or if there is no selection. */ AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getActiveDescendent(vmID, accessibleContext); } return (AccessibleContext)0; } /** * Accessible Context routines */ BOOL GetAccessibleContextAt(long vmID, AccessibleContext acParent, jint x, jint y, AccessibleContext *ac) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleContextAt(vmID, acParent, x, y, ac); } return FALSE; } BOOL GetAccessibleContextWithFocus(HWND window, long *vmID, AccessibleContext *ac) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleContextWithFocus(window, vmID, ac); } return FALSE; } BOOL GetAccessibleContextInfo(long vmID, AccessibleContext ac, AccessibleContextInfo *info) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleContextInfo(vmID, ac, info); } return FALSE; } AccessibleContext GetAccessibleChildFromContext(long vmID, AccessibleContext ac, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleChildFromContext(vmID, ac, index); } return (AccessibleContext) 0; } AccessibleContext GetAccessibleParentFromContext(long vmID, AccessibleContext ac) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleParentFromContext(vmID, ac); } return (AccessibleContext) 0; } /* begin AccessibleTable routines */ /* * get information about an AccessibleTable */ BOOL getAccessibleTableInfo(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableInfo(vmID, acParent, tableInfo); } return FALSE; } /* * get information about an AccessibleTable cell */ BOOL getAccessibleTableCellInfo(long vmID, AccessibleTable accessibleTable, jint row, jint column, AccessibleTableCellInfo *tableCellInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableCellInfo(vmID, accessibleTable, row, column, tableCellInfo); } return FALSE; } /* * get information about an AccessibleTable row header */ BOOL getAccessibleTableRowHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableRowHeader(vmID, acParent, tableInfo); } return FALSE; } /* * get information about an AccessibleTable column header */ BOOL getAccessibleTableColumnHeader(long vmID, AccessibleContext acParent, AccessibleTableInfo *tableInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableColumnHeader(vmID, acParent, tableInfo); } return FALSE; } /* * return a description of an AccessibleTable row header */ AccessibleContext getAccessibleTableRowDescription(long vmID, AccessibleContext acParent, jint row) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableRowDescription(vmID, acParent, row); } return (AccessibleContext)0; } /* * return a description of an AccessibleTable column header */ AccessibleContext getAccessibleTableColumnDescription(long vmID, AccessibleContext acParent, jint column) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableColumnDescription(vmID, acParent, column); } return (AccessibleContext)0; } /* * return the number of rows selected in an AccessibleTable */ jint getAccessibleTableRowSelectionCount(long vmID, AccessibleTable table) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableRowSelectionCount(vmID, table); } return -1; } /* * return whether a row is selected in an AccessibleTable */ BOOL isAccessibleTableRowSelected(long vmID, AccessibleTable table, jint row) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.isAccessibleTableRowSelected(vmID, table, row); } return FALSE; } /* * get an array of selected rows in an AccessibleTable */ BOOL getAccessibleTableRowSelections(long vmID, AccessibleTable table, jint count, jint *selections) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableRowSelections(vmID, table, count, selections); } return FALSE; } /* * return the number of columns selected in an AccessibleTable */ jint getAccessibleTableColumnSelectionCount(long vmID, AccessibleTable table) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableColumnSelectionCount(vmID, table); } return -1; } /* * return whether a column is selected in an AccessibleTable */ BOOL isAccessibleTableColumnSelected(long vmID, AccessibleTable table, jint column) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.isAccessibleTableColumnSelected(vmID, table, column); } return FALSE; } /* * get an array of columns selected in an AccessibleTable */ BOOL getAccessibleTableColumnSelections(long vmID, AccessibleTable table, jint count, jint *selections) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableColumnSelections(vmID, table, count, selections); } return FALSE; } /* * return the row number for a cell at a given index */ jint getAccessibleTableRow(long vmID, AccessibleTable table, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableRow(vmID, table, index); } return -1; } /* * return the column number for a cell at a given index */ jint getAccessibleTableColumn(long vmID, AccessibleTable table, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableColumn(vmID, table, index); } return -1; } /* * return the index of a cell at a given row and column */ jint getAccessibleTableIndex(long vmID, AccessibleTable table, jint row, jint column) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleTableIndex(vmID, table, row, column); } return -1; } /* end AccessibleTable routines */ /** * Accessible Text routines */ BOOL GetAccessibleTextInfo(long vmID, AccessibleText at, AccessibleTextInfo *textInfo, jint x, jint y) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextInfo(vmID, at, textInfo, x, y); } return FALSE; } BOOL GetAccessibleTextItems(long vmID, AccessibleText at, AccessibleTextItemsInfo *textItems, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextItems(vmID, at, textItems, index); } return FALSE; } BOOL GetAccessibleTextSelectionInfo(long vmID, AccessibleText at, AccessibleTextSelectionInfo *textSelection) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextSelectionInfo(vmID, at, textSelection); } return FALSE; } BOOL GetAccessibleTextAttributes(long vmID, AccessibleText at, jint index, AccessibleTextAttributesInfo *attributes) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextAttributes(vmID, at, index, attributes); } return FALSE; } BOOL GetAccessibleTextRect(long vmID, AccessibleText at, AccessibleTextRectInfo *rectInfo, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextRect(vmID, at, rectInfo, index); } return FALSE; } BOOL GetAccessibleTextLineBounds(long vmID, AccessibleText at, jint index, jint *startIndex, jint *endIndex) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextLineBounds(vmID, at, index, startIndex, endIndex); } return FALSE; } BOOL GetAccessibleTextRange(long vmID, AccessibleText at, jint start, jint end, wchar_t *text, short len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleTextRange(vmID, at, start, end, text, len); } return FALSE; } /** * AccessibleRelationSet routines */ BOOL getAccessibleRelationSet(long vmID, AccessibleContext accessibleContext, AccessibleRelationSetInfo *relationSetInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo); } return FALSE; } /** * AccessibleHypertext routines */ // Gets AccessibleHypertext for an AccessibleContext BOOL getAccessibleHypertext(long vmID, AccessibleContext accessibleContext, AccessibleHypertextInfo *hypertextInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleHypertext(vmID, accessibleContext, hypertextInfo); } return FALSE; } // Activates an AccessibleHyperlink for an AccessibleContext BOOL activateAccessibleHyperlink(long vmID, AccessibleContext accessibleContext, AccessibleHyperlink accessibleHyperlink) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.activateAccessibleHyperlink(vmID, accessibleContext, accessibleHyperlink); } return FALSE; } /* * Returns the number of hyperlinks in a component * Maps to AccessibleHypertext.getLinkCount. * Returns -1 on error. */ jint getAccessibleHyperlinkCount(const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleHyperlinkCount(vmID, accessibleContext); } return -1; } /* * This method is used to iterate through the hyperlinks in a component. It * returns hypertext information for a component starting at hyperlink index * nStartIndex. No more than MAX_HYPERLINKS AccessibleHypertextInfo objects will * be returned for each call to this method. * returns FALSE on error. */ BOOL getAccessibleHypertextExt(const long vmID, const AccessibleContext accessibleContext, const jint nStartIndex, /* OUT */ AccessibleHypertextInfo *hypertextInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleHypertextExt(vmID, accessibleContext, nStartIndex, hypertextInfo); } return FALSE; } /* * Returns the index into an array of hyperlinks that is associated with * a character index in document; * Maps to AccessibleHypertext.getLinkIndex. * Returns -1 on error. */ jint getAccessibleHypertextLinkIndex(const long vmID, const AccessibleHypertext hypertext, const jint nIndex) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleHypertextLinkIndex(vmID, hypertext, nIndex); } return -1; } /* * Returns the nth hyperlink in a document. * Maps to AccessibleHypertext.getLink. * Returns -1 on error */ BOOL getAccessibleHyperlink(const long vmID, const AccessibleHypertext hypertext, const jint nIndex, /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleHyperlink(vmID, hypertext, nIndex, hyperlinkInfo); } return FALSE; } /* Accessible KeyBindings, Icons and Actions */ BOOL getAccessibleKeyBindings(long vmID, AccessibleContext accessibleContext, AccessibleKeyBindings *keyBindings) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleKeyBindings(vmID, accessibleContext, keyBindings); } return FALSE; } BOOL getAccessibleIcons(long vmID, AccessibleContext accessibleContext, AccessibleIcons *icons) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleIcons(vmID, accessibleContext, icons); } return FALSE; } BOOL getAccessibleActions(long vmID, AccessibleContext accessibleContext, AccessibleActions *actions) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getAccessibleActions(vmID, accessibleContext, actions); } return FALSE; } BOOL doAccessibleActions(long vmID, AccessibleContext accessibleContext, AccessibleActionsToDo *actionsToDo, jint *failure) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.doAccessibleActions(vmID, accessibleContext, actionsToDo, failure); } return FALSE; } /** * Accessible Value routines */ BOOL GetCurrentAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetCurrentAccessibleValueFromContext(vmID, av, value, len); } return FALSE; } BOOL GetMaximumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetMaximumAccessibleValueFromContext(vmID, av, value, len); } return FALSE; } BOOL GetMinimumAccessibleValueFromContext(long vmID, AccessibleValue av, wchar_t *value, short len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetMinimumAccessibleValueFromContext(vmID, av, value, len); } return FALSE; } /** * Accessible Selection routines */ void addAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.AddAccessibleSelectionFromContext(vmID, as, i); } } void clearAccessibleSelectionFromContext(long vmID, AccessibleSelection as) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.ClearAccessibleSelectionFromContext(vmID, as); } } JOBJECT64 GetAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleSelectionFromContext(vmID, as, i); } return (JOBJECT64) 0; } int GetAccessibleSelectionCountFromContext(long vmID, AccessibleSelection as) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.GetAccessibleSelectionCountFromContext(vmID, as); } return -1; } BOOL IsAccessibleChildSelectedFromContext(long vmID, AccessibleSelection as, int i) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.IsAccessibleChildSelectedFromContext(vmID, as, i); } return FALSE; } void RemoveAccessibleSelectionFromContext(long vmID, AccessibleSelection as, int i) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.RemoveAccessibleSelectionFromContext(vmID, as, i); } } void SelectAllAccessibleSelectionFromContext(long vmID, AccessibleSelection as) { if (theAccessBridgeInitializedFlag == TRUE) { theAccessBridge.SelectAllAccessibleSelectionFromContext(vmID, as); } } /** * Additional methods for Teton */ /** * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns * whether successful. * * Bug ID 4916682 - Implement JAWS AccessibleName policy */ BOOL getVirtualAccessibleName(const long vmID, const AccessibleContext accessibleContext, wchar_t *name, int len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getVirtualAccessibleName(vmID, accessibleContext, name, len); } return FALSE; } /** * Request focus for a component. Returns whether successful; * * Bug ID 4944757 - requestFocus method needed */ BOOL requestFocus(const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.requestFocus(vmID, accessibleContext); } return FALSE; } /** * Selects text between two indices. Selection includes the text at the start index * and the text at the end index. Returns whether successful; * * Bug ID 4944758 - selectTextRange method needed */ BOOL selectTextRange(const long vmID, const AccessibleContext accessibleContext, const int startIndex, const int endIndex) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.selectTextRange(vmID, accessibleContext, startIndex, endIndex); } return FALSE; } /** * Get text attributes between two indices. The attribute list includes the text at the * start index and the text at the end index. Returns whether successful; * * Bug ID 4944761 - getTextAttributes between two indices method needed */ BOOL getTextAttributesInRange(const long vmID, const AccessibleContext accessibleContext, const int startIndex, const int endIndex, AccessibleTextAttributesInfo *attributes, short *len) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getTextAttributesInRange(vmID, accessibleContext, startIndex, endIndex, attributes, len); } return FALSE; } /** * Returns the number of visible children of a component. Returns -1 on error. * * Bug ID 4944762- getVisibleChildren for list-like components needed */ int getVisibleChildrenCount(const long vmID, const AccessibleContext accessibleContext) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getVisibleChildrenCount(vmID, accessibleContext); } return FALSE; } /** * Gets the visible children of an AccessibleContext. Returns whether successful; * * Bug ID 4944762- getVisibleChildren for list-like components needed */ BOOL getVisibleChildren(const long vmID, const AccessibleContext accessibleContext, const int startIndex, VisibleChildrenInfo *visibleChildrenInfo) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getVisibleChildren(vmID, accessibleContext, startIndex, visibleChildrenInfo); } return FALSE; } /** * Set the caret to a text position. Returns whether successful; * * Bug ID 4944770 - setCaretPosition method needed */ BOOL setCaretPosition(const long vmID, const AccessibleContext accessibleContext, const int position) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.setCaretPosition(vmID, accessibleContext, position); } return FALSE; } /** * Gets the text caret location */ BOOL getCaretLocation(long vmID, AccessibleContext ac, AccessibleTextRectInfo *rectInfo, jint index) { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getCaretLocation(vmID, ac, rectInfo, index); } return FALSE; } /** * Gets the number of events waiting to fire */ int getEventsWaiting() { if (theAccessBridgeInitializedFlag == TRUE) { return theAccessBridge.getEventsWaiting(); } return FALSE; } #ifdef __cplusplus } #endif