| /* |
| * 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 <windows.h> |
| #include <jni.h> |
| |
| |
| 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(); |
| } |
| } |
| |
| /* |
| /** |
| * 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 |