--- /dev/null 2015-03-20 22:56:28.000000000 -0500 +++ new/jdk/src/jdk.accessibility/windows/native/libaccessbridge/WinAccessBridge.h 2015-03-20 22:56:27.190279400 -0500 @@ -0,0 +1,317 @@ +/* + * 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. + */ + +/* + * A DLL which is loaded by Windows executables to handle communication + * between Java VMs purposes of Accessbility. + */ + +#ifndef __WinAccessBridge_H__ +#define __WinAccessBridge_H__ + +#include +#include "AccessBridgePackages.h" +#include "AccessBridgeEventHandler.h" +#include "AccessBridgeJavaVMInstance.h" +#include "AccessBridgeMessageQueue.h" + + +extern "C" { + BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, + LPVOID lpvReserved); + void AppendToCallOutput(char *s); + BOOL CALLBACK AccessBridgeDialogProc(HWND hDlg, UINT message, + UINT wParam, LONG lParam); + HWND getTopLevelHWND(HWND descendent); +} + +LRESULT CALLBACK WinAccessBridgeWindowProc(HWND hWnd, UINT message, + UINT wParam, LONG lParam); + +BOOL CALLBACK DeleteItemProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam); + +/** + * The WinAccessBridge class. The core of the Windows AT AccessBridge dll + */ +class WinAccessBridge { + HINSTANCE windowsInstance; + HWND dialogWindow; + AccessBridgeJavaVMInstance *javaVMs; + AccessBridgeEventHandler *eventHandler; + AccessBridgeMessageQueue *messageQueue; + +public: + WinAccessBridge(HINSTANCE hInstance); + ~WinAccessBridge(); + BOOL initWindow(); + + HWND showWinAccessBridgeGUI(int showCommand); + + // IPC with the Java AccessBridge DLL + LRESULT rendezvousWithNewJavaDLL(HWND JavaBridgeDLLwindow, long vmID); + + void sendPackage(char *buffer, long bufsize, HWND destWindow); + BOOL sendMemoryPackage(char *buffer, long bufsize, HWND destWindow); + BOOL queuePackage(char *buffer, long bufsize); + BOOL receiveAQueuedPackage(); + void preProcessPackage(char *buffer, long bufsize); + void processPackage(char *buffer, long bufsize); + void JavaVMDestroyed(HWND VMBridgeDLLWindow); + + // Java VM object memory management + void releaseJavaObject(long vmID, JOBJECT64 object); + + // Version info + BOOL getVersionInfo(long vmID, AccessBridgeVersionInfo *info); + + // HWND management methods + HWND getNextJavaWindow(HWND previous); + BOOL isJavaWindow(HWND window); + BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext); + HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext); + + /* Additional utility methods */ + BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2); + + BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text); + + AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, + const wchar_t *role); + + AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext); + + AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, + const wchar_t *role); + + int getObjectDepth (const long vmID, const AccessibleContext accessibleContext); + + AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext); + + + // Accessible Context methods + BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent, + jint x, jint y, JOBJECT64 *AccessibleContext); + BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext); + BOOL getAccessibleContextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleContextInfo *info); + JOBJECT64 getAccessibleChildFromContext(long vmID, JOBJECT64 AccessibleContext, jint childIndex); + JOBJECT64 getAccessibleParentFromContext(long vmID, JOBJECT64 AccessibleContext); + + /* begin AccessibleTable methods */ + BOOL getAccessibleTableInfo(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo); + BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, jint row, jint column, + AccessibleTableCellInfo *tableCellInfo); + + BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo); + BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo); + + JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row); + JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column); + + jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable); + BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row); + BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count, + jint *selections); + + jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable); + BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column); + BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count, + jint *selections); + + jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index); + jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index); + jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column); + + /* end AccessibleTable methods */ + + // --------- AccessibleRelationSet methods + BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext, AccessibleRelationSetInfo *relationSet); + + // --------- AccessibleHypertext methods + BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, AccessibleHypertextInfo *hypertextInfo); + BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink); + + jint getAccessibleHyperlinkCount(const long vmID, + const AccessibleContext accessibleContext); + + BOOL getAccessibleHypertextExt(const long vmID, + const AccessibleContext accessibleContext, + const jint nStartIndex, + /* OUT */ AccessibleHypertextInfo *hypertextInfo); + + jint getAccessibleHypertextLinkIndex(const long vmID, + const AccessibleHypertext hypertext, + const jint nIndex); + + BOOL getAccessibleHyperlink(const long vmID, + const AccessibleHypertext hypertext, + const jint nIndex, + /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo); + + + /* Accessible KeyBindings, Icons and Actions */ + BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext, + AccessibleKeyBindings *keyBindings); + + BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext, + AccessibleIcons *icons); + + BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext, + AccessibleActions *actions); + + BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext, + AccessibleActionsToDo *actionsToDo, jint *failure); + + + // Accessible Text methods + BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextInfo *textInfo, jint x, jint y); + BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, AccessibleTextItemsInfo *textItems, jint index); + BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextSelectionInfo *selectionInfo); + BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, jint index, AccessibleTextAttributesInfo *attributes); + BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index); + BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, jint index, jint *startIndex, jint *endIndex); + BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, jint start, jint end, wchar_t *text, short len); + + // Accessible Value methods + BOOL getCurrentAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len); + BOOL getMaximumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len); + BOOL getMinimumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len); + + // Accessible Selection methods + void addAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i); + void clearAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext); + JOBJECT64 getAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i); + int getAccessibleSelectionCountFromContext(long vmID, JOBJECT64 AccessibleContext); + BOOL isAccessibleChildSelectedFromContext(long vmID, JOBJECT64 AccessibleContext, int i); + void removeAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i); + void selectAllAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext); + + // Event handling methods + void addJavaEventNotification(jlong type); + void removeJavaEventNotification(jlong type); + void addAccessibilityEventNotification(jlong type); + void removeAccessibilityEventNotification(jlong type); + + void setPropertyChangeFP(AccessBridge_PropertyChangeFP fp); + void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp); + void setFocusGainedFP(AccessBridge_FocusGainedFP fp); + void setFocusLostFP(AccessBridge_FocusLostFP fp); + void setCaretUpdateFP(AccessBridge_CaretUpdateFP fp); + void setMouseClickedFP(AccessBridge_MouseClickedFP fp); + void setMouseEnteredFP(AccessBridge_MouseEnteredFP fp); + void setMouseExitedFP(AccessBridge_MouseExitedFP fp); + void setMousePressedFP(AccessBridge_MousePressedFP fp); + void setMouseReleasedFP(AccessBridge_MouseReleasedFP fp); + void setMenuCanceledFP(AccessBridge_MenuCanceledFP fp); + void setMenuDeselectedFP(AccessBridge_MenuDeselectedFP fp); + void setMenuSelectedFP(AccessBridge_MenuSelectedFP fp); + void setPopupMenuCanceledFP(AccessBridge_PopupMenuCanceledFP fp); + void setPopupMenuWillBecomeInvisibleFP(AccessBridge_PopupMenuWillBecomeInvisibleFP fp); + void setPopupMenuWillBecomeVisibleFP(AccessBridge_PopupMenuWillBecomeVisibleFP fp); + + void setPropertyNameChangeFP(AccessBridge_PropertyNameChangeFP fp); + void setPropertyDescriptionChangeFP(AccessBridge_PropertyDescriptionChangeFP fp); + void setPropertyStateChangeFP(AccessBridge_PropertyStateChangeFP fp); + void setPropertyValueChangeFP(AccessBridge_PropertyValueChangeFP fp); + void setPropertySelectionChangeFP(AccessBridge_PropertySelectionChangeFP fp); + void setPropertyTextChangeFP(AccessBridge_PropertyTextChangeFP fp); + void setPropertyCaretChangeFP(AccessBridge_PropertyCaretChangeFP fp); + void setPropertyVisibleDataChangeFP(AccessBridge_PropertyVisibleDataChangeFP fp); + void setPropertyChildChangeFP(AccessBridge_PropertyChildChangeFP fp); + void setPropertyActiveDescendentChangeFP(AccessBridge_PropertyActiveDescendentChangeFP fp); + + void setPropertyTableModelChangeFP(AccessBridge_PropertyTableModelChangeFP fp); + + /** + * 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); + + /** + * Request focus for a component. Returns whether successful; + * + * Bug ID 4944757 - requestFocus method needed + */ + BOOL requestFocus(long vmID, AccessibleContext accessibleContext); + + /** + * 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); + + /** + * 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); + + /** + * Gets 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); + + /** + * 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); + + /** + * Set the caret to a text position. Returns whether successful; + * + * Bug ID 4944770 - setCaretPosition method needed + */ + BOOL setCaretPosition(long vmID, AccessibleContext accessibleContext, int position); + + + /** + * Gets the text caret bounding rectangle + */ + BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index); + + /** + * Gets number of events waiting in the message queue + */ + int getEventsWaiting(); + +}; + +#endif