--- /dev/null 2015-03-30 10:55:53.000000000 -0500 +++ new/jdk/src/windows/native/sun/bridge/AccessBridgeWindowsEntryPoints.cpp 2015-03-30 10:55:52.030847900 -0500 @@ -0,0 +1,856 @@ +/* + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Glue routines called by Windows AT into the WindowsAccessBridge dll + */ + +#include "AccessBridgeDebug.h" +#include "AccessBridgeWindowsEntryPoints.h" +#include "WinAccessBridge.h" +#include "accessBridgeResource.h" + +#include +#include + + +extern WinAccessBridge *theWindowsAccessBridge; +extern HWND theDialogWindow; + +#ifdef __cplusplus +extern "C" { +#endif + + /** + * Windows_run - where Windows executables will load/unload us + * + */ + void Windows_run() { + // open our window + if (theWindowsAccessBridge != (WinAccessBridge *) 0) { + theWindowsAccessBridge->initWindow(); + DEBUG_CODE(SetDlgItemText(theDialogWindow, cInvokedByText, "Windows")); + } + } + + /* + /** + * Windows_shutdown - where Windows executables will load/unload us + * + * + void Windows_shutdown() { + if (theWindowsAccessBridge != (WinAccessBridge *) 0) { + theWindowsAccessBridge->initWindow(); + } + } + */ + + /** + * getTopLevelHWND - returns the top-level window parent of the descendent + * + */ + HWND getTopLevelHWND(HWND descendent) { + HWND hwnd; + if (descendent == NULL) { + return NULL; + } + + if (!IsWindow(descendent)) { + return NULL; + } + + hwnd = descendent; + for(;;) { + LONG style = GetWindowLong(hwnd, GWL_STYLE); + if ( (style & WS_CHILD) == 0 ) { + // found a non-child window so terminate + break; + } + hwnd = GetParent(hwnd); + } + + return hwnd; + } + + void releaseJavaObject(long vmID, JOBJECT64 object) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->releaseJavaObject(vmID, object); + } + } + + void getVersionInfo(long vmID, AccessBridgeVersionInfo *info) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->getVersionInfo(vmID, info); + } + } + + + BOOL isJavaWindow(HWND window) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->isJavaWindow(window); + } + return FALSE; + } + + /* + * Returns whether two object references refer to the same object + */ + BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2) { +#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer) + PrintDebugString("\r\nAccessBridgeWindowsEntryPoints::isSameObject(%p %p)", obj1, obj2); +#else // JOBJECT64 is jlong (64 bit) + PrintDebugString("\r\nAccessBridgeWindowsEntryPoints::isSameObject(%016I64X %016I64X)", obj1, obj2); +#endif + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->isSameObject(vmID, obj1, obj2); + } + return FALSE; + } + + /** + * Sets a text field to the specified string. Returns whether successful + */ + BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext,const wchar_t *text) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->setTextContents(vmID, accessibleContext, text); + } + return FALSE; + } + + /** + * Returns the Accessible Context of an object of the specified role that is the + * ancestor of a given object. If the object is of the specified role + * or an ancestor object of the specified role was found, returns the object's + * AccessibleContext. + * If there is no ancestor object of the specified role, + * returns (AccessibleContext)0. + */ + AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getParentWithRole(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 (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getTopLevelObject(vmID, accessibleContext); + } + return (AccessibleContext)0; + } + + /** + * If there is an Ancestor object of the specified role, + * returns the Accessible Context of the found object. + * Otherwise, returns the top level object for that + * Java Window. Returns (AccessibleContext)0 on error. + */ + AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getParentWithRoleElseRoot(vmID, accessibleContext, role); + } + 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 (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getObjectDepth(vmID, accessibleContext); + } + return -1; + } + + /** + * Returns the Accessible Context of the currently ActiveDescendent of an object. + * Returns (AccessibleContext)0 on error. + */ + AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getActiveDescendent(vmID, accessibleContext); + } + return (AccessibleContext)0; + } + + // -------- Accessible Context methods ------------- + + BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleContextFromHWND(window, vmID, AccessibleContext); + } + return FALSE; + } + + HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getHWNDFromAccessibleContext(vmID, accessibleContext); + } + return (HWND)0; + } + + BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent, + jint x, jint y, JOBJECT64 *AccessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleContextAt(vmID, AccessibleContextParent, + x, y, AccessibleContext); + } + return FALSE; + } + + BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleContextWithFocus(window, vmID, AccessibleContext); + } + return FALSE; + } + + BOOL getAccessibleContextInfo(long vmID, + JOBJECT64 AccessibleContext, + AccessibleContextInfo *info) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleContextInfo( + vmID, + AccessibleContext, + info); + } + return FALSE; + } + + JOBJECT64 getAccessibleChildFromContext(long vmID, + JOBJECT64 AccessibleContext, + jint childIndex) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleChildFromContext( + vmID, + AccessibleContext, + childIndex); + } + return (JOBJECT64) 0; + } + + JOBJECT64 getAccessibleParentFromContext(long vmID, + JOBJECT64 AccessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleParentFromContext( + vmID, + AccessibleContext); + } + return (JOBJECT64) 0; + } + + // -------- begin AccessibleTable routines ------------- + + BOOL getAccessibleTableInfo(long vmID, JOBJECT64 ac, + AccessibleTableInfo *tableInfo) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTableInfo( + vmID, + ac, + tableInfo); + } + return FALSE; + } + + BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, + jint row, jint column, AccessibleTableCellInfo *tableCellInfo) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTableCellInfo( + vmID, + accessibleTable, + row, column, tableCellInfo); + } + return FALSE; + } + + BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTableRowHeader( + vmID, + acParent, + tableInfo); + } + return FALSE; + } + + BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTableColumnHeader( + vmID, + acParent, + tableInfo); + } + return FALSE; + } + + JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row) { + + if (theWindowsAccessBridge != 0) { + return (JOBJECT64)theWindowsAccessBridge->getAccessibleTableRowDescription( + vmID, + acParent, + row); + } + return (JOBJECT64)0; + } + + JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column) { + + if (theWindowsAccessBridge != 0) { + return (JOBJECT64)theWindowsAccessBridge->getAccessibleTableColumnDescription( + vmID, + acParent, + column); + } + return (JOBJECT64)0; + } + + jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTableRowSelectionCount(vmID, accessibleTable); + } + return -1; + } + + BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->isAccessibleTableRowSelected(vmID, accessibleTable, row); + } + return FALSE; + } + + BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count, jint *selections) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableRowSelections(vmID, accessibleTable, count, + selections); + } + return FALSE; + } + + + jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableColumnSelectionCount(vmID, accessibleTable); + } + return -1; + } + + BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->isAccessibleTableColumnSelected(vmID, accessibleTable, column); + } + return FALSE; + } + + BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count, jint *selections) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableColumnSelections(vmID, accessibleTable, count, + selections); + } + return FALSE; + } + + jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableRow(vmID, accessibleTable, index); + } + return -1; + } + + jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableColumn(vmID, accessibleTable, index); + } + return -1; + } + + jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column) { + if (theWindowsAccessBridge != 0 ) { + return theWindowsAccessBridge->getAccessibleTableIndex(vmID, accessibleTable, row, column); + } + return -1; + } + + /* --------- end AccessibleTable routines ------- */ + + // --------- AccessibleRelationSet methods + + BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext, + AccessibleRelationSetInfo *relationSetInfo) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleRelationSet(vmID, accessibleContext, relationSetInfo); + } + return FALSE; + } + + // --------- AccessibleHypertext methods + + BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, + AccessibleHypertextInfo *accessibleHypertextInfo) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleHypertext(vmID, accessibleContext, + accessibleHypertextInfo); + } + return FALSE; + } + + BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->activateAccessibleHyperlink(vmID, accessibleContext, + accessibleHyperlink); + } + return FALSE; + } + + jint getAccessibleHyperlinkCount(const long vmID, + const AccessibleContext accessibleContext) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleHyperlinkCount(vmID, accessibleContext); + } + return -1; + } + + + BOOL getAccessibleHypertextExt(const long vmID, + const AccessibleContext accessibleContext, + const jint nStartIndex, + /* OUT */ AccessibleHypertextInfo *hypertextInfo) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleHypertextExt(vmID, + accessibleContext, + nStartIndex, + hypertextInfo); + } + return FALSE; + } + + + jint getAccessibleHypertextLinkIndex(const long vmID, + const AccessibleHypertext hypertext, + const jint nIndex) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleHypertextLinkIndex(vmID, + hypertext, + nIndex); + } + return -1; + } + + + BOOL getAccessibleHyperlink(const long vmID, + const AccessibleHypertext hypertext, + const jint nIndex, + /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleHyperlink(vmID, + hypertext, + nIndex, + hyperlinkInfo); + } + return FALSE; + } + + + /* Accessible KeyBindings, Icons and Actions */ + BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext, AccessibleKeyBindings *keyBindings) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleKeyBindings(vmID, accessibleContext, keyBindings); + } + return FALSE; + } + + BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext, AccessibleIcons *icons) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleIcons(vmID, accessibleContext, icons); + } + return FALSE; + } + + BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext, AccessibleActions *actions) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleActions(vmID, accessibleContext, actions); + } + return FALSE; + } + + BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext, AccessibleActionsToDo *actionsToDo, + jint *failure) { + + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->doAccessibleActions(vmID, accessibleContext, actionsToDo, + failure); + } + return FALSE; + } + + /** + * 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(long vmID, AccessibleContext accessibleContext, wchar_t *name, int len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getVirtualAccessibleName(vmID, accessibleContext, name, len); + } + return FALSE; + } + + /** + * Request focus for a component. Returns whether successful; + * + * Bug ID 4944757 - requestFocus method needed + */ + BOOL requestFocus(long vmID, AccessibleContext accessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->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(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->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(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex, + AccessibleTextAttributesInfo *attributes, short *len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getTextAttributesInRange(vmID, accessibleContext, + startIndex, endIndex, attributes, len); + } + return FALSE; + } + + /** + * Gets the number of visible children of a component. Returns -1 on error. + * + * Bug ID 4944762- getVisibleChildren for list-like components needed + */ + int getVisibleChildrenCount(long vmID, AccessibleContext accessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->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(long vmID, AccessibleContext accessibleContext, int startIndex, + VisibleChildrenInfo *visibleChildrenInfo) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->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 (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->setCaretPosition(vmID, accessibleContext, position); + } + return FALSE; + } + + // -------- Accessible Text methods ------------- + + BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, + AccessibleTextInfo *textInfo, jint x, jint y) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextInfo( + vmID, + AccessibleContext, + textInfo, x, y); + } + return FALSE; + } + + BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, + AccessibleTextItemsInfo *textItems, jint index) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextItems( + vmID, + AccessibleContext, + textItems, index); + } + return FALSE; + } + + BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, + AccessibleTextSelectionInfo *selectionInfo) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextSelectionInfo( + vmID, + AccessibleContext, + selectionInfo); + } + return FALSE; + } + + BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, + jint index, AccessibleTextAttributesInfo *attributes) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextAttributes( + vmID, + AccessibleContext, + index, attributes); + } + return FALSE; + } + + BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, + AccessibleTextRectInfo *rectInfo, jint index) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextRect( + vmID, + AccessibleContext, + rectInfo, index); + } + return FALSE; + } + + BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, + AccessibleTextRectInfo *rectInfo, jint index) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getCaretLocation(vmID, + AccessibleContext, + rectInfo, index); + } + return FALSE; + } + + int getEventsWaiting() { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getEventsWaiting(); + } + return FALSE; + } + + BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, + jint index, jint *startIndex, jint *endIndex) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextLineBounds( + vmID, + AccessibleContext, + index, startIndex, endIndex); + } + return FALSE; + } + + BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, + jint start, jint end, wchar_t *text, short len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleTextRange( + vmID, + AccessibleContext, + start, end, text, len); + } + return FALSE; + } + + + // -------- Accessible Value methods ------------- + + BOOL getCurrentAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, + wchar_t *value, short len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getCurrentAccessibleValueFromContext( + vmID, AccessibleContext, value, len); + } + return FALSE; + } + + BOOL getMaximumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, + wchar_t *value, short len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getMaximumAccessibleValueFromContext( + vmID, AccessibleContext, value, len); + } + return FALSE; + } + + BOOL getMinimumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, + wchar_t *value, short len) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getMinimumAccessibleValueFromContext( + vmID, AccessibleContext, value, len); + } + return FALSE; + } + + // -------- Accessible Selection methods ------------- + + void addAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->addAccessibleSelectionFromContext( + vmID, AccessibleContext, i); + } + } + + void clearAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->clearAccessibleSelectionFromContext( + vmID, AccessibleContext); + } + } + + JOBJECT64 getAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleSelectionFromContext( + vmID, AccessibleContext, i); + } + return (JOBJECT64) 0; + } + + int getAccessibleSelectionCountFromContext(long vmID, JOBJECT64 AccessibleContext) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->getAccessibleSelectionCountFromContext( + vmID, AccessibleContext); + } + return -1; + } + + BOOL isAccessibleChildSelectedFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { + if (theWindowsAccessBridge != 0) { + return theWindowsAccessBridge->isAccessibleChildSelectedFromContext( + vmID, AccessibleContext, i); + } + return FALSE; + } + + void removeAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->removeAccessibleSelectionFromContext( + vmID, AccessibleContext, i); + } + } + + void selectAllAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->selectAllAccessibleSelectionFromContext( + vmID, AccessibleContext); + } + } + + + // -------- Event Handler methods ------------- + +#define SET_EVENT_FP(function, callbackFP) \ + void function(callbackFP fp) { \ + if (theWindowsAccessBridge != 0) { \ + theWindowsAccessBridge->function(fp); \ + } \ +} + + void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp) { + if (theWindowsAccessBridge != 0) { + theWindowsAccessBridge->setJavaShutdownFP(fp); + } + } + + SET_EVENT_FP(setPropertyChangeFP, AccessBridge_PropertyChangeFP) + SET_EVENT_FP(setFocusGainedFP, AccessBridge_FocusGainedFP) + SET_EVENT_FP(setFocusLostFP, AccessBridge_FocusLostFP) + SET_EVENT_FP(setCaretUpdateFP, AccessBridge_CaretUpdateFP) + SET_EVENT_FP(setMouseClickedFP, AccessBridge_MouseClickedFP) + SET_EVENT_FP(setMouseEnteredFP, AccessBridge_MouseEnteredFP) + SET_EVENT_FP(setMouseExitedFP, AccessBridge_MouseExitedFP) + SET_EVENT_FP(setMousePressedFP, AccessBridge_MousePressedFP) + SET_EVENT_FP(setMouseReleasedFP, AccessBridge_MouseReleasedFP) + SET_EVENT_FP(setMenuCanceledFP, AccessBridge_MenuCanceledFP) + SET_EVENT_FP(setMenuDeselectedFP, AccessBridge_MenuDeselectedFP) + SET_EVENT_FP(setMenuSelectedFP, AccessBridge_MenuSelectedFP) + SET_EVENT_FP(setPopupMenuCanceledFP, AccessBridge_PopupMenuCanceledFP) + SET_EVENT_FP(setPopupMenuWillBecomeInvisibleFP, AccessBridge_PopupMenuWillBecomeInvisibleFP) + SET_EVENT_FP(setPopupMenuWillBecomeVisibleFP, AccessBridge_PopupMenuWillBecomeVisibleFP) + + SET_EVENT_FP(setPropertyNameChangeFP, AccessBridge_PropertyNameChangeFP) + SET_EVENT_FP(setPropertyDescriptionChangeFP, AccessBridge_PropertyDescriptionChangeFP) + SET_EVENT_FP(setPropertyStateChangeFP, AccessBridge_PropertyStateChangeFP) + SET_EVENT_FP(setPropertyValueChangeFP, AccessBridge_PropertyValueChangeFP) + SET_EVENT_FP(setPropertySelectionChangeFP, AccessBridge_PropertySelectionChangeFP) + SET_EVENT_FP(setPropertyTextChangeFP, AccessBridge_PropertyTextChangeFP) + SET_EVENT_FP(setPropertyCaretChangeFP, AccessBridge_PropertyCaretChangeFP) + SET_EVENT_FP(setPropertyVisibleDataChangeFP, AccessBridge_PropertyVisibleDataChangeFP) + SET_EVENT_FP(setPropertyChildChangeFP, AccessBridge_PropertyChildChangeFP) + SET_EVENT_FP(setPropertyActiveDescendentChangeFP, AccessBridge_PropertyActiveDescendentChangeFP) + + SET_EVENT_FP(setPropertyTableModelChangeFP, AccessBridge_PropertyTableModelChangeFP) + +#ifdef __cplusplus + } +#endif