1 /*
   2  * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /*
  27  * Glue routines called by Windows AT into the WindowsAccessBridge dll
  28  */
  29 
  30 #ifndef __AccessBridgeWindowsEntryPoints_H__
  31 #define __AccessBridgeWindowsEntryPoints_H__
  32 
  33 #include <windows.h>
  34 #include <jni.h>
  35 
  36 #include "AccessBridgePackages.h"
  37 #include "AccessBridgeCallbacks.h"
  38 
  39 #ifdef __cplusplus
  40 extern "C" {
  41 #endif
  42 
  43     void Windows_run();
  44 
  45     void releaseJavaObject(long vmID, JOBJECT64 object);
  46     void getVersionInfo(long vmID, AccessBridgeVersionInfo *info);
  47 
  48     // Window related functions
  49     HWND getTopLevelHWND(HWND descendent);
  50     BOOL isJavaWindow(HWND window);
  51     BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext);
  52     HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext);
  53 
  54     // returns whether two objects are the same
  55     BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2);
  56 
  57     // Accessible Context functions
  58     BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent,
  59                                 jint x, jint y, JOBJECT64 *AccessibleContext);
  60     BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext);
  61     BOOL getAccessibleContextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleContextInfo *info);
  62     JOBJECT64 getAccessibleChildFromContext(long vmID, JOBJECT64 AccessibleContext, jint childIndex);
  63     JOBJECT64 getAccessibleParentFromContext(long vmID, JOBJECT64 AccessibleContext);
  64 
  65     /* begin AccessibleTable */
  66     BOOL getAccessibleTableInfo(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
  67     BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, jint row, jint column,
  68                                     AccessibleTableCellInfo *tableCellInfo);
  69 
  70     BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
  71     BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
  72 
  73     JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row);
  74     JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column);
  75 
  76     jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable);
  77     BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row);
  78     BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count,
  79                                          jint *selections);
  80 
  81     jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable);
  82     BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column);
  83     BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count,
  84                                             jint *selections);
  85 
  86     jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index);
  87     jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index);
  88     jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column);
  89 
  90     /* end AccessibleTable */
  91 
  92     BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext,
  93                                   AccessibleRelationSetInfo *relationSetInfo);
  94 
  95     // AccessibleHypertext methods
  96     BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, AccessibleHypertextInfo *hypertextInfo);
  97 
  98     BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink);
  99 
 100     jint getAccessibleHyperlinkCount(const long vmID,
 101                                      const AccessibleContext accessibleContext);
 102 
 103     BOOL getAccessibleHypertextExt(const long vmID,
 104                                    const AccessibleContext accessibleContext,
 105                                    const jint nStartIndex,
 106                                    /* OUT */ AccessibleHypertextInfo *hypertextInfo);
 107 
 108     jint getAccessibleHypertextLinkIndex(const long vmID,
 109                                          const AccessibleHypertext hypertext,
 110                                          const jint nIndex);
 111 
 112     BOOL getAccessibleHyperlink(const long vmID,
 113                                 const AccessibleHypertext hypertext,
 114                                 const jint nIndex,
 115                                 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo);
 116 
 117 
 118     /* Accessible KeyBindings, Icons and Actions */
 119     BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext,
 120                                   AccessibleKeyBindings *keyBindings);
 121 
 122     BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext,
 123                             AccessibleIcons *icons);
 124 
 125     BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext,
 126                               AccessibleActions *actions);
 127 
 128     BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext,
 129                              AccessibleActionsToDo *actionsToDo, jint *failure);
 130 
 131     /* ----- Additional AccessibleHypertext methods for Teton */
 132 
 133 
 134     jint getAccessibleHypertextLinkCount(const long vmID,
 135                                          const AccessibleContext accessibleContext);
 136 
 137     BOOL getAccessibleHypertextExt(const long vmID,
 138                                    const AccessibleContext accessibleContext,
 139                                    const jint nStartIndex,
 140                                    /* OUT */ AccessibleHypertextInfo *hypertextInfo);
 141 
 142     jint getAccessibleHypertextLinkIndex(const long vmID,
 143                                          const AccessibleContext accessibleContext,
 144                                          const jint nIndex);
 145 
 146     BOOL getAccessibleHyperlink(const long vmID,
 147                                 const AccessibleContext accessibleContext,
 148                                 const jint nIndex,
 149                                 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo);
 150 
 151 
 152     /* Additional utility methods */
 153     BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text);
 154 
 155     AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);
 156 
 157     AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext);
 158 
 159     AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);
 160 
 161     int getObjectDepth (const long vmID, const AccessibleContext accessibleContext);
 162 
 163     AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext);
 164 
 165     /**
 166      * Additional methods for Teton
 167      */
 168 
 169     /**
 170      * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns
 171      * whether successful.
 172      *
 173      * Bug ID 4916682 - Implement JAWS AccessibleName policy
 174      */
 175     BOOL getVirtualAccessibleName(long vmID, AccessibleContext accessibleContext, wchar_t *name, int len);
 176 
 177     /**
 178      * Request focus for a component. Returns whether successful;
 179      *
 180      * Bug ID 4944757 - requestFocus method needed
 181      */
 182     BOOL requestFocus(long vmID, AccessibleContext accessibleContext);
 183 
 184     /**
 185      * Selects text between two indices.  Selection includes the text at the start index
 186      * and the text at the end index. Returns whether successful;
 187      *
 188      * Bug ID 4944758 - selectTextRange method needed
 189      */
 190     BOOL selectTextRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex);
 191 
 192     /**
 193      * Get text attributes between two indices.  The attribute list includes the text at the
 194      * start index and the text at the end index. Returns whether successful;
 195      *
 196      * Bug ID 4944761 - getTextAttributes between two indices method needed
 197      */
 198     BOOL getTextAttributesInRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex,
 199                                   AccessibleTextAttributesInfo *attributes, short *len);
 200 
 201     /**
 202      * Returns the number of visible children of a component. Returns -1 on error.
 203      *
 204      * Bug ID 4944762- getVisibleChildren for list-like components needed
 205      */
 206     int getVisibleChildrenCount(long vmID, AccessibleContext accessibleContext);
 207 
 208     /**
 209      * Gets the visible children of an AccessibleContext. Returns whether successful;
 210      *
 211      * Bug ID 4944762- getVisibleChildren for list-like components needed
 212      */
 213     BOOL getVisibleChildren(long vmID, AccessibleContext accessibleContext, int startIndex,
 214                             VisibleChildrenInfo *visibleChildrenInfo);
 215 
 216     /**
 217      * Set the caret to a text position. Returns whether successful;
 218      *
 219      * Bug ID 4944770 - setCaretPosition method needed
 220      */
 221     BOOL setCaretPosition(long vmID, AccessibleContext accessibleContext, int position);
 222 
 223     /**
 224      * Gets the text caret bounding rectangle
 225      */
 226     BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);
 227 
 228     // Accessible Text functions
 229     BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextInfo *textInfo, jint x, jint y);
 230     BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, AccessibleTextItemsInfo *textItems, jint index);
 231     BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextSelectionInfo *selectionInfo);
 232     BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, jint index, AccessibleTextAttributesInfo *attributes);
 233     BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);
 234     BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, jint index, jint *startIndex, jint *endIndex);
 235     BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, jint start, jint end, wchar_t *text, short len);
 236 
 237     // Accessible Value methods
 238     BOOL getCurrentAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
 239     BOOL getMaximumAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
 240     BOOL getMinimumAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
 241 
 242     // Accessible Selection methods
 243     void addAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
 244     void clearAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext);
 245     JOBJECT64 getAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
 246     int getAccessibleSelectionCountFromContext(long vmID,JOBJECT64 AccessibleContext);
 247     BOOL isAccessibleChildSelectedFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
 248     void removeAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
 249     void selectAllAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext);
 250 
 251 
 252     // PropertyChange Event registry routines
 253     void setPropertyChangeFP(AccessBridge_PropertyChangeFP fp);
 254 
 255     // Java application shutdown
 256     void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp);
 257 
 258     // Focus Event registry routines
 259     void setFocusGainedFP(AccessBridge_FocusGainedFP fp);
 260     void setFocusLostFP(AccessBridge_FocusLostFP fp);
 261 
 262     // Caret Event registry routines
 263     void setCaretUpdateFP(AccessBridge_CaretUpdateFP fp);
 264 
 265     // Mouse Event registry routines
 266     void setMouseClickedFP(AccessBridge_MouseClickedFP fp);
 267     void setMouseEnteredFP(AccessBridge_MouseEnteredFP fp);
 268     void setMouseExitedFP(AccessBridge_MouseExitedFP fp);
 269     void setMousePressedFP(AccessBridge_MousePressedFP fp);
 270     void setMouseReleasedFP(AccessBridge_MouseReleasedFP fp);
 271 
 272     // Menu/PopupMenu Event registry routines
 273     void setMenuCanceledFP(AccessBridge_MenuCanceledFP fp);
 274     void setMenuDeselectedFP(AccessBridge_MenuDeselectedFP fp);
 275     void setMenuSelectedFP(AccessBridge_MenuSelectedFP fp);
 276     void setPopupMenuCanceledFP(AccessBridge_PopupMenuCanceledFP fp);
 277     void setPopupMenuWillBecomeInvisibleFP(AccessBridge_PopupMenuWillBecomeInvisibleFP fp);
 278     void setPopupMenuWillBecomeVisibleFP(AccessBridge_PopupMenuWillBecomeVisibleFP fp);
 279 
 280     // Accessibility PropertyChange Event registry routines
 281     void setPropertyNameChangeFP(AccessBridge_PropertyNameChangeFP fp);
 282     void setPropertyDescriptionChangeFP(AccessBridge_PropertyDescriptionChangeFP fp);
 283     void setPropertyStateChangeFP(AccessBridge_PropertyStateChangeFP fp);
 284     void setPropertyValueChangeFP(AccessBridge_PropertyValueChangeFP fp);
 285     void setPropertySelectionChangeFP(AccessBridge_PropertySelectionChangeFP fp);
 286     void setPropertyTextChangeFP(AccessBridge_PropertyTextChangeFP fp);
 287     void setPropertyCaretChangeFP(AccessBridge_PropertyCaretChangeFP fp);
 288     void setPropertyVisibleDataChangeFP(AccessBridge_PropertyVisibleDataChangeFP fp);
 289     void setPropertyChildChangeFP(AccessBridge_PropertyChildChangeFP fp);
 290     void setPropertyActiveDescendentChangeFP(AccessBridge_PropertyActiveDescendentChangeFP fp);
 291 
 292     void setPropertyTableModelChangeFP(AccessBridge_PropertyTableModelChangeFP fp);
 293 
 294 
 295 
 296 #ifdef __cplusplus
 297 }
 298 #endif
 299 
 300 #endif