Path: blob/master/src/jdk.accessibility/windows/native/libwindowsaccessbridge/WinAccessBridge.h
40957 views
/*1* Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425/*26* A DLL which is loaded by Windows executables to handle communication27* between Java VMs purposes of Accessbility.28*/2930#ifndef __WinAccessBridge_H__31#define __WinAccessBridge_H__3233#include <windows.h>34#include "AccessBridgePackages.h"35#include "AccessBridgeEventHandler.h"36#include "AccessBridgeJavaVMInstance.h"37#include "AccessBridgeMessageQueue.h"383940extern "C" {41BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason,42LPVOID lpvReserved);43void AppendToCallOutput(char *s);44BOOL CALLBACK AccessBridgeDialogProc(HWND hDlg, UINT message,45WPARAM wParam, LPARAM lParam);46HWND getTopLevelHWND(HWND descendent);47}4849/**50* The WinAccessBridge class. The core of the Windows AT AccessBridge dll51*/52class WinAccessBridge {53HINSTANCE windowsInstance;54HWND dialogWindow;55AccessBridgeJavaVMInstance *javaVMs;56AccessBridgeEventHandler *eventHandler;57AccessBridgeMessageQueue *messageQueue;5859public:60WinAccessBridge(HINSTANCE hInstance);61~WinAccessBridge();62BOOL initWindow();6364HWND showWinAccessBridgeGUI(int showCommand);6566// IPC with the Java AccessBridge DLL67LRESULT rendezvousWithNewJavaDLL(HWND JavaBridgeDLLwindow, long vmID);6869void sendPackage(char *buffer, long bufsize, HWND destWindow);70BOOL sendMemoryPackage(char *buffer, long bufsize, HWND destWindow);71BOOL queuePackage(char *buffer, long bufsize);72BOOL receiveAQueuedPackage();73void preProcessPackage(char *buffer, long bufsize);74void processPackage(char *buffer, long bufsize);75void JavaVMDestroyed(HWND VMBridgeDLLWindow);7677// Java VM object memory management78void releaseJavaObject(long vmID, JOBJECT64 object);7980// Version info81BOOL getVersionInfo(long vmID, AccessBridgeVersionInfo *info);8283// HWND management methods84HWND getNextJavaWindow(HWND previous);85BOOL isJavaWindow(HWND window);86BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext);87HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext);8889/* Additional utility methods */90BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2);9192BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text);9394AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext,95const wchar_t *role);9697AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext);9899AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext,100const wchar_t *role);101102int getObjectDepth (const long vmID, const AccessibleContext accessibleContext);103104AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext);105106107// Accessible Context methods108BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent,109jint x, jint y, JOBJECT64 *AccessibleContext);110BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext);111BOOL getAccessibleContextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleContextInfo *info);112JOBJECT64 getAccessibleChildFromContext(long vmID, JOBJECT64 AccessibleContext, jint childIndex);113JOBJECT64 getAccessibleParentFromContext(long vmID, JOBJECT64 AccessibleContext);114115/* begin AccessibleTable methods */116BOOL getAccessibleTableInfo(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);117BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, jint row, jint column,118AccessibleTableCellInfo *tableCellInfo);119120BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);121BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);122123JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row);124JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column);125126jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable);127BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row);128BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count,129jint *selections);130131jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable);132BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column);133BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count,134jint *selections);135136jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index);137jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index);138jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column);139140/* end AccessibleTable methods */141142// --------- AccessibleRelationSet methods143BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext, AccessibleRelationSetInfo *relationSet);144145// --------- AccessibleHypertext methods146BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, AccessibleHypertextInfo *hypertextInfo);147BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink);148149jint getAccessibleHyperlinkCount(const long vmID,150const AccessibleContext accessibleContext);151152BOOL getAccessibleHypertextExt(const long vmID,153const AccessibleContext accessibleContext,154const jint nStartIndex,155/* OUT */ AccessibleHypertextInfo *hypertextInfo);156157jint getAccessibleHypertextLinkIndex(const long vmID,158const AccessibleHypertext hypertext,159const jint nIndex);160161BOOL getAccessibleHyperlink(const long vmID,162const AccessibleHypertext hypertext,163const jint nIndex,164/* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo);165166167/* Accessible KeyBindings, Icons and Actions */168BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext,169AccessibleKeyBindings *keyBindings);170171BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext,172AccessibleIcons *icons);173174BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext,175AccessibleActions *actions);176177BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext,178AccessibleActionsToDo *actionsToDo, jint *failure);179180181// Accessible Text methods182BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextInfo *textInfo, jint x, jint y);183BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, AccessibleTextItemsInfo *textItems, jint index);184BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextSelectionInfo *selectionInfo);185BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, jint index, AccessibleTextAttributesInfo *attributes);186BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);187BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, jint index, jint *startIndex, jint *endIndex);188BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, jint start, jint end, wchar_t *text, short len);189190// Accessible Value methods191BOOL getCurrentAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len);192BOOL getMaximumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len);193BOOL getMinimumAccessibleValueFromContext(long vmID, JOBJECT64 AccessibleContext, wchar_t *value, short len);194195// Accessible Selection methods196void addAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i);197void clearAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext);198JOBJECT64 getAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i);199int getAccessibleSelectionCountFromContext(long vmID, JOBJECT64 AccessibleContext);200BOOL isAccessibleChildSelectedFromContext(long vmID, JOBJECT64 AccessibleContext, int i);201void removeAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext, int i);202void selectAllAccessibleSelectionFromContext(long vmID, JOBJECT64 AccessibleContext);203204// Event handling methods205void addJavaEventNotification(jlong type);206void removeJavaEventNotification(jlong type);207void addAccessibilityEventNotification(jlong type);208void removeAccessibilityEventNotification(jlong type);209210void setPropertyChangeFP(AccessBridge_PropertyChangeFP fp);211void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp);212void setFocusGainedFP(AccessBridge_FocusGainedFP fp);213void setFocusLostFP(AccessBridge_FocusLostFP fp);214void setCaretUpdateFP(AccessBridge_CaretUpdateFP fp);215void setMouseClickedFP(AccessBridge_MouseClickedFP fp);216void setMouseEnteredFP(AccessBridge_MouseEnteredFP fp);217void setMouseExitedFP(AccessBridge_MouseExitedFP fp);218void setMousePressedFP(AccessBridge_MousePressedFP fp);219void setMouseReleasedFP(AccessBridge_MouseReleasedFP fp);220void setMenuCanceledFP(AccessBridge_MenuCanceledFP fp);221void setMenuDeselectedFP(AccessBridge_MenuDeselectedFP fp);222void setMenuSelectedFP(AccessBridge_MenuSelectedFP fp);223void setPopupMenuCanceledFP(AccessBridge_PopupMenuCanceledFP fp);224void setPopupMenuWillBecomeInvisibleFP(AccessBridge_PopupMenuWillBecomeInvisibleFP fp);225void setPopupMenuWillBecomeVisibleFP(AccessBridge_PopupMenuWillBecomeVisibleFP fp);226227void setPropertyNameChangeFP(AccessBridge_PropertyNameChangeFP fp);228void setPropertyDescriptionChangeFP(AccessBridge_PropertyDescriptionChangeFP fp);229void setPropertyStateChangeFP(AccessBridge_PropertyStateChangeFP fp);230void setPropertyValueChangeFP(AccessBridge_PropertyValueChangeFP fp);231void setPropertySelectionChangeFP(AccessBridge_PropertySelectionChangeFP fp);232void setPropertyTextChangeFP(AccessBridge_PropertyTextChangeFP fp);233void setPropertyCaretChangeFP(AccessBridge_PropertyCaretChangeFP fp);234void setPropertyVisibleDataChangeFP(AccessBridge_PropertyVisibleDataChangeFP fp);235void setPropertyChildChangeFP(AccessBridge_PropertyChildChangeFP fp);236void setPropertyActiveDescendentChangeFP(AccessBridge_PropertyActiveDescendentChangeFP fp);237238void setPropertyTableModelChangeFP(AccessBridge_PropertyTableModelChangeFP fp);239240/**241* Additional methods for Teton242*/243244/**245* Gets the AccessibleName for a component based upon the JAWS algorithm. Returns246* whether successful.247*248* Bug ID 4916682 - Implement JAWS AccessibleName policy249*/250BOOL getVirtualAccessibleName(long vmID, AccessibleContext accessibleContext, wchar_t *name, int len);251252/**253* Request focus for a component. Returns whether successful;254*255* Bug ID 4944757 - requestFocus method needed256*/257BOOL requestFocus(long vmID, AccessibleContext accessibleContext);258259/**260* Selects text between two indices. Selection includes the text at the start index261* and the text at the end index. Returns whether successful;262*263* Bug ID 4944758 - selectTextRange method needed264*/265BOOL selectTextRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex);266267/**268* Get text attributes between two indices. The attribute list includes the text at the269* start index and the text at the end index. Returns whether successful;270*271* Bug ID 4944761 - getTextAttributes between two indices method needed272*/273BOOL getTextAttributesInRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex,274AccessibleTextAttributesInfo *attributes, short *len);275276/**277* Gets number of visible children of a component. Returns -1 on error.278*279* Bug ID 4944762- getVisibleChildren for list-like components needed280*/281int getVisibleChildrenCount(long vmID, AccessibleContext accessibleContext);282283/**284* Gets the visible children of an AccessibleContext. Returns whether successful;285*286* Bug ID 4944762- getVisibleChildren for list-like components needed287*/288BOOL getVisibleChildren(long vmID, AccessibleContext accessibleContext, int startIndex,289VisibleChildrenInfo *visibleChildrenInfo);290291/**292* Set the caret to a text position. Returns whether successful;293*294* Bug ID 4944770 - setCaretPosition method needed295*/296BOOL setCaretPosition(long vmID, AccessibleContext accessibleContext, int position);297298299/**300* Gets the text caret bounding rectangle301*/302BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);303304/**305* Gets number of events waiting in the message queue306*/307int getEventsWaiting();308309};310311#endif312313314