--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/jdk.accessibility/windows/native/libwindowsaccessbridge/AccessBridgeWindowsEntryPoints.cpp Fri Mar 27 16:13:45 2015 -0500
@@ -0,0 +1,856 @@
+/*
+ * Copyright (c) 2005, 2015, 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();
+ 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