Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/windows/native/sun/bridge/JavaAccessBridge.cpp
32287 views
/*1* Copyright (c) 2005, 2019, 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 Java applications to handle communication27* between Java VMs purposes of Accessbility.28*/2930#include "AccessBridgeDebug.h"31#include "JavaAccessBridge.h"32#include "com_sun_java_accessibility_AccessBridge.h" // programatically generated by JNI33#include "accessBridgeResource.h"34#include "accessBridgeCallbacks.h"35#include "AccessBridgeMessages.h"363738#include <windows.h>39#include <stdio.h>4041// #ifdef JAWT_SUPPORT42#include <jawt.h>43#include <win32/jawt_md.h>44// #endif /* JAWT_SUPPORT */4546JavaAccessBridge *theJavaAccessBridge;47HWND theDialogWindow;4849// re-entrance lock for receiving memory messages50CRITICAL_SECTION receiveMemoryIPCLock;515253// unique broadcast msg. IDs gotten dymanically54extern UINT theFromJavaHelloMsgID;55extern UINT theFromWindowsHelloMsgID;565758// ---------------------------------------------------------------------------5960extern "C" {61/**62* DllMain - where Windows executables will load/unload us63*64*/65BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved) {6667switch (fdwReason) {68case DLL_PROCESS_ATTACH:69InitializeCriticalSection(&receiveMemoryIPCLock);70theJavaAccessBridge = new JavaAccessBridge(hinstDll);71break;7273case DLL_PROCESS_DETACH: // A Windows executable unloaded us74if (theJavaAccessBridge != (JavaAccessBridge *) 0) {75delete theJavaAccessBridge;76DeleteCriticalSection(&receiveMemoryIPCLock);77}78break;79}80return TRUE;81}8283/**84* Open a native window (and init the wrappers we'll be using)85*86*/87JNIEXPORT void JNICALL88Java_com_sun_java_accessibility_AccessBridge_runDLL(JNIEnv *env, jobject obj) {89PrintDebugString("[INFO]: JavaAccessBridge.DLL runDLL() called");90theJavaAccessBridge->javaRun(env, obj);91}9293/**94* Our window proc95*96*/97BOOL APIENTRY AccessBridgeDialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {98int command;99COPYDATASTRUCT *sentToUs;100char *package;101102switch (message) {103case WM_INITDIALOG:104PrintDebugString("[INFO]: In AccessBridgeDialog - Initializing");105break;106107case WM_COMMAND:108command = LOWORD (wParam);109PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COMMAND, command: %X", command);110break;111112// call from Java with data for us to deliver113case WM_COPYDATA:114if (theDialogWindow == (HWND) wParam) {115PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COPYDATA from ourselves");116} else {117PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COPYDATA from HWND %p", wParam);118sentToUs = (COPYDATASTRUCT *) lParam;119package = (char *) sentToUs->lpData;120theJavaAccessBridge->processPackage(package, sentToUs->cbData);121}122break;123124// call from Java with data for us retrieve from memory mapped file and deliver125case AB_MESSAGE_WAITING:126// wParam == sourceHwnd127// lParam == buffer size in shared memory128if (theDialogWindow == (HWND) wParam) {129PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_MESSAGE_WAITING from ourselves");130} else {131PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_MESSAGE_WAITING from HWND %p", wParam);132LRESULT returnVal = theJavaAccessBridge->receiveMemoryPackage((HWND) wParam, (long) lParam);133}134break;135136// a JavaAccessBridge DLL is going away137case AB_DLL_GOING_AWAY:138PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_DLL_GOING_AWAY message");139theJavaAccessBridge->WindowsATDestroyed((HWND) wParam);140break;141142default:143// the Windows AT is saying "hi"!144// wParam == sourceHwnc; lParam unused145if (message == theFromWindowsHelloMsgID) {146// A new Windows AT just said "hi";147// say "hi" back so it can mate up with us148// otherwise don't do anything (e.g. don't set up data structures yet)149PrintDebugString("[INFO]: In AccessBridgeDialog - Got theFromWindowsHelloMsgID message");150theJavaAccessBridge->postHelloToWindowsDLLMsg((HWND) wParam);151}152}153return FALSE;154}155156}157158159// -----------------------------160161162/**163* Initialize the JavaAccessBridge164*165*/166JavaAccessBridge::JavaAccessBridge(HINSTANCE hInstance) {167windowsInstance = hInstance;168ATs = (AccessBridgeATInstance *) 0;169initializeFileLogger("java_access_bridge");170initBroadcastMessageIDs(); // get the unique to us broadcast msg. IDs171}172173extern DWORD JavaBridgeThreadId;174175/**176* Destroy the JavaAccessBridge177*178*/179JavaAccessBridge::~JavaAccessBridge() {180// inform all other AccessBridges that we're going away181182PrintDebugString("[INFO]: in JavaAccessBridge::~JavaAccessBridge()");183184// Send a shutdown message for those applications like StarOffice that do185// send a shutdown message themselves.186javaShutdown(NULL, 0);187188AccessBridgeATInstance *current = ATs;189while (current != (AccessBridgeATInstance *) 0) {190PrintDebugString("[INFO]: telling %p we're going away", current->winAccessBridgeWindow);191SendMessage(current->winAccessBridgeWindow,192AB_DLL_GOING_AWAY, (WPARAM) dialogWindow, (LPARAM) 0);193current = current->nextATInstance;194}195196PrintDebugString("[INFO]: finished telling ATs about our demise");197198if(JavaBridgeThreadId)199{200PostThreadMessage(JavaBridgeThreadId,WM_USER+1,0,0);201Sleep(100);202}203204delete ATs;205206PrintDebugString("[INFO]: finished deleting ATs");207PrintDebugString("[INFO]: GOODBYE CRUEL WORLD...");208finalizeFileLogger();209}210211212void213JavaAccessBridge::javaRun(JNIEnv *env, jobject obj) {214MSG msg;215216PrintDebugString("[INFO]: JavaAccessBridge::javaRun(%p, %p) called", env, obj);217218if (env->GetJavaVM(&javaVM) != 0) {219return; // huh!?!?!220}221PrintDebugString("[INFO]: -> javaVM = %p", javaVM);222223if (javaVM->AttachCurrentThread((void **) &windowsThreadJNIEnv, NULL) != 0) {224return; // huh!?!?!225}226PrintDebugString("[INFO]: -> windowsThreadJNIEnv = %p", windowsThreadJNIEnv);227228javaThreadABObject = env->NewGlobalRef(obj);229windowsThreadABObject = windowsThreadJNIEnv->NewGlobalRef(obj);230231// initialize the Java thread AccessBridge entry points232javaThreadEntryPoints = new AccessBridgeJavaEntryPoints(env, javaThreadABObject);233if (javaThreadEntryPoints->BuildJavaEntryPoints() == FALSE) {234return; // couldn't build our entry points; let's get out of here!235}236PrintDebugString("[INFO]: all Java thread entry points successfully found.");237238// initialize the Windows thread AccessBridge entry points239windowsThreadEntryPoints = new AccessBridgeJavaEntryPoints(windowsThreadJNIEnv,240windowsThreadABObject);241if (windowsThreadEntryPoints->BuildJavaEntryPoints() == FALSE) {242return; // couldn't build our entry points; let's get out of here!243}244PrintDebugString("[INFO]: all Windows thread entry points successfully found.");245246247// open our window248if (initWindow() == TRUE) {249PrintDebugString("[INFO]: Window created. HWND = %p", dialogWindow);250251// post a broadcast msg.; let other AccessBridge DLLs know we exist252postHelloToWindowsDLLMsg(HWND_BROADCAST);253254// do that message loop thing255while (GetMessage(&msg, NULL, 0, 0)) {256TranslateMessage(&msg);257DispatchMessage(&msg);258}259} else {260PrintDebugString("[ERROR]: FAILED TO CREATE WINDOW!!!");261}262263javaVM->DetachCurrentThread();264}265266/**267* Bring up our window; make a connection to the rest of the world268*269*/270BOOL271JavaAccessBridge::initWindow() {272theDialogWindow = CreateDialog(windowsInstance,273"ACCESSBRIDGESTATUSWINDOW", NULL,274(DLGPROC) AccessBridgeDialogProc);275276// If window could not be created, return "failure".277if (!theDialogWindow)278return FALSE;279280dialogWindow = theDialogWindow;281282// Make the window visible, update its client area, & return "success".283// DEBUG_CODE(ShowWindow (theDialogWindow, SW_SHOWNORMAL));284// DEBUG_CODE(UpdateWindow (theDialogWindow));285286return TRUE;287}288289290291// -----------------------292293294/**295* postHelloToWindowsDLLMsg296* - PostMessage(theFromJavaHelloMsgID) to let one or297* all WindowDLLs we're here and have a vmID298*299* destHwnd is either a single hwnd or HWND_BROADCAST300* (former if a reply, latter if we're just born)301* wParam is our HWND302* lParam is our vmID303*304*/305void306JavaAccessBridge::postHelloToWindowsDLLMsg(HWND destHwnd) {307PrintDebugString("[INFO]: In JavaAccessBridge::postHelloToWindowsDLLMsg");308PrintDebugString("[INFO]: calling PostMessage(%p, %X, %p, %p)",309destHwnd, theFromJavaHelloMsgID, dialogWindow, dialogWindow);310PostMessage(destHwnd, theFromJavaHelloMsgID, (WPARAM) dialogWindow, (LPARAM) dialogWindow);311}312313314// -----------------------315316/**317* sendPackage - uses SendMessage(WM_COPYDATA) to do IPC messaging318* with the Java AccessBridge DLL319*320*/321void322JavaAccessBridge::sendPackage(char *buffer, int bufsize, HWND destHwnd) {323COPYDATASTRUCT toCopy;324toCopy.dwData = 0; // 32-bits we could use for something...325toCopy.cbData = bufsize;326toCopy.lpData = buffer;327328SendMessage(destHwnd, WM_COPYDATA, (WPARAM) dialogWindow, (LPARAM) &toCopy);329}330331332/**333* sendJavaEventPackage - walk through ATs, sending event messages to 'em334*335*/336void337JavaAccessBridge::sendJavaEventPackage(char *buffer, int bufsize, long type) {338339PrintDebugString("[INFO]: JavaAccessBridge::sendJavaEventPackage(), type = %X", type);340341if (ATs == (AccessBridgeATInstance *) 0) {342PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");343}344345AccessBridgeATInstance *ati = ATs;346while (ati != (AccessBridgeATInstance *) 0) {347ati->sendJavaEventPackage(buffer, bufsize, type);348ati = ati->nextATInstance;349}350}351352/**353* sendAccessibilityEventPackage - walk through ATs, sending event messages to 'em354*355*/356void357JavaAccessBridge::sendAccessibilityEventPackage(char *buffer, int bufsize, long type) {358359PrintDebugString("[INFO]: JavaAccessBridge::sendAccessibilityEventPackage(), type = %X", type);360361if (ATs == (AccessBridgeATInstance *) 0) {362PrintDebugString("[ERROR] ATs == 0! (shouldn't happen here!)");363}364365AccessBridgeATInstance *ati = ATs;366while (ati != (AccessBridgeATInstance *) 0) {367ati->sendAccessibilityEventPackage(buffer, bufsize, type);368ati = ati->nextATInstance;369}370}371372373374375/**376* receiveMemoryPackage - uses Memory-Mapped files to do IPC messaging377* with the Java AccessBridge DLL, receiving the378* message from Java AccessBridge DLL by reading the379* contents of the shared memory mapped file that380* is used for Java-initiated messages381*382*/383BOOL384JavaAccessBridge::receiveMemoryPackage(HWND srcWindow, long bufsize) {385char *IPCview;386387PrintDebugString("[INFO]: JavaAccessBridge::receiveMemoryPackage(%p, %d)", srcWindow, bufsize);388389// look-up the appropriate IPCview based on the srcHWND of the Windows AccessBridge DLL390if (ATs == (AccessBridgeATInstance *) 0) {391PrintDebugString("[ERROR]: - ATs == 0 (shouldn't happen in receiveMemoryPackage()!");392return FALSE;393}394AccessBridgeATInstance *ati = ATs->findABATInstanceFromATHWND(srcWindow);395if (ati != (AccessBridgeATInstance *) 0) {396IPCview = (char *) ati->memoryMappedView;397398// wait for the lock if someone else has it (re-entrancy)399EnterCriticalSection(&receiveMemoryIPCLock);400{401// set byte at end of buffer to indicate to caller that we have reached this point402IPCview[bufsize] = 1;403404// process the package405processPackage(IPCview, bufsize);406}407// release re-entrance lock408LeaveCriticalSection(&receiveMemoryIPCLock);409410return TRUE;411412} else {413//DEBUG_CODE(AppendToCallInfo("ERROR receiving memory package: couldn't find srcWindow"));414PrintDebugString("[ERROR]: receiving memory package: couldn't find srcWindow");415return FALSE;416}417}418419/**420* processPackage - processes the output of SendMessage(WM_COPYDATA)421* to do IPC messaging with the Windows AccessBridge DLL422*423*/424LRESULT425JavaAccessBridge::processPackage(char *buffer, int bufsize) {426PrintDebugString("[INFO]: Processing package sent from Windows, bufsize = %d:", bufsize);427428PackageType *type = (PackageType *) buffer;429LRESULT returnVal = 0;430PrintDebugString("[INFO]: PackageType = %X:", *type);431jobject rAC;432433switch (*type) {434435436case cMemoryMappedFileCreatedPackage:437// Windows is telling us it created a memory mapped file for us to use438// in repsonding to various information querying packages (see below)439PrintDebugString("[INFO]: type == cMemoryMappedFileCreatedPackage");440if (bufsize == (sizeof(PackageType) + sizeof(MemoryMappedFileCreatedPackage))) {441MemoryMappedFileCreatedPackage *pkg =442(MemoryMappedFileCreatedPackage *) (buffer + sizeof(PackageType));443returnVal = MemoryMappedFileCreated((HWND)ABLongToHandle(pkg->bridgeWindow), pkg->filename);444} else {445PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",446bufsize, sizeof(PackageType) + sizeof(MemoryMappedFileCreatedPackage));447}448break;449450// ------------ information querying packages ------------------451452case cReleaseJavaObjectPackage:453PrintDebugString("[INFO]: type == cReleaseJavaObjectPackage");454if (bufsize == (sizeof(PackageType) + sizeof(ReleaseJavaObjectPackage))) {455ReleaseJavaObjectPackage *pkg =456(ReleaseJavaObjectPackage *) (buffer + sizeof(PackageType));457releaseJavaObject((jobject)pkg->object);458} else {459PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",460bufsize, sizeof(PackageType) + sizeof(ReleaseJavaObjectPackage));461}462break;463464case cGetAccessBridgeVersionPackage:465PrintDebugString("[INFO]: type == cGetAccessBridgeVersionPackage");466if (bufsize == (sizeof(PackageType) + sizeof(GetAccessBridgeVersionPackage))) {467GetAccessBridgeVersionPackage *pkg =468(GetAccessBridgeVersionPackage *) (buffer + sizeof(PackageType));469windowsThreadEntryPoints->getVersionInfo(&(pkg->rVersionInfo));470} else {471PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",472bufsize, sizeof(PackageType) + sizeof(GetAccessBridgeVersionPackage));473}474break;475476case cIsJavaWindowPackage:477PrintDebugString("[INFO]: type == cIsJavaWindowPackage");478if (bufsize == (sizeof(PackageType) + sizeof(IsJavaWindowPackage))) {479IsJavaWindowPackage *pkg =480(IsJavaWindowPackage *) (buffer + sizeof(PackageType));481pkg->rResult =482windowsThreadEntryPoints->isJavaWindow(pkg->window);483PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);484} else {485PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",486bufsize, sizeof(PackageType) + sizeof(IsJavaWindowPackage));487}488break;489490case cIsSameObjectPackage:491PrintDebugString("[INFO]: type == cIsSameObjectPackage");492if (bufsize == (sizeof(PackageType) + sizeof(IsSameObjectPackage))) {493IsSameObjectPackage *pkg =494(IsSameObjectPackage *) (buffer + sizeof(PackageType));495pkg->rResult =496windowsThreadEntryPoints->isSameObject((jobject)pkg->obj1, (jobject)pkg->obj2);497PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);498} else {499PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",500bufsize, sizeof(PackageType) + sizeof(IsSameObjectPackage));501}502break;503504505case cGetAccessibleContextFromHWNDPackage:506PrintDebugString("[INFO]: type == cGetAccessibleContextFromHWNDPackage");507if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextFromHWNDPackage))) {508GetAccessibleContextFromHWNDPackage *pkg =509(GetAccessibleContextFromHWNDPackage *) (buffer + sizeof(PackageType));510rAC = windowsThreadEntryPoints->getAccessibleContextFromHWND(pkg->window);511pkg->rAccessibleContext = (JOBJECT64)rAC;512pkg->rVMID = HandleToLong(dialogWindow);513PrintDebugString("[INFO]: -> returning AC = %p, vmID = %X", rAC, pkg->rVMID);514} else {515PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",516bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextFromHWNDPackage));517}518break;519520521case cGetHWNDFromAccessibleContextPackage:522PrintDebugString("[INFO]: type == cGetHWNDFromAccessibleContextPackage");523if (bufsize == (sizeof(PackageType) + sizeof(GetHWNDFromAccessibleContextPackage))) {524GetHWNDFromAccessibleContextPackage *pkg =525(GetHWNDFromAccessibleContextPackage *) (buffer + sizeof(PackageType));526pkg->rHWND =527ABHandleToLong( windowsThreadEntryPoints->getHWNDFromAccessibleContext((jobject)pkg->accessibleContext) );528PrintDebugString("[INFO]: -> returning HWND = %p", pkg->rHWND);529} else {530PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",531bufsize, sizeof(PackageType) + sizeof(GetHWNDFromAccessibleContextPackage));532}533break;534535536/* ===== utility methods ===== */537538case cSetTextContentsPackage:539PrintDebugString("[INFO]: type == cSetTextContentsPackage");540if (bufsize == (sizeof(PackageType) + sizeof(SetTextContentsPackage))) {541SetTextContentsPackage *pkg =542(SetTextContentsPackage *) (buffer + sizeof(PackageType));543pkg->rResult =544windowsThreadEntryPoints->setTextContents((jobject)pkg->accessibleContext, pkg->text);545PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);546} else {547PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",548bufsize, sizeof(PackageType) + sizeof(SetTextContentsPackage));549}550break;551552case cGetParentWithRolePackage:553if (bufsize == (sizeof(PackageType) + sizeof(GetParentWithRolePackage))) {554GetParentWithRolePackage *pkg =555(GetParentWithRolePackage *) (buffer + sizeof(PackageType));556rAC = windowsThreadEntryPoints->getParentWithRole((jobject)pkg->accessibleContext, pkg->role);557pkg->rAccessibleContext = (JOBJECT64)rAC;558PrintDebugString("[INFO]: type == cGetParentWithRolePackage\n"\559" pkg->vmID: %X"\560" pkg->accessibleContext: %p"\561" pkg->role: %ls"\562" -> returning rAccessibleContext = %p"\563, pkg->vmID, (jobject)pkg->accessibleContext, pkg->role, rAC);564} else {565PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",566bufsize, sizeof(PackageType) + sizeof(GetParentWithRolePackage));567}568break;569570case cGetTopLevelObjectPackage:571PrintDebugString("[INFO]: type == cGetTopLevelObjectPackage");572if (bufsize == (sizeof(PackageType) + sizeof(GetTopLevelObjectPackage))) {573GetTopLevelObjectPackage *pkg =574(GetTopLevelObjectPackage *) (buffer + sizeof(PackageType));575rAC = windowsThreadEntryPoints->getTopLevelObject((jobject)pkg->accessibleContext);576pkg->rAccessibleContext = (JOBJECT64)rAC;577PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);578} else {579PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",580bufsize, sizeof(PackageType) + sizeof(GetTopLevelObjectPackage));581}582break;583584case cGetParentWithRoleElseRootPackage:585PrintDebugString("[INFO]: type == cGetParentWithRoleElseRootPackage");586if (bufsize == (sizeof(PackageType) + sizeof(GetParentWithRoleElseRootPackage))) {587GetParentWithRoleElseRootPackage *pkg =588(GetParentWithRoleElseRootPackage *) (buffer + sizeof(PackageType));589rAC = windowsThreadEntryPoints->getParentWithRoleElseRoot((jobject)pkg->accessibleContext, pkg->role);590pkg->rAccessibleContext = (JOBJECT64)rAC;591PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);592} else {593PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",594bufsize, sizeof(PackageType) + sizeof(GetParentWithRoleElseRootPackage));595}596break;597598case cGetObjectDepthPackage:599PrintDebugString("[INFO]: type == cGetObjectDepthPackage");600if (bufsize == (sizeof(PackageType) + sizeof(GetObjectDepthPackage))) {601GetObjectDepthPackage *pkg =602(GetObjectDepthPackage *) (buffer + sizeof(PackageType));603pkg->rResult =604windowsThreadEntryPoints->getObjectDepth((jobject)pkg->accessibleContext);605PrintDebugString("[INFO]: -> returning rResult = %d", pkg->rResult);606} else {607PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",608bufsize, sizeof(PackageType) + sizeof(GetObjectDepthPackage));609}610break;611612case cGetActiveDescendentPackage:613PrintDebugString("[INFO]: type == cGetActiveDescendentPackage");614if (bufsize == (sizeof(PackageType) + sizeof(GetActiveDescendentPackage))) {615GetActiveDescendentPackage *pkg =616(GetActiveDescendentPackage *) (buffer + sizeof(PackageType));617rAC = windowsThreadEntryPoints->getActiveDescendent((jobject)pkg->accessibleContext);618pkg->rAccessibleContext = (JOBJECT64)rAC;619PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);620} else {621PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",622bufsize, sizeof(PackageType) + sizeof(GetActiveDescendentPackage));623}624break;625626case cGetAccessibleContextAtPackage:627PrintDebugString("[INFO]: type == cGetAccessibleContextAtPackage");628if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextAtPackage))) {629GetAccessibleContextAtPackage *pkg =630(GetAccessibleContextAtPackage *) (buffer + sizeof(PackageType));631pkg->rAccessibleContext = (JOBJECT64)632windowsThreadEntryPoints->getAccessibleContextAt(pkg->x, pkg->y,633(jobject)pkg->AccessibleContext);634} else {635PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",636bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextAtPackage));637}638break;639640case cGetAccessibleContextWithFocusPackage:641PrintDebugString("[INFO]: type == cGetAccessibleContextWithFocusPackage");642if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextWithFocusPackage))) {643GetAccessibleContextWithFocusPackage *pkg =644(GetAccessibleContextWithFocusPackage *) (buffer + sizeof(PackageType));645pkg->rAccessibleContext = (JOBJECT64)646windowsThreadEntryPoints->getAccessibleContextWithFocus();647pkg->rVMID = HandleToLong(dialogWindow);648} else {649PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",650bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextWithFocusPackage));651}652break;653654case cGetAccessibleContextInfoPackage:655PrintDebugString("[INFO]: type == cGetAccessibleContextInfoPackage");656if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextInfoPackage))) {657GetAccessibleContextInfoPackage *pkg =658(GetAccessibleContextInfoPackage *) (buffer + sizeof(PackageType));659windowsThreadEntryPoints->getAccessibleContextInfo(660(jobject)pkg->AccessibleContext, &(pkg->rAccessibleContextInfo));661} else {662PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",663bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextInfoPackage));664}665break;666667case cGetAccessibleChildFromContextPackage:668PrintDebugString("[INFO]: type == cGetAccessibleChildFromContextPackage");669if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleChildFromContextPackage))) {670GetAccessibleChildFromContextPackage *pkg =671(GetAccessibleChildFromContextPackage *) (buffer + sizeof(PackageType));672pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleChildFromContext(673(jobject)pkg->AccessibleContext, pkg->childIndex);674} else {675PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",676bufsize, sizeof(PackageType) + sizeof(GetAccessibleChildFromContextPackage));677}678break;679680case cGetAccessibleParentFromContextPackage:681PrintDebugString("[INFO]: type == cGetAccessibleParentFromContextPackage");682if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleParentFromContextPackage))) {683GetAccessibleParentFromContextPackage *pkg =684(GetAccessibleParentFromContextPackage *) (buffer + sizeof(PackageType));685pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleParentFromContext(686(jobject)pkg->AccessibleContext);687} else {688PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",689bufsize, sizeof(PackageType) + sizeof(GetAccessibleParentFromContextPackage));690}691break;692693// ------------ begin AccessibleTable packages ------------------694695case cGetAccessibleTableInfoPackage:696PrintDebugString("[INFO]: ##### type == cGetAccessibleTableInfoPackage");697if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableInfoPackage))) {698GetAccessibleTableInfoPackage *pkg =699(GetAccessibleTableInfoPackage *) (buffer + sizeof(PackageType));700windowsThreadEntryPoints->getAccessibleTableInfo((jobject)pkg->accessibleContext,701&(pkg->rTableInfo));702PrintDebugString("[INFO]: ##### processing succeeded");703} else {704PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",705bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableInfoPackage));706}707break;708709case cGetAccessibleTableCellInfoPackage:710PrintDebugString("[INFO]: ##### type == cGetAccessibleTableCellInfoPackage");711if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableCellInfoPackage))) {712GetAccessibleTableCellInfoPackage *pkg =713(GetAccessibleTableCellInfoPackage *) (buffer + sizeof(PackageType));714windowsThreadEntryPoints->getAccessibleTableCellInfo((jobject)pkg->accessibleTable, pkg->row,715pkg->column, &(pkg->rTableCellInfo));716PrintDebugString("[INFO]: ##### processing succeeded");717} else {718PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",719bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableCellInfoPackage));720}721break;722723case cGetAccessibleTableRowHeaderPackage:724PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowHeaderPackage");725if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowHeaderPackage))) {726GetAccessibleTableRowHeaderPackage *pkg =727(GetAccessibleTableRowHeaderPackage *) (buffer + sizeof(PackageType));728windowsThreadEntryPoints->getAccessibleTableRowHeader((jobject)pkg->accessibleContext,729&(pkg->rTableInfo));730PrintDebugString("[INFO]: ##### processing succeeded");731} else {732PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",733bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowHeaderPackage));734}735break;736737case cGetAccessibleTableColumnHeaderPackage:738PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnHeaderPackage");739if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnHeaderPackage))) {740GetAccessibleTableColumnHeaderPackage *pkg =741(GetAccessibleTableColumnHeaderPackage *) (buffer + sizeof(PackageType));742windowsThreadEntryPoints->getAccessibleTableColumnHeader((jobject)pkg->accessibleContext,743&(pkg->rTableInfo));744PrintDebugString("[INFO]: ##### processing succeeded");745} else {746PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",747bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnHeaderPackage));748}749break;750751752case cGetAccessibleTableRowDescriptionPackage:753PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowDescriptionPackage");754if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowDescriptionPackage))) {755GetAccessibleTableRowDescriptionPackage *pkg =756(GetAccessibleTableRowDescriptionPackage *) (buffer + sizeof(PackageType));757pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleTableRowDescription(758(jobject)pkg->accessibleContext, pkg->row);759PrintDebugString("[INFO]: ##### processing succeeded");760} else {761PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",762bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowDescriptionPackage));763}764break;765766case cGetAccessibleTableColumnDescriptionPackage:767PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnDescriptionPackage");768if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnDescriptionPackage))) {769GetAccessibleTableColumnDescriptionPackage *pkg =770(GetAccessibleTableColumnDescriptionPackage *) (buffer + sizeof(PackageType));771pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleTableColumnDescription(772(jobject)pkg->accessibleContext, pkg->column);773PrintDebugString("[INFO]: ##### processing succeeded");774} else {775PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",776bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnDescriptionPackage));777}778break;779780case cGetAccessibleTableColumnSelectionCountPackage:781PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnSelectionCountPackage");782if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionCountPackage))) {783GetAccessibleTableColumnSelectionCountPackage *pkg =784(GetAccessibleTableColumnSelectionCountPackage *) (buffer + sizeof(PackageType));785pkg->rCount = windowsThreadEntryPoints->getAccessibleTableColumnSelectionCount(786(jobject)pkg->accessibleTable);787PrintDebugString("[INFO]: ##### processing succeeded");788} else {789PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",790bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionCountPackage));791}792break;793794case cGetAccessibleTableRowSelectionCountPackage:795PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowSelectionCountPackage");796if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionCountPackage))) {797GetAccessibleTableRowSelectionCountPackage *pkg =798(GetAccessibleTableRowSelectionCountPackage *) (buffer + sizeof(PackageType));799800pkg->rCount = windowsThreadEntryPoints->getAccessibleTableRowSelectionCount(801(jobject)pkg->accessibleTable);802803PrintDebugString("[INFO]: ##### processing succeeded");804} else {805PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",806bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionCountPackage));807}808break;809810case cIsAccessibleTableRowSelectedPackage:811PrintDebugString("[INFO]: ##### type == cIsAccessibleTableRowSelectedPackage");812if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleTableRowSelectedPackage))) {813IsAccessibleTableRowSelectedPackage *pkg =814(IsAccessibleTableRowSelectedPackage *) (buffer + sizeof(PackageType));815pkg->rResult = windowsThreadEntryPoints->isAccessibleTableRowSelected(816(jobject)pkg->accessibleTable, pkg->row);817PrintDebugString("[INFO]: ##### processing succeeded");818} else {819PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",820bufsize, sizeof(PackageType) + sizeof(IsAccessibleTableRowSelectedPackage));821}822break;823824case cIsAccessibleTableColumnSelectedPackage:825PrintDebugString("[INFO]: ##### type == cIsAccessibleTableColumnSelectedPackage");826if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleTableColumnSelectedPackage))) {827IsAccessibleTableColumnSelectedPackage *pkg =828(IsAccessibleTableColumnSelectedPackage *) (buffer + sizeof(PackageType));829pkg->rResult = windowsThreadEntryPoints->isAccessibleTableColumnSelected(830(jobject)pkg->accessibleTable, pkg->column);831PrintDebugString("[INFO]: ##### processing succeeded");832} else {833PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",834bufsize, sizeof(PackageType) + sizeof(IsAccessibleTableColumnSelectedPackage));835}836break;837838case cGetAccessibleTableColumnSelectionsPackage:839PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnSelectionsPackage");840if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionsPackage))) {841GetAccessibleTableColumnSelectionsPackage *pkg =842(GetAccessibleTableColumnSelectionsPackage *) (buffer + sizeof(PackageType));843PrintDebugString("[INFO]: ##### cGetAccessibleTableColumnSelectionsPackage count=%d", pkg->count);844windowsThreadEntryPoints->getAccessibleTableColumnSelections(845(jobject)pkg->accessibleTable, pkg->count, pkg->rSelections);846847for (int i = 0; i < pkg->count; i++) {848PrintDebugString("[INFO]: ##### cGetAccessibleTableColumnSelectionsPackage(%d)=%d", i, pkg->rSelections[i]);849}850851PrintDebugString("[INFO]: ##### processing succeeded");852} else {853PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",854bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionsPackage));855}856break;857858859case cGetAccessibleTableRowSelectionsPackage:860PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowSelectionsPackage");861if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionsPackage))) {862GetAccessibleTableRowSelectionsPackage *pkg =863(GetAccessibleTableRowSelectionsPackage *) (buffer + sizeof(PackageType));864windowsThreadEntryPoints->getAccessibleTableRowSelections(865(jobject)pkg->accessibleTable, pkg->count, pkg->rSelections);866PrintDebugString("[INFO]: ##### processing succeeded");867} else {868PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",869bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionsPackage));870}871break;872873case cGetAccessibleTableRowPackage:874PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowPackage");875if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowPackage))) {876GetAccessibleTableRowPackage *pkg =877(GetAccessibleTableRowPackage *) (buffer + sizeof(PackageType));878pkg->rRow = windowsThreadEntryPoints->getAccessibleTableRow(879(jobject)pkg->accessibleTable, pkg->index);880PrintDebugString("[INFO]: ##### processing succeeded");881} else {882PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",883bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowPackage));884}885break;886887case cGetAccessibleTableColumnPackage:888PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnPackage");889if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnPackage))) {890GetAccessibleTableColumnPackage *pkg =891(GetAccessibleTableColumnPackage *) (buffer + sizeof(PackageType));892pkg->rColumn = windowsThreadEntryPoints->getAccessibleTableColumn(893(jobject)pkg->accessibleTable, pkg->index);894PrintDebugString("[INFO]: ##### processing succeeded");895} else {896PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",897bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnPackage));898}899break;900901case cGetAccessibleTableIndexPackage:902PrintDebugString("[INFO]: ##### type == cGetAccessibleTableIndexPackage");903if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableIndexPackage))) {904GetAccessibleTableIndexPackage *pkg =905(GetAccessibleTableIndexPackage *) (buffer + sizeof(PackageType));906pkg->rIndex = windowsThreadEntryPoints->getAccessibleTableIndex(907(jobject)pkg->accessibleTable, pkg->row, pkg->column);908PrintDebugString("[INFO]: ##### processing succeeded");909} else {910PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",911bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableIndexPackage));912}913break;914915// ------------ end AccessibleTable packages ------------------916917918// ------------ begin AccessibleRelationSet packages ------------------919920case cGetAccessibleRelationSetPackage:921PrintDebugString("[INFO]: ##### type == cGetAccessibleRelationSetPackage");922if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleRelationSetPackage))) {923GetAccessibleRelationSetPackage *pkg =924(GetAccessibleRelationSetPackage *) (buffer + sizeof(PackageType));925windowsThreadEntryPoints->getAccessibleRelationSet(926(jobject)pkg->accessibleContext, &(pkg->rAccessibleRelationSetInfo));927PrintDebugString("[INFO]: ##### processing succeeded");928} else {929PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",930bufsize, sizeof(PackageType) + sizeof(GetAccessibleRelationSetPackage));931}932break;933934// ------------ end AccessibleRelationSet packages ------------------935936// ------------ begin AccessibleHypertext packages ------------------937938case cGetAccessibleHypertextPackage:939PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextPackage");940if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextPackage))) {941GetAccessibleHypertextPackage *pkg =942(GetAccessibleHypertextPackage *) (buffer + sizeof(PackageType));943windowsThreadEntryPoints->getAccessibleHypertext(944(jobject)pkg->accessibleContext, &(pkg->rAccessibleHypertextInfo));945PrintDebugString("[INFO]: ##### processing succeeded");946} else {947PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",948bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextPackage));949}950break;951952case cActivateAccessibleHyperlinkPackage:953PrintDebugString("[INFO]: ##### type == cActivateAccessibleHyperlinkPackage");954if (bufsize == (sizeof(PackageType) + sizeof(ActivateAccessibleHyperlinkPackage))) {955ActivateAccessibleHyperlinkPackage *pkg =956(ActivateAccessibleHyperlinkPackage *) (buffer + sizeof(PackageType));957pkg->rResult = windowsThreadEntryPoints->activateAccessibleHyperlink(958(jobject)pkg->accessibleContext, (jobject)pkg->accessibleHyperlink);959PrintDebugString("[INFO]: ##### processing succeeded");960} else {961PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",962bufsize, sizeof(PackageType) + sizeof(ActivateAccessibleHyperlinkPackage));963}964break;965966case cGetAccessibleHyperlinkCountPackage:967PrintDebugString("[INFO]: ##### type == cGetAccessibleHyperlinkCountPackage");968if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHyperlinkCountPackage))) {969GetAccessibleHyperlinkCountPackage *pkg =970(GetAccessibleHyperlinkCountPackage *) (buffer + sizeof(PackageType));971pkg->rLinkCount = windowsThreadEntryPoints->getAccessibleHyperlinkCount(972(jobject)pkg->accessibleContext);973PrintDebugString("[INFO]: ##### processing succeeded: pkg->rLinkCount = %d", pkg->rLinkCount);974} else {975PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",976bufsize, sizeof(PackageType) + sizeof(GetAccessibleHyperlinkCountPackage));977}978break;979980case cGetAccessibleHypertextExtPackage:981PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextExtPackage");982if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextExtPackage))) {983GetAccessibleHypertextExtPackage *pkg =984(GetAccessibleHypertextExtPackage *) (buffer + sizeof(PackageType));985pkg->rSuccess = windowsThreadEntryPoints->getAccessibleHypertextExt(986(jobject)pkg->accessibleContext, pkg->startIndex, &(pkg->rAccessibleHypertextInfo));987PrintDebugString("[INFO]: ##### processing succeeded");988} else {989PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",990bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextExtPackage));991}992break;993994case cGetAccessibleHypertextLinkIndexPackage:995PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextLinkIndexPackage");996if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextLinkIndexPackage))) {997GetAccessibleHypertextLinkIndexPackage *pkg =998(GetAccessibleHypertextLinkIndexPackage *) (buffer + sizeof(PackageType));999pkg->rLinkIndex = windowsThreadEntryPoints->getAccessibleHypertextLinkIndex(1000(jobject)pkg->hypertext, pkg->charIndex);1001PrintDebugString("[INFO]: ##### processing succeeded");1002} else {1003PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1004bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextLinkIndexPackage));1005}1006break;10071008case cGetAccessibleHyperlinkPackage:1009PrintDebugString("[INFO]: ##### type == cGetAccessibleHyperlinkPackage");1010if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHyperlinkPackage))) {1011GetAccessibleHyperlinkPackage *pkg =1012(GetAccessibleHyperlinkPackage *) (buffer + sizeof(PackageType));1013windowsThreadEntryPoints->getAccessibleHyperlink((jobject)pkg->hypertext, pkg->linkIndex,1014&(pkg->rAccessibleHyperlinkInfo));1015PrintDebugString("[INFO]: ##### processing succeeded");1016} else {1017PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1018bufsize, sizeof(PackageType) + sizeof(GetAccessibleHyperlinkPackage));1019}1020break;10211022// ------------ end AccessibleHypertext packages10231024// ------------ begin Accessible KeyBindings, Icons and Actions10251026case cGetAccessibleKeyBindingsPackage:1027PrintDebugString("[INFO]: ##### type == cGetAccessibleKeyBindingsPackage");1028if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleKeyBindingsPackage))) {1029GetAccessibleKeyBindingsPackage *pkg =1030(GetAccessibleKeyBindingsPackage *) (buffer + sizeof(PackageType));1031windowsThreadEntryPoints->getAccessibleKeyBindings (1032(jobject)pkg->accessibleContext, &(pkg->rAccessibleKeyBindings));1033PrintDebugString("[INFO]: ##### processing succeeded");1034} else {1035PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1036bufsize, sizeof(PackageType) + sizeof(GetAccessibleKeyBindingsPackage));1037}1038break;10391040case cGetAccessibleIconsPackage:1041PrintDebugString("[INFO]: ##### type == cGetAccessibleIconsPackage");1042if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleIconsPackage))) {1043GetAccessibleIconsPackage *pkg =1044(GetAccessibleIconsPackage *) (buffer + sizeof(PackageType));1045windowsThreadEntryPoints->getAccessibleIcons (1046(jobject)pkg->accessibleContext, &(pkg->rAccessibleIcons));1047PrintDebugString("[INFO]: ##### processing succeeded");1048} else {1049PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1050bufsize, sizeof(PackageType) + sizeof(GetAccessibleIconsPackage));1051}1052break;105310541055case cGetAccessibleActionsPackage:1056PrintDebugString("[INFO]: ##### type == cGetAccessibleActionsPackage");1057if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleActionsPackage))) {1058GetAccessibleActionsPackage *pkg =1059(GetAccessibleActionsPackage *) (buffer + sizeof(PackageType));1060windowsThreadEntryPoints->getAccessibleActions (1061(jobject)pkg->accessibleContext, &(pkg->rAccessibleActions));1062PrintDebugString("[INFO]: ##### processing succeeded");1063} else {1064PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1065bufsize, sizeof(PackageType) + sizeof(GetAccessibleActionsPackage));1066}1067break;10681069case cDoAccessibleActionsPackage:1070PrintDebugString("[INFO]: ##### type == cDoAccessibleActionsPackage");1071if (bufsize == (sizeof(PackageType) + sizeof(DoAccessibleActionsPackage))) {1072DoAccessibleActionsPackage *pkg =1073(DoAccessibleActionsPackage *) (buffer + sizeof(PackageType));1074pkg->rResult =1075windowsThreadEntryPoints->doAccessibleActions((jobject)pkg->accessibleContext, &(pkg->actionsToDo),1076&(pkg->failure));1077PrintDebugString("[INFO]: ##### processing succeeded");1078} else {1079PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1080bufsize, sizeof(PackageType) + sizeof(DoAccessibleActionsPackage));1081}1082break;10831084// ------------ begin addtional methods for Teton10851086case cGetVirtualAccessibleNamePackage:1087PrintDebugString("[INFO]: ##### type == GetVirtualAccessibleNamePackage");1088if (bufsize == (sizeof(PackageType) + sizeof(GetVirtualAccessibleNamePackage))) {1089GetVirtualAccessibleNamePackage *pkg =1090(GetVirtualAccessibleNamePackage *) (buffer + sizeof(PackageType));1091windowsThreadEntryPoints->getVirtualAccessibleName ((const jobject)pkg->accessibleContext,1092pkg->rName,1093pkg->len);1094PrintDebugString("[INFO]: ##### processing succeeded");1095} else {1096PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1097bufsize, sizeof(PackageType) + sizeof(GetVirtualAccessibleNamePackage));1098}1099break;11001101case cRequestFocusPackage:1102PrintDebugString("[INFO]: ##### type == RequestFocusPackage");1103if (bufsize == (sizeof(PackageType) + sizeof(RequestFocusPackage))) {1104RequestFocusPackage *pkg =1105(RequestFocusPackage *) (buffer + sizeof(PackageType));1106windowsThreadEntryPoints->requestFocus (1107(jobject)pkg->accessibleContext);1108PrintDebugString("[INFO]: ##### processing succeeded");1109} else {1110PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1111bufsize, sizeof(PackageType) + sizeof(RequestFocusPackage));1112}1113break;11141115case cSelectTextRangePackage:1116PrintDebugString("[INFO]: ##### type == SelectTextRangePackage");1117if (bufsize == (sizeof(PackageType) + sizeof(SelectTextRangePackage))) {1118SelectTextRangePackage *pkg =1119(SelectTextRangePackage *) (buffer + sizeof(PackageType));1120windowsThreadEntryPoints->selectTextRange (1121(jobject)pkg->accessibleContext, pkg->startIndex, pkg->endIndex);1122PrintDebugString("[INFO]: ##### processing succeeded");1123} else {1124PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1125bufsize, sizeof(PackageType) + sizeof(SelectTextRangePackage));1126}1127break;11281129case cGetTextAttributesInRangePackage:1130PrintDebugString("[INFO]: ##### type == GetTextAttributesInRangePackage");1131if (bufsize == (sizeof(PackageType) + sizeof(GetTextAttributesInRangePackage))) {1132GetTextAttributesInRangePackage *pkg =1133(GetTextAttributesInRangePackage *) (buffer + sizeof(PackageType));1134windowsThreadEntryPoints->getTextAttributesInRange (1135(jobject)pkg->accessibleContext, pkg->startIndex, pkg->endIndex,1136(AccessibleTextAttributesInfo *)&(pkg->attributes),1137&(pkg->rLength));1138PrintDebugString("[INFO]: ##### processing succeeded");1139} else {1140PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1141bufsize, sizeof(PackageType) + sizeof(GetTextAttributesInRangePackage));1142}1143break;114411451146case cGetVisibleChildrenCountPackage:1147PrintDebugString("[INFO]: ##### type == GetVisibleChildrenCountPackage");1148if (bufsize == (sizeof(PackageType) + sizeof(GetVisibleChildrenCountPackage))) {1149GetVisibleChildrenCountPackage *pkg =1150(GetVisibleChildrenCountPackage *) (buffer + sizeof(PackageType));1151pkg->rChildrenCount = windowsThreadEntryPoints->getVisibleChildrenCount ((jobject)pkg->accessibleContext);11521153PrintDebugString("[INFO]: ##### processing succeeded");1154} else {1155PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1156bufsize, sizeof(PackageType) + sizeof(GetVisibleChildrenCountPackage));1157}1158break;11591160case cGetVisibleChildrenPackage:1161PrintDebugString("[INFO]: ##### type == GetVisibleChildrenPackage");1162if (bufsize == (sizeof(PackageType) + sizeof(GetVisibleChildrenPackage))) {1163GetVisibleChildrenPackage *pkg =1164(GetVisibleChildrenPackage *) (buffer + sizeof(PackageType));1165pkg->rSuccess = windowsThreadEntryPoints->getVisibleChildren ((jobject)pkg->accessibleContext,1166pkg->startIndex,1167&(pkg->rVisibleChildrenInfo));11681169PrintDebugString("[INFO]: ##### processing succeeded");1170} else {1171PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1172bufsize, sizeof(PackageType) + sizeof(GetVisibleChildrenPackage));1173}1174break;11751176case cSetCaretPositionPackage:1177PrintDebugString("[INFO]: ##### type == SetCaretPositionPackage");1178if (bufsize == (sizeof(PackageType) + sizeof(SetCaretPositionPackage))) {1179SetCaretPositionPackage *pkg =1180(SetCaretPositionPackage *) (buffer + sizeof(PackageType));1181windowsThreadEntryPoints->setCaretPosition (1182(jobject)pkg->accessibleContext, pkg->position);1183PrintDebugString("[INFO]: ##### processing succeeded");1184} else {1185PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",1186bufsize, sizeof(PackageType) + sizeof(SetCaretPositionPackage));1187}1188break;11891190// ------------ end additional methods for Teton11911192// ------------ end Accessible KeyBindings, Icons and Actions11931194// ------------ Accessible Text packages ------------------11951196case cGetAccessibleTextInfoPackage:1197PrintDebugString("[INFO]: type == cGetAccessibleTextInfoPackage");1198if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage))) {1199GetAccessibleTextInfoPackage *pkg =1200(GetAccessibleTextInfoPackage *) (buffer + sizeof(PackageType));1201windowsThreadEntryPoints->getAccessibleTextInfo((jobject)pkg->AccessibleContext,1202&(pkg->rTextInfo), pkg->x, pkg->y);1203} else {1204PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1205bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage));1206}1207break;12081209case cGetAccessibleTextItemsPackage:1210PrintDebugString("[INFO]: type == cGetAccessibleTextItemsPackage");1211if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextItemsPackage))) {1212GetAccessibleTextItemsPackage *pkg =1213(GetAccessibleTextItemsPackage *) (buffer + sizeof(PackageType));1214windowsThreadEntryPoints->getAccessibleTextItems((jobject)pkg->AccessibleContext,1215&(pkg->rTextItemsInfo), pkg->index);1216} else {1217PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1218bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage));1219}1220break;12211222case cGetAccessibleTextSelectionInfoPackage:1223PrintDebugString("[INFO]: type == cGetAccessibleTextSelectionInfoPackage");1224if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextSelectionInfoPackage))) {1225GetAccessibleTextSelectionInfoPackage *pkg =1226(GetAccessibleTextSelectionInfoPackage *) (buffer + sizeof(PackageType));1227windowsThreadEntryPoints->getAccessibleTextSelectionInfo(1228(jobject)pkg->AccessibleContext, &(pkg->rTextSelectionItemsInfo));1229} else {1230PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1231bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextSelectionInfoPackage));1232}1233break;12341235case cGetAccessibleTextAttributeInfoPackage:1236PrintDebugString("[INFO]: type == cGetAccessibleTextAttributeInfoPackage");1237if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextAttributeInfoPackage))) {1238GetAccessibleTextAttributeInfoPackage *pkg =1239(GetAccessibleTextAttributeInfoPackage *) (buffer + sizeof(PackageType));1240windowsThreadEntryPoints->getAccessibleTextAttributes(1241(jobject)pkg->AccessibleContext, pkg->index, (AccessibleTextAttributesInfo *) &(pkg->rAttributeInfo));1242} else {1243PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1244bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextAttributeInfoPackage));1245}1246break;12471248case cGetAccessibleTextRectInfoPackage:1249PrintDebugString("[INFO]: type == cGetAccessibleTextRectInfoPackage");1250if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextRectInfoPackage))) {1251GetAccessibleTextRectInfoPackage *pkg =1252(GetAccessibleTextRectInfoPackage *) (buffer + sizeof(PackageType));1253windowsThreadEntryPoints->getAccessibleTextRect((jobject)pkg->AccessibleContext,1254&(pkg->rTextRectInfo), pkg->index);1255} else {1256PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1257bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextRectInfoPackage));1258}1259break;12601261case cGetCaretLocationPackage:1262PrintDebugString("[INFO]: type == cGetCaretLocationPackage");1263if (bufsize == (sizeof(PackageType) + sizeof(GetCaretLocationPackage))) {1264GetCaretLocationPackage *pkg =1265(GetCaretLocationPackage *) (buffer + sizeof(PackageType));1266windowsThreadEntryPoints->getCaretLocation((jobject)pkg->AccessibleContext,1267&(pkg->rTextRectInfo), pkg->index);1268} else {1269PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1270bufsize, sizeof(PackageType) + sizeof(GetCaretLocationPackage));1271}1272break;12731274case cGetAccessibleTextLineBoundsPackage:1275PrintDebugString("[INFO]: type == cGetAccessibleTextLineBoundsPackage");1276if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextLineBoundsPackage))) {1277GetAccessibleTextLineBoundsPackage *pkg =1278(GetAccessibleTextLineBoundsPackage *) (buffer + sizeof(PackageType));1279windowsThreadEntryPoints->getAccessibleTextLineBounds((jobject)pkg->AccessibleContext,1280pkg->index, &(pkg->rLineStart), &(pkg->rLineEnd));1281} else {1282PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1283bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextLineBoundsPackage));1284}1285break;12861287case cGetAccessibleTextRangePackage:1288PrintDebugString("[INFO]: type == cGetAccessibleTextRangePackage");1289if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextRangePackage))) {1290GetAccessibleTextRangePackage *pkg =1291(GetAccessibleTextRangePackage *) (buffer + sizeof(PackageType));1292windowsThreadEntryPoints->getAccessibleTextRange((jobject)pkg->AccessibleContext,1293pkg->start, pkg->end, (wchar_t *) &(pkg->rText), (sizeof(pkg->rText) / sizeof(wchar_t)));1294} else {1295PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1296bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextRangePackage));1297}1298break;129913001301// ------------ Accessible Value packages ------------------13021303case cGetCurrentAccessibleValueFromContextPackage:1304PrintDebugString("[INFO]: type == cGetCurrentAccessibleValueFromContextPackage");1305if (bufsize == (sizeof(PackageType) + sizeof(GetCurrentAccessibleValueFromContextPackage))) {1306GetCurrentAccessibleValueFromContextPackage *pkg =1307(GetCurrentAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));1308windowsThreadEntryPoints->getCurrentAccessibleValueFromContext((jobject)pkg->AccessibleContext,1309(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));1310} else {1311PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1312bufsize, sizeof(PackageType) + sizeof(GetCurrentAccessibleValueFromContextPackage));1313}1314break;13151316case cGetMaximumAccessibleValueFromContextPackage:1317PrintDebugString("[INFO]: type == cGetMaximumAccessibleValueFromContextPackage");1318if (bufsize == (sizeof(PackageType) + sizeof(GetMaximumAccessibleValueFromContextPackage))) {1319GetMaximumAccessibleValueFromContextPackage *pkg =1320(GetMaximumAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));1321windowsThreadEntryPoints->getMaximumAccessibleValueFromContext((jobject)pkg->AccessibleContext,1322(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));1323} else {1324PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1325bufsize, sizeof(PackageType) + sizeof(GetMaximumAccessibleValueFromContextPackage));1326}1327break;13281329case cGetMinimumAccessibleValueFromContextPackage:1330PrintDebugString("[INFO]: type == cGetMinimumAccessibleValueFromContextPackage");1331if (bufsize == (sizeof(PackageType) + sizeof(GetMinimumAccessibleValueFromContextPackage))) {1332GetMinimumAccessibleValueFromContextPackage *pkg =1333(GetMinimumAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));1334windowsThreadEntryPoints->getMinimumAccessibleValueFromContext((jobject)pkg->AccessibleContext,1335(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));1336} else {1337PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1338bufsize, sizeof(PackageType) + sizeof(GetMinimumAccessibleValueFromContextPackage));1339}1340break;13411342// ------------ Accessible Selection packages ------------------13431344case cAddAccessibleSelectionFromContextPackage:1345PrintDebugString("[INFO]: type == cAddAccessibleSelectionFromContextPackage");1346if (bufsize == (sizeof(PackageType) + sizeof(AddAccessibleSelectionFromContextPackage))) {1347AddAccessibleSelectionFromContextPackage *pkg =1348(AddAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));1349windowsThreadEntryPoints->addAccessibleSelectionFromContext((jobject)pkg->AccessibleContext,1350pkg->index);1351} else {1352PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1353bufsize, sizeof(PackageType) + sizeof(AddAccessibleSelectionFromContextPackage));1354}1355break;13561357case cClearAccessibleSelectionFromContextPackage:1358PrintDebugString("[INFO]: type == cClearAccessibleSelectionFromContextPackage");1359if (bufsize == (sizeof(PackageType) + sizeof(ClearAccessibleSelectionFromContextPackage))) {1360ClearAccessibleSelectionFromContextPackage *pkg =1361(ClearAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));1362windowsThreadEntryPoints->clearAccessibleSelectionFromContext((jobject)pkg->AccessibleContext);1363} else {1364PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1365bufsize, sizeof(PackageType) + sizeof(ClearAccessibleSelectionFromContextPackage));1366}1367break;13681369case cGetAccessibleSelectionFromContextPackage:1370PrintDebugString("[INFO]: type == cGetAccessibleSelectionFromContextPackage");1371if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleSelectionFromContextPackage))) {1372GetAccessibleSelectionFromContextPackage *pkg =1373(GetAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));1374pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleSelectionFromContext(1375(jobject)pkg->AccessibleContext, pkg->index);1376} else {1377PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1378bufsize, sizeof(PackageType) + sizeof(GetAccessibleSelectionFromContextPackage));1379}1380break;13811382case cGetAccessibleSelectionCountFromContextPackage:1383PrintDebugString("[INFO]: type == cGetAccessibleSelectionCountFromContextPackage");1384if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleSelectionCountFromContextPackage))) {1385GetAccessibleSelectionCountFromContextPackage *pkg =1386(GetAccessibleSelectionCountFromContextPackage *) (buffer + sizeof(PackageType));1387pkg->rCount = windowsThreadEntryPoints->getAccessibleSelectionCountFromContext(1388(jobject)pkg->AccessibleContext);1389} else {1390PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1391bufsize, sizeof(PackageType) + sizeof(GetAccessibleSelectionCountFromContextPackage));1392}1393break;13941395case cIsAccessibleChildSelectedFromContextPackage:1396PrintDebugString("[INFO]: type == cIsAccessibleChildSelectedFromContextPackage");1397if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleChildSelectedFromContextPackage))) {1398IsAccessibleChildSelectedFromContextPackage *pkg =1399(IsAccessibleChildSelectedFromContextPackage *) (buffer + sizeof(PackageType));1400pkg->rResult = windowsThreadEntryPoints->isAccessibleChildSelectedFromContext(1401(jobject)pkg->AccessibleContext, pkg->index);1402} else {1403PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1404bufsize, sizeof(PackageType) + sizeof(IsAccessibleChildSelectedFromContextPackage));1405}1406break;14071408case cRemoveAccessibleSelectionFromContextPackage:1409PrintDebugString("[INFO]: type == cRemoveAccessibleSelectionFromContextPackage");1410if (bufsize == (sizeof(PackageType) + sizeof(RemoveAccessibleSelectionFromContextPackage))) {1411RemoveAccessibleSelectionFromContextPackage *pkg =1412(RemoveAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));1413windowsThreadEntryPoints->removeAccessibleSelectionFromContext((jobject)pkg->AccessibleContext,1414pkg->index);1415} else {1416PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1417bufsize, sizeof(PackageType) + sizeof(RemoveAccessibleSelectionFromContextPackage));1418}1419break;14201421case cSelectAllAccessibleSelectionFromContextPackage:1422PrintDebugString("[INFO]: type == cSelectAllAccessibleSelectionFromContextPackage");1423if (bufsize == (sizeof(PackageType) + sizeof(SelectAllAccessibleSelectionFromContextPackage))) {1424SelectAllAccessibleSelectionFromContextPackage *pkg =1425(SelectAllAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));1426windowsThreadEntryPoints->selectAllAccessibleSelectionFromContext((jobject)pkg->AccessibleContext);1427} else {1428PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1429bufsize, sizeof(PackageType) + sizeof(SelectAllAccessibleSelectionFromContextPackage));1430}1431break;143214331434// ------------ event notification management packages ------------------14351436case cAddJavaEventNotificationPackage:1437PrintDebugString("[INFO]: type = cAddJavaEventNotificationPackage");1438if (bufsize == (sizeof(PackageType) + sizeof(AddJavaEventNotificationPackage))) {1439AddJavaEventNotificationPackage *pkg =1440(AddJavaEventNotificationPackage *) (buffer + sizeof(PackageType));1441addJavaEventNotification(pkg->type, (HWND)ABLongToHandle( pkg->DLLwindow ) );1442} else {1443PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1444bufsize, sizeof(PackageType) + sizeof(AddJavaEventNotificationPackage));1445}1446break;14471448case cRemoveJavaEventNotificationPackage:1449PrintDebugString("[INFO]: type = cRemoveJavaEventNotificationPackage");1450if (bufsize == (sizeof(PackageType) + sizeof(RemoveJavaEventNotificationPackage))) {1451RemoveJavaEventNotificationPackage *pkg =1452(RemoveJavaEventNotificationPackage *) (buffer + sizeof(PackageType));1453removeJavaEventNotification(pkg->type, (HWND)ABLongToHandle( pkg->DLLwindow ));1454} else {1455PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1456bufsize, sizeof(PackageType) + sizeof(RemoveJavaEventNotificationPackage));1457}1458break;14591460case cAddAccessibilityEventNotificationPackage:1461PrintDebugString("[INFO]: type = cAddAccessibilityEventNotificationPackage");1462if (bufsize == (sizeof(PackageType) + sizeof(AddAccessibilityEventNotificationPackage))) {1463AddAccessibilityEventNotificationPackage *pkg =1464(AddAccessibilityEventNotificationPackage *) (buffer + sizeof(PackageType));1465addAccessibilityEventNotification(pkg->type, (HWND)ABLongToHandle(pkg->DLLwindow));1466} else {1467PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1468bufsize, sizeof(PackageType) + sizeof(AddAccessibilityEventNotificationPackage));1469}1470break;14711472case cRemoveAccessibilityEventNotificationPackage:1473PrintDebugString("[INFO]: type = cRemoveAccessibilityEventNotificationPackage");1474if (bufsize == (sizeof(PackageType) + sizeof(RemoveAccessibilityEventNotificationPackage))) {1475RemoveAccessibilityEventNotificationPackage *pkg =1476(RemoveAccessibilityEventNotificationPackage *) (buffer + sizeof(PackageType));1477removeAccessibilityEventNotification(pkg->type, (HWND)ABLongToHandle(pkg->DLLwindow));1478} else {1479PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",1480bufsize, sizeof(PackageType) + sizeof(RemoveAccessibilityEventNotificationPackage));1481}1482break;14831484default:1485PrintDebugString("[ERROR]: processing FAILED!! -> don't know how to handle type = %X", *type);1486returnVal = -1;1487break;1488}14891490PrintDebugString("[INFO]: package processing completed");1491return returnVal;1492}149314941495// -----------------------------149614971498/**1499* MemoryMappedFileCreated1500* - WindowsDLL letting us know it's created a memory-mapped file1501* for IPC. We need to open it and write a magic string into1502* it to let the WindowsDLL know all is OK. Also we need to1503* set up our own data structures to communicate with the1504* WindowsDLL1505*1506*/1507LRESULT1508JavaAccessBridge::MemoryMappedFileCreated(HWND ATBridgeDLLWindow, char *filename) {1509PrintDebugString("[INFO]: in MemoryMappedFileCreated(%p, %s)!", ATBridgeDLLWindow, filename);1510AccessBridgeATInstance *newAT =1511new AccessBridgeATInstance(dialogWindow, ATBridgeDLLWindow, filename, ATs);1512PrintDebugString("[INFO]: just created a new ATInstance = %p, old = %p", newAT, ATs);1513ATs = newAT;15141515LRESULT returnVal = ATs->initiateIPC();1516if (returnVal == 0) {1517PrintDebugString("[INFO]: Successfully initiated IPC with AT!!!");1518} else {1519PrintDebugString("[ERROR]: Failed to initiate IPC with AT!!!");1520}15211522return returnVal;1523}152415251526/**1527* WindowsATDestroyed - lets the JavaABDLL know a Windows AT disappeared1528*1529*/1530void1531JavaAccessBridge::WindowsATDestroyed(HWND ATBridgeDLLWindow) {1532PrintDebugString("[INFO]: in JavaAccessBridge::WindowsATDestroyed(%p)", ATBridgeDLLWindow);1533if (ATs == (AccessBridgeATInstance *) 0) {1534PrintDebugString("[ERROR]: -> ATs == 0! (shouldn't happen here)");1535return;1536}15371538AccessBridgeATInstance *currentAT = ATs;1539AccessBridgeATInstance *previousAT = ATs;1540if (ATs->winAccessBridgeWindow == ATBridgeDLLWindow) {1541ATs = ATs->nextATInstance;1542// remove event notification for this AT1543removeJavaEventNotification(currentAT->javaEventMask, ATBridgeDLLWindow);1544removeAccessibilityEventNotification(currentAT->accessibilityEventMask, ATBridgeDLLWindow);1545delete currentAT;1546PrintDebugString("[INFO]: data structures successfully removed");1547} else {1548while (currentAT != (AccessBridgeATInstance *) NULL) {1549if (currentAT->winAccessBridgeWindow == ATBridgeDLLWindow) {1550previousAT->nextATInstance = currentAT->nextATInstance;1551delete currentAT;1552PrintDebugString("[INFO]: data structures successfully removed");1553return;1554} else {1555previousAT = currentAT;1556currentAT = currentAT->nextATInstance;1557}1558}1559PrintDebugString("[ERROR]: couldn't find matching data structures!");1560}1561}156215631564// -----------------------------156515661567/**1568* releaseJavaObject - lets the JavaVM know it can release the Java Object1569*1570* Note: once you have made this call, the JavaVM will garbage collect1571* the jobject you pass in. If you later use that jobject in another1572* call, you will cause all maner of havoc!1573*1574*/1575void1576JavaAccessBridge::releaseJavaObject(jobject object) {1577PrintDebugString("[INFO]: In JavaAccessBridge::releaseJavaObject");1578PrintDebugString("[INFO]: object X: %p", object);1579if (windowsThreadJNIEnv != (JNIEnv *) 0) {1580windowsThreadJNIEnv->DeleteGlobalRef(object);1581PrintDebugString("[INFO]: global reference deleted.", object);1582} else {1583PrintDebugString("[ERROR]: windowsThreadJNIEnv == 0");1584}1585}15861587// -----------------------------15881589/**1590* addJavaEventNotification - this AT now wants this type of events1591*1592*/1593void1594JavaAccessBridge::addJavaEventNotification(jlong type, HWND DLLwindow) {1595// walk through list of ATs, find this one and add this type1596// and, if we weren't listening for these before, ask Java for 'em1597PrintDebugString("[INFO]: adding Java event type %016I64X to HWND %p", type, DLLwindow);1598AccessBridgeATInstance *ati = ATs;1599long globalEventMask = 0;1600while (ati != (AccessBridgeATInstance *) 0) {1601if (ati->winAccessBridgeWindow == DLLwindow) {1602ati->javaEventMask |= type;1603PrintDebugString("[INFO]: found HWND, javaEventMask now is %X", ati->javaEventMask);1604} else {1605globalEventMask |= ati->javaEventMask;1606}1607ati = ati->nextATInstance;1608}1609PrintDebugString("[INFO]: union of all Java AT event masks: %X", globalEventMask);1610if (!(globalEventMask & type)) {1611// no other ATs wanted this event;1612// start getting them from Java1613PrintDebugString("[INFO]: no other AT wanted this Java event (so not registered); adding to AccessBridge.java");1614windowsThreadEntryPoints->addJavaEventNotification(type);1615}1616}16171618/**1619* removeJavaEventNotification - this AT no longer wants this type of events1620*1621*/1622void1623JavaAccessBridge::removeJavaEventNotification(jlong type, HWND DLLwindow) {1624// walk through list of ATs, find this one and remove this type1625// and, if no other AT wants 'em either, tell Java we no longer want 'em1626PrintDebugString("[INFO]: removing Java event type %016I64X from HWND %p", type, DLLwindow);1627AccessBridgeATInstance *ati = ATs;1628long globalEventMask = 0;1629while (ati != (AccessBridgeATInstance *) 0) {1630if (ati->winAccessBridgeWindow == DLLwindow) {1631ati->javaEventMask &= (0xFFFFFFFF - type);1632PrintDebugString("[INFO]: found HWND, javaEventMask now is %X", ati->javaEventMask);1633} else {1634globalEventMask |= ati->javaEventMask;1635}1636ati = ati->nextATInstance;1637}1638PrintDebugString("[INFO]: union of all Java AT event masks: %X", globalEventMask);1639if (!(globalEventMask & type)) {1640// no other ATs wanted this event;1641// stop getting them from Java1642PrintDebugString("[INFO]: no other AT wanted this Java event (so can remove); removing from AccessBridge.java");1643windowsThreadEntryPoints->removeJavaEventNotification(type);1644}1645}164616471648/**1649* addAccesibilityEventNotification - this AT now wants this type of events1650*1651*/1652void1653JavaAccessBridge::addAccessibilityEventNotification(jlong type, HWND DLLwindow) {1654// walk through list of ATs, find this one and add this type1655// and, if we weren't listening for these before, ask Java for 'em1656PrintDebugString("[INFO]: adding Accesibility event type %016I64X to HWND %p", type, DLLwindow);1657AccessBridgeATInstance *ati = ATs;1658long globalEventMask = 0;1659while (ati != (AccessBridgeATInstance *) 0) {1660if (ati->winAccessBridgeWindow == DLLwindow) {1661ati->accessibilityEventMask |= type;1662PrintDebugString("[INFO]: found HWND, accessibilityEventMask now is %X", ati->accessibilityEventMask);1663} else {1664globalEventMask |= ati->accessibilityEventMask;1665}1666ati = ati->nextATInstance;1667}1668PrintDebugString("[INFO]: union of all Accessibility AT event masks: %X", globalEventMask);1669if (!(globalEventMask & type)) {1670// no other ATs wanted this event;1671// start getting them from Java1672PrintDebugString("[INFO]: no other AT wanted this Accesibility event (so not registered); adding to AccessBridge.java");1673windowsThreadEntryPoints->addAccessibilityEventNotification(type);1674}1675}16761677/**1678* removeAccesibilityEventNotification - this AT no longer wants this type of events1679*1680*/1681void1682JavaAccessBridge::removeAccessibilityEventNotification(jlong type, HWND DLLwindow) {1683// walk through list of ATs, find this one and remove this type1684// and, if no other AT wants 'em either, tell Java we no longer want 'em1685PrintDebugString("[INFO]: removing Accesibility event type %016I64X from HWND %p", type, DLLwindow);1686AccessBridgeATInstance *ati = ATs;1687long globalEventMask = 0;1688while (ati != (AccessBridgeATInstance *) 0) {1689if (ati->winAccessBridgeWindow == DLLwindow) {1690ati->accessibilityEventMask &= (0xFFFFFFFF - type);1691PrintDebugString("[INFO]: found HWND, accessibilityEventMask now is %X", ati->accessibilityEventMask);1692} else {1693globalEventMask |= ati->accessibilityEventMask;1694}1695ati = ati->nextATInstance;1696}1697PrintDebugString("[INFO]: union of all Accessibility AT event masks: %X", globalEventMask);1698if (!(globalEventMask & type)) {1699// no other ATs wanted this event;1700// stop getting them from Java1701PrintDebugString("[INFO]: no other AT wanted this Accessibility event (so can remove); removing from AccessBridge.java");1702windowsThreadEntryPoints->removeAccessibilityEventNotification(type);1703}1704}17051706170717081709/**1710* firePropertyCaretChange1711*1712*/1713void1714JavaAccessBridge::firePropertyCaretChange(JNIEnv *env, jobject callingObj,1715jobject event, jobject source,1716jint oldValue, jint newValue) {17171718PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyCaretChanged(%p, %p, %p, %p, %d, %d)",1719env, callingObj, event,1720source, oldValue, newValue);17211722// sanity check1723if (ATs == (AccessBridgeATInstance *) 0) {1724PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");1725return; // panic!1726}17271728// common setup1729char buffer[sizeof(PackageType) + sizeof(PropertyCaretChangePackage)];1730PackageType *type = (PackageType *) buffer;1731PropertyCaretChangePackage *pkg = (PropertyCaretChangePackage *) (buffer + sizeof(PackageType));1732*type = cPropertyCaretChangePackage;1733pkg->vmID = (long) dialogWindow;17341735// make new Global Refs and send events only to those ATs that want 'em1736AccessBridgeATInstance *ati = ATs;1737while (ati != (AccessBridgeATInstance *) 0) {1738if (ati->accessibilityEventMask & cPropertyCaretChangeEvent) {17391740PrintDebugString("[INFO]: sending to AT");17411742// make new GlobalRefs for this AT1743pkg->Event = (JOBJECT64)env->NewGlobalRef(event);1744pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);1745#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)1746PrintDebugString("[INFO]: GlobalRef'd Event: %p"\1747" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);1748#else // JOBJECT64 is jlong (64 bit)1749PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\1750" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);1751#endif17521753pkg->oldPosition = oldValue;1754pkg->newPosition = newValue;17551756ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyCaretChangeEvent);1757}1758ati = ati->nextATInstance;1759}1760PrintDebugString("[INFO]: done with propertyCaretChange event");1761}17621763/**1764* firePropertyDescriptionChange1765*1766*/1767void1768JavaAccessBridge::firePropertyDescriptionChange(JNIEnv *env, jobject callingObj,1769jobject event, jobject source,1770jstring oldValue, jstring newValue){17711772PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyDescriptionChanged(%p, %p, %p, %p, %p, %p)",1773env, callingObj, event,1774source, oldValue, newValue);17751776// sanity check1777if (ATs == (AccessBridgeATInstance *) 0) {1778PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");1779return; // panic!1780}17811782// common setup1783const wchar_t *stringBytes;1784char buffer[sizeof(PackageType) + sizeof(PropertyDescriptionChangePackage)];1785PackageType *type = (PackageType *) buffer;1786PropertyDescriptionChangePackage *pkg = (PropertyDescriptionChangePackage *) (buffer + sizeof(PackageType));1787*type = cPropertyDescriptionChangePackage;1788pkg->vmID = (long) dialogWindow;17891790// make new Global Refs and send events only to those ATs that want 'em1791AccessBridgeATInstance *ati = ATs;1792while (ati != (AccessBridgeATInstance *) 0) {1793if (ati->accessibilityEventMask & cPropertyCaretChangeEvent) {17941795PrintDebugString("[INFO]: sending to AT");17961797// make new GlobalRefs for this AT1798pkg->Event = (JOBJECT64)env->NewGlobalRef(event);1799pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);1800#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)1801PrintDebugString("[INFO]: GlobalRef'd Event: %p"\1802" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);1803#else // JOBJECT64 is jlong (64 bit)1804PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\1805" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);1806#endif18071808if (oldValue != (jstring) 0) {1809stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);1810if (stringBytes == NULL) {1811if (!env->ExceptionCheck()) {1812jclass cls = env->FindClass("java/lang/OutOfMemoryError");1813if (cls != NULL) {1814env->ThrowNew(cls, NULL);1815}1816}1817return;1818}1819wcsncpy(pkg->oldDescription, stringBytes, (sizeof(pkg->oldDescription) / sizeof(wchar_t)));1820env->ReleaseStringChars(oldValue, stringBytes);1821} else {1822wcsncpy(pkg->oldDescription, L"(null)", (sizeof(pkg->oldDescription) / sizeof(wchar_t)));1823}18241825if (newValue != (jstring) 0) {1826stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);1827if (stringBytes == NULL) {1828if (!env->ExceptionCheck()) {1829jclass cls = env->FindClass("java/lang/OutOfMemoryError");1830if (cls != NULL) {1831env->ThrowNew(cls, NULL);1832}1833}1834return;1835}1836wcsncpy(pkg->newDescription, stringBytes, (sizeof(pkg->newDescription) / sizeof(wchar_t)));1837env->ReleaseStringChars(newValue, stringBytes);1838} else {1839wcsncpy(pkg->newDescription, L"(null)", (sizeof(pkg->newDescription) / sizeof(wchar_t)));1840}18411842ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyDescriptionChangeEvent);1843}1844ati = ati->nextATInstance;1845}1846PrintDebugString("[INFO]: done with propertyDescriptionChange event");1847}18481849/**1850* firePropertyNameChange1851*1852*/1853void1854JavaAccessBridge::firePropertyNameChange(JNIEnv *env, jobject callingObj,1855jobject event, jobject source,1856jstring oldValue, jstring newValue){18571858PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyNameChanged(%p, %p, %p, %p, %p, %p)",1859env, callingObj, event,1860source, oldValue, newValue);18611862// sanity check1863if (ATs == (AccessBridgeATInstance *) 0) {1864PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");1865return; // panic!1866}18671868// common setup1869const wchar_t *stringBytes;1870char buffer[sizeof(PackageType) + sizeof(PropertyNameChangePackage)];1871PackageType *type = (PackageType *) buffer;1872PropertyNameChangePackage *pkg = (PropertyNameChangePackage *) (buffer + sizeof(PackageType));1873*type = cPropertyNameChangePackage;1874pkg->vmID = (long) dialogWindow;18751876// make new Global Refs and send events only to those ATs that want 'em1877AccessBridgeATInstance *ati = ATs;1878while (ati != (AccessBridgeATInstance *) 0) {1879if (ati->accessibilityEventMask & cPropertyNameChangeEvent) {18801881PrintDebugString("[INFO]: sending to AT");18821883// make new GlobalRefs for this AT1884pkg->Event = (JOBJECT64)env->NewGlobalRef(event);1885pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);1886#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)1887PrintDebugString("[INFO]: GlobalRef'd Event: %p"\1888" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);1889#else // JOBJECT64 is jlong (64 bit)1890PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\1891" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);1892#endif18931894if (oldValue != (jstring) 0) {1895stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);1896if (stringBytes == NULL) {1897if (!env->ExceptionCheck()) {1898jclass cls = env->FindClass("java/lang/OutOfMemoryError");1899if (cls != NULL) {1900env->ThrowNew(cls, NULL);1901}1902}1903return;1904}1905wcsncpy(pkg->oldName, stringBytes, (sizeof(pkg->oldName) / sizeof(wchar_t)));1906env->ReleaseStringChars(oldValue, stringBytes);1907} else {1908wcsncpy(pkg->oldName, L"(null)", (sizeof(pkg->oldName) / sizeof(wchar_t)));1909}19101911if (newValue != (jstring) 0) {1912stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);1913if (stringBytes == NULL) {1914if (!env->ExceptionCheck()) {1915jclass cls = env->FindClass("java/lang/OutOfMemoryError");1916if (cls != NULL) {1917env->ThrowNew(cls, NULL);1918}1919}1920return;1921}1922wcsncpy(pkg->newName, stringBytes, (sizeof(pkg->newName) / sizeof(wchar_t)));1923env->ReleaseStringChars(newValue, stringBytes);1924} else {1925wcsncpy(pkg->newName, L"(null)", (sizeof(pkg->newName) / sizeof(wchar_t)));1926}19271928ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyNameChangeEvent);1929}1930ati = ati->nextATInstance;1931}1932PrintDebugString("[INFO]: done with propertyNameChange event");1933}193419351936/**1937* firePropertySelectionChange1938*1939*/1940void1941JavaAccessBridge::firePropertySelectionChange(JNIEnv *env, jobject callingObj,1942jobject event, jobject source) {19431944PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertySelectionChanged(%p, %p, %p, %p)",1945env, callingObj, event, source);19461947// sanity check1948if (ATs == (AccessBridgeATInstance *) 0) {1949PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");1950return; // panic!1951}19521953// common setup1954char buffer[sizeof(PackageType) + sizeof(PropertySelectionChangePackage)];1955PackageType *type = (PackageType *) buffer;1956PropertySelectionChangePackage *pkg = (PropertySelectionChangePackage *) (buffer + sizeof(PackageType));1957*type = cPropertySelectionChangePackage;1958pkg->vmID = (long) dialogWindow;19591960// make new Global Refs and send events only to those ATs that want 'em1961AccessBridgeATInstance *ati = ATs;1962while (ati != (AccessBridgeATInstance *) 0) {1963if (ati->accessibilityEventMask & cPropertySelectionChangeEvent) {19641965PrintDebugString("[INFO]: sending to AT");19661967// make new GlobalRefs for this AT1968pkg->Event = (JOBJECT64)env->NewGlobalRef(event);1969pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);1970#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)1971PrintDebugString("[INFO]: GlobalRef'd Event: %p"\1972" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);1973#else // JOBJECT64 is jlong (64 bit)1974PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\1975" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);1976#endif19771978ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertySelectionChangeEvent);1979}1980ati = ati->nextATInstance;1981}1982PrintDebugString("[INFO]: done with propertySelectionChange event");1983}198419851986/**1987* firePropertyStateChange1988*1989*/1990void1991JavaAccessBridge::firePropertyStateChange(JNIEnv *env, jobject callingObj,1992jobject event, jobject source,1993jstring oldValue, jstring newValue){19941995PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyStateChanged(%p, %p, %p, %p, %p, %p)",1996env, callingObj, event,1997source, oldValue, newValue);19981999// sanity check2000if (ATs == (AccessBridgeATInstance *) 0) {2001PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2002return; // panic!2003}20042005// common setup2006const wchar_t *stringBytes;2007char buffer[sizeof(PackageType) + sizeof(PropertyStateChangePackage)];2008PackageType *type = (PackageType *) buffer;2009PropertyStateChangePackage *pkg = (PropertyStateChangePackage *) (buffer + sizeof(PackageType));2010*type = cPropertyStateChangePackage;2011pkg->vmID = (long) dialogWindow;20122013// make new Global Refs and send events only to those ATs that want 'em2014AccessBridgeATInstance *ati = ATs;2015while (ati != (AccessBridgeATInstance *) 0) {2016if (ati->accessibilityEventMask & cPropertyStateChangeEvent) {20172018PrintDebugString("[INFO]: sending to AT");20192020// make new GlobalRefs for this AT2021pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2022pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2023#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2024PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2025" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);2026#else // JOBJECT64 is jlong (64 bit)2027PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2028" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2029#endif20302031if (oldValue != (jstring) 0) {2032stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);2033if (stringBytes == NULL) {2034if (!env->ExceptionCheck()) {2035jclass cls = env->FindClass("java/lang/OutOfMemoryError");2036if (cls != NULL) {2037env->ThrowNew(cls, NULL);2038}2039}2040return;2041}2042wcsncpy(pkg->oldState, stringBytes, (sizeof(pkg->oldState) / sizeof(wchar_t)));2043env->ReleaseStringChars(oldValue, stringBytes);2044} else {2045wcsncpy(pkg->oldState, L"(null)", (sizeof(pkg->oldState) / sizeof(wchar_t)));2046}20472048if (newValue != (jstring) 0) {2049stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);2050if (stringBytes == NULL) {2051if (!env->ExceptionCheck()) {2052jclass cls = env->FindClass("java/lang/OutOfMemoryError");2053if (cls != NULL) {2054env->ThrowNew(cls, NULL);2055}2056}2057return;2058}2059wcsncpy(pkg->newState, stringBytes, (sizeof(pkg->newState) / sizeof(wchar_t)));2060env->ReleaseStringChars(newValue, stringBytes);2061} else {2062wcsncpy(pkg->newState, L"(null)", (sizeof(pkg->newState) / sizeof(wchar_t)));2063}20642065ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyStateChangeEvent);2066}2067ati = ati->nextATInstance;2068}2069PrintDebugString("[INFO]: done with propertyStateChange event");2070}207120722073/**2074* firePropertyTextChange2075*2076*/2077void2078JavaAccessBridge::firePropertyTextChange(JNIEnv *env, jobject callingObj,2079jobject event, jobject source) {20802081PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyTextChanged(%p, %p, %p, %p)",2082env, callingObj, event, source);20832084// sanity check2085if (ATs == (AccessBridgeATInstance *) 0) {2086PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2087return; // panic!2088}20892090// common setup2091char buffer[sizeof(PackageType) + sizeof(PropertyTextChangePackage)];2092PackageType *type = (PackageType *) buffer;2093PropertyTextChangePackage *pkg = (PropertyTextChangePackage *) (buffer + sizeof(PackageType));2094*type = cPropertyTextChangePackage;2095pkg->vmID = (long) dialogWindow;20962097// make new Global Refs and send events only to those ATs that want 'em2098AccessBridgeATInstance *ati = ATs;2099while (ati != (AccessBridgeATInstance *) 0) {2100if (ati->accessibilityEventMask & cPropertyTextChangeEvent) {21012102PrintDebugString("[INFO]: sending to AT");21032104// make new GlobalRefs for this AT2105pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2106pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2107#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2108PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2109" GlobalRef'd Source: %p",pkg->Event, pkg->AccessibleContextSource);2110#else // JOBJECT64 is jlong (64 bit)2111PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2112" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2113#endif21142115ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyTextChangeEvent);2116}2117ati = ati->nextATInstance;2118}2119PrintDebugString("[INFO]: done with propertyTextChange event");2120}212121222123/**2124* firePropertyValueChange2125*2126*/2127void2128JavaAccessBridge::firePropertyValueChange(JNIEnv *env, jobject callingObj,2129jobject event, jobject source,2130jstring oldValue, jstring newValue){21312132PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyValueChanged(%p, %p, %p, %p, %p, %p)",2133env, callingObj, event,2134source, oldValue, newValue);21352136// sanity check2137if (ATs == (AccessBridgeATInstance *) 0) {2138PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2139return; // panic!2140}21412142// common setup2143const wchar_t *stringBytes;2144char buffer[sizeof(PackageType) + sizeof(PropertyValueChangePackage)];2145PackageType *type = (PackageType *) buffer;2146PropertyValueChangePackage *pkg = (PropertyValueChangePackage *) (buffer + sizeof(PackageType));2147*type = cPropertyValueChangePackage;2148pkg->vmID = (long) dialogWindow;21492150// make new Global Refs and send events only to those ATs that want 'em2151AccessBridgeATInstance *ati = ATs;2152while (ati != (AccessBridgeATInstance *) 0) {2153if (ati->accessibilityEventMask & cPropertyValueChangeEvent) {21542155PrintDebugString("[INFO]: sending to AT");21562157// make new GlobalRefs for this AT2158pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2159pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2160#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2161PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2162" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);2163#else // JOBJECT64 is jlong (64 bit)2164PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2165" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2166#endif21672168if (oldValue != (jstring) 0) {2169stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);2170if (stringBytes == NULL) {2171if (!env->ExceptionCheck()) {2172jclass cls = env->FindClass("java/lang/OutOfMemoryError");2173if (cls != NULL) {2174env->ThrowNew(cls, NULL);2175}2176}2177return;2178}2179wcsncpy(pkg->oldValue, stringBytes, (sizeof(pkg->oldValue) / sizeof(wchar_t)));2180env->ReleaseStringChars(oldValue, stringBytes);2181} else {2182wcsncpy(pkg->oldValue, L"(null)", (sizeof(pkg->oldValue) / sizeof(wchar_t)));2183}21842185if (newValue != (jstring) 0) {2186stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);2187if (stringBytes == NULL) {2188if (!env->ExceptionCheck()) {2189jclass cls = env->FindClass("java/lang/OutOfMemoryError");2190if (cls != NULL) {2191env->ThrowNew(cls, NULL);2192}2193}2194return;2195}2196wcsncpy(pkg->newValue, stringBytes, (sizeof(pkg->newValue) / sizeof(wchar_t)));2197env->ReleaseStringChars(newValue, stringBytes);2198} else {2199wcsncpy(pkg->newValue, L"(null)", (sizeof(pkg->newValue) / sizeof(wchar_t)));2200}22012202ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyValueChangeEvent);2203}2204ati = ati->nextATInstance;2205}2206PrintDebugString("[INFO]: done with propertyValueChange event");2207}22082209/**2210* firePropertyVisibleDataChange2211*2212*/2213void2214JavaAccessBridge::firePropertyVisibleDataChange(JNIEnv *env, jobject callingObj,2215jobject event, jobject source) {22162217PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyVisibleDataChanged(%p, %p, %p, %p)",2218env, callingObj, event, source);22192220// sanity check2221if (ATs == (AccessBridgeATInstance *) 0) {2222PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2223return; // panic!2224}22252226// common setup2227char buffer[sizeof(PackageType) + sizeof(PropertyVisibleDataChangePackage)];2228PackageType *type = (PackageType *) buffer;2229PropertyVisibleDataChangePackage *pkg = (PropertyVisibleDataChangePackage *) (buffer + sizeof(PackageType));2230*type = cPropertyVisibleDataChangePackage;2231pkg->vmID = (long) dialogWindow;22322233// make new Global Refs and send events only to those ATs that want 'em2234AccessBridgeATInstance *ati = ATs;2235while (ati != (AccessBridgeATInstance *) 0) {2236if (ati->accessibilityEventMask & cPropertyVisibleDataChangeEvent) {22372238PrintDebugString("[INFO]: sending to AT");22392240// make new GlobalRefs for this AT2241pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2242pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2243#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2244PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2245" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);2246#else // JOBJECT64 is jlong (64 bit)2247PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2248" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2249#endif22502251ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyVisibleDataChangeEvent);2252}2253ati = ati->nextATInstance;2254}2255PrintDebugString("[INFO]: done with propertyVisibleDataChange event");2256}225722582259/**2260* firePropertyChildChange2261*2262*/2263void2264JavaAccessBridge::firePropertyChildChange(JNIEnv *env, jobject callingObj,2265jobject event, jobject source,2266jobject oldValue, jobject newValue){22672268PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyChildPropertyChanged(%p, %p, %p, %p, %p, %p)",2269env, callingObj, event,2270source, oldValue, newValue);22712272// sanity check2273if (ATs == (AccessBridgeATInstance *) 0) {2274PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2275return; // panic!2276}22772278// common setup2279char buffer[sizeof(PackageType) + sizeof(PropertyChildChangePackage)];2280PackageType *type = (PackageType *) buffer;2281PropertyChildChangePackage *pkg = (PropertyChildChangePackage *) (buffer + sizeof(PackageType));2282*type = cPropertyChildChangePackage;2283pkg->vmID = (long) dialogWindow;22842285// make new Global Refs and send events only to those ATs that want 'em2286AccessBridgeATInstance *ati = ATs;2287while (ati != (AccessBridgeATInstance *) 0) {2288if (ati->accessibilityEventMask & cPropertyChildChangeEvent) {22892290PrintDebugString("[INFO]: sending to AT");22912292// make new GlobalRefs for this AT2293pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2294pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2295pkg->oldChildAccessibleContext = (JOBJECT64)env->NewGlobalRef(oldValue);2296pkg->newChildAccessibleContext = (JOBJECT64)env->NewGlobalRef(newValue);2297#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2298PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2299" GlobalRef'd Source: %p"\2300" GlobalRef'd OldChildAC: %p"\2301" GlobalRef'd NewChildAC: %p"\2302, pkg->Event, pkg->AccessibleContextSource, pkg->oldChildAccessibleContext, pkg->newChildAccessibleContext);2303#else // JOBJECT64 is jlong (64 bit)2304PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2305" GlobalRef'd Source: %016I64X"\2306" GlobalRef'd OldChildAC: %016I64X"\2307" GlobalRef'd NewChildAC: %016I64X"\2308, pkg->Event, pkg->AccessibleContextSource, pkg->oldChildAccessibleContext, pkg->newChildAccessibleContext);2309#endif23102311ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyChildChangeEvent);2312}2313ati = ati->nextATInstance;2314}2315PrintDebugString("[INFO]: done with propertyChildChange event");2316}231723182319/**2320* firePropertyActiveDescendentChange2321*2322*/2323void2324JavaAccessBridge::firePropertyActiveDescendentChange(JNIEnv *env, jobject callingObj,2325jobject event, jobject source,2326jobject oldValue, jobject newValue){23272328PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyActiveDescendentPropertyChanged(%p, %p, %p, %p, %p, %p)",2329env, callingObj, event,2330source, oldValue, newValue);23312332// sanity check2333if (ATs == (AccessBridgeATInstance *) 0) {2334PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2335return; // panic!2336}23372338// common setup2339char buffer[sizeof(PackageType) + sizeof(PropertyActiveDescendentChangePackage)];2340PackageType *type = (PackageType *) buffer;2341PropertyActiveDescendentChangePackage *pkg = (PropertyActiveDescendentChangePackage *) (buffer + sizeof(PackageType));2342*type = cPropertyActiveDescendentChangePackage;2343pkg->vmID = (long) dialogWindow;23442345// make new Global Refs and send events only to those ATs that want 'em2346AccessBridgeATInstance *ati = ATs;2347while (ati != (AccessBridgeATInstance *) 0) {2348if (ati->accessibilityEventMask & cPropertyActiveDescendentChangeEvent) {23492350PrintDebugString("[INFO]: sending to AT");23512352// make new GlobalRefs for this AT2353pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2354pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2355pkg->oldActiveDescendentAccessibleContext = (JOBJECT64)env->NewGlobalRef(oldValue);2356pkg->newActiveDescendentAccessibleContext = (JOBJECT64)env->NewGlobalRef(newValue);2357#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2358PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2359" GlobalRef'd Source: %p"\2360" GlobalRef'd OldActiveDescendentAC: %p"\2361" GlobalRef'd NewActiveDescendentAC: %p"\2362, pkg->Event, pkg->AccessibleContextSource, pkg->oldActiveDescendentAccessibleContext, pkg->newActiveDescendentAccessibleContext);2363#else // JOBJECT64 is jlong (64 bit)2364PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2365" GlobalRef'd Source: %016I64X"\2366" GlobalRef'd OldActiveDescendentAC: %016I64X"\2367" GlobalRef'd NewActiveDescendentAC: %016I64X"\2368, pkg->Event, pkg->AccessibleContextSource, pkg->oldActiveDescendentAccessibleContext, pkg->newActiveDescendentAccessibleContext);2369#endif23702371ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyActiveDescendentChangeEvent);2372}2373ati = ati->nextATInstance;2374}2375PrintDebugString("[INFO]: done with propertyActiveChange event");2376}23772378/**2379* firePropertyValueChange2380*2381*/2382void2383JavaAccessBridge::firePropertyTableModelChange(JNIEnv *env, jobject callingObj,2384jobject event, jobject source,2385jstring oldValue, jstring newValue){23862387PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyTableModelChange(%p, %p, %p, %p, %p, %p)",2388env, callingObj, event,2389source, oldValue, newValue);23902391// sanity check2392if (ATs == (AccessBridgeATInstance *) 0) {2393PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2394return; // panic!2395}23962397// common setup2398const wchar_t *stringBytes;2399char buffer[sizeof(PackageType) + sizeof(PropertyTableModelChangePackage)];2400PackageType *type = (PackageType *) buffer;2401PropertyTableModelChangePackage *pkg = (PropertyTableModelChangePackage *) (buffer + sizeof(PackageType));2402*type = cPropertyTableModelChangePackage;2403pkg->vmID = (long) dialogWindow;24042405// make new Global Refs and send events only to those ATs that want 'em2406AccessBridgeATInstance *ati = ATs;2407while (ati != (AccessBridgeATInstance *) 0) {2408if (ati->accessibilityEventMask & cPropertyTableModelChangeEvent) {24092410PrintDebugString("[INFO]: sending to AT");24112412// make new GlobalRefs for this AT2413pkg->Event = (JOBJECT64)env->NewGlobalRef(event);2414pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);2415#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2416PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2417" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);2418#else // JOBJECT64 is jlong (64 bit)2419PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2420" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2421#endif24222423if (oldValue != (jstring) 0) {2424stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);2425if (stringBytes == NULL) {2426if (!env->ExceptionCheck()) {2427jclass cls = env->FindClass("java/lang/OutOfMemoryError");2428if (cls != NULL) {2429env->ThrowNew(cls, NULL);2430}2431}2432return;2433}2434wcsncpy(pkg->oldValue, stringBytes, (sizeof(pkg->oldValue) / sizeof(wchar_t)));2435env->ReleaseStringChars(oldValue, stringBytes);2436} else {2437wcsncpy(pkg->oldValue, L"(null)", (sizeof(pkg->oldValue) / sizeof(wchar_t)));2438}24392440if (newValue != (jstring) 0) {2441stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);2442if (stringBytes == NULL) {2443if (!env->ExceptionCheck()) {2444jclass cls = env->FindClass("java/lang/OutOfMemoryError");2445if (cls != NULL) {2446env->ThrowNew(cls, NULL);2447}2448}2449return;2450}2451wcsncpy(pkg->newValue, stringBytes, (sizeof(pkg->newValue) / sizeof(wchar_t)));2452env->ReleaseStringChars(newValue, stringBytes);2453} else {2454wcsncpy(pkg->newValue, L"(null)", (sizeof(pkg->newValue) / sizeof(wchar_t)));2455}24562457ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyTableModelChangeEvent);2458}2459ati = ati->nextATInstance;2460}2461PrintDebugString("[INFO]: done with propertyTableModelChange event");2462}2463246424652466#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)2467#define PRINT_GLOBALREFS() \2468PrintDebugString("[INFO]: GlobalRef'd Event: %p"\2469" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);2470#else // JOBJECT64 is jlong (64 bit)2471#define PRINT_GLOBALREFS() \2472PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\2473" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);2474#endif24752476#define FIRE_EVENT(function, packageStruct, packageConstant, eventConstant) \2477void JavaAccessBridge::function(JNIEnv *env, jobject callingObj, \2478jobject eventObj, jobject source) { \2479\2480PrintDebugString("[INFO]: Firing event id = %d(%p, %p, %p, %p); vmID = %X", \2481eventConstant, env, callingObj, eventObj, source, dialogWindow);\2482\2483/* sanity check */ \2484if (ATs == (AccessBridgeATInstance *) 0) { \2485PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)"); \2486return; /* panic! */ \2487} \2488\2489/* common setup */ \2490char buffer[sizeof(PackageType) + sizeof(packageStruct)]; \2491PackageType *type = (PackageType *) buffer; \2492packageStruct *pkg = (packageStruct *) (buffer + sizeof(PackageType)); \2493*type = packageConstant; \2494pkg->vmID = (long) dialogWindow; \2495\2496/* make new Global Refs, send events only to those ATs that want 'em */ \2497AccessBridgeATInstance *ati = ATs; \2498while (ati != (AccessBridgeATInstance *) 0) { \2499PrintDebugString("[INFO]: javaEventMask = %X eventConstant=%d pkg->vmID=%X",\2500ati->javaEventMask, eventConstant, pkg->vmID ); \2501if (ati->javaEventMask & eventConstant) { \2502\2503PrintDebugString("[INFO]: sending to AT"); \2504/* make new GlobalRefs for this AT */ \2505pkg->Event = (JOBJECT64)env->NewGlobalRef(eventObj); \2506pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source); \2507PRINT_GLOBALREFS() \2508\2509ati->sendJavaEventPackage(buffer, sizeof(buffer), eventConstant); \2510} \2511ati = ati->nextATInstance; \2512} \2513PrintDebugString("[INFO]: done with firing AWT event"); \2514}25152516void JavaAccessBridge::javaShutdown(JNIEnv *env, jobject callingObj) {25172518PrintDebugString("[INFO]: Firing event id = %d(%p, %p); vmID = %X",2519cJavaShutdownEvent, env, callingObj, dialogWindow);25202521/* sanity check */2522if (ATs == (AccessBridgeATInstance *) 0) {2523PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");2524return; /* panic! */2525}25262527/* common setup */2528char buffer[sizeof(PackageType) + sizeof(JavaShutdownPackage)];2529PackageType *type = (PackageType *) buffer;2530JavaShutdownPackage *pkg = (JavaShutdownPackage *) (buffer + sizeof(PackageType));2531*type = cJavaShutdownPackage;2532pkg->vmID = (long) dialogWindow;25332534/* make new Global Refs, send events only to those ATs that want 'em */2535AccessBridgeATInstance *ati = ATs;2536while (ati != (AccessBridgeATInstance *) 0) {2537if (ati->javaEventMask & cJavaShutdownEvent) {2538PrintDebugString("[INFO]: sending to AT");2539ati->sendJavaEventPackage(buffer, sizeof(buffer), cJavaShutdownEvent);2540}2541ati = ati->nextATInstance;2542}2543PrintDebugString("[INFO]: done with firing AWT event");2544}25452546FIRE_EVENT(fireFocusGained, FocusGainedPackage, cFocusGainedPackage, cFocusGainedEvent)2547FIRE_EVENT(fireFocusLost, FocusLostPackage, cFocusLostPackage, cFocusLostEvent)2548FIRE_EVENT(fireCaretUpdate, CaretUpdatePackage, cCaretUpdatePackage, cCaretUpdateEvent)2549FIRE_EVENT(fireMouseClicked, MouseClickedPackage, cMouseClickedPackage, cMouseClickedEvent)2550FIRE_EVENT(fireMouseEntered, MouseEnteredPackage, cMouseEnteredPackage, cMouseEnteredEvent)2551FIRE_EVENT(fireMouseExited, MouseExitedPackage, cMouseExitedPackage, cMouseExitedEvent)2552FIRE_EVENT(fireMousePressed, MousePressedPackage, cMousePressedPackage, cMousePressedEvent)2553FIRE_EVENT(fireMouseReleased, MouseReleasedPackage, cMouseReleasedPackage, cMouseReleasedEvent)2554FIRE_EVENT(fireMenuCanceled, MenuCanceledPackage, cMenuCanceledPackage, cMenuCanceledEvent)2555FIRE_EVENT(fireMenuDeselected, MenuDeselectedPackage, cMenuDeselectedPackage, cMenuDeselectedEvent)2556FIRE_EVENT(fireMenuSelected, MenuSelectedPackage, cMenuSelectedPackage, cMenuSelectedEvent)2557FIRE_EVENT(firePopupMenuCanceled, PopupMenuCanceledPackage, cPopupMenuCanceledPackage, cPopupMenuCanceledEvent)2558FIRE_EVENT(firePopupMenuWillBecomeInvisible, PopupMenuWillBecomeInvisiblePackage, cPopupMenuWillBecomeInvisiblePackage, cPopupMenuWillBecomeInvisibleEvent)2559FIRE_EVENT(firePopupMenuWillBecomeVisible, PopupMenuWillBecomeVisiblePackage, cPopupMenuWillBecomeVisiblePackage, cPopupMenuWillBecomeVisibleEvent)256025612562// -----------------------------256325642565extern "C" { // event stuff from AccessBridge.h, generated by JNI25662567JNIEXPORT void JNICALL2568Java_com_sun_java_accessibility_AccessBridge_sendDebugString(JNIEnv *env, jobject callingObj, jstring debugStr) {25692570const wchar_t *stringBytes;2571stringBytes = (const wchar_t *) env->GetStringChars(debugStr, 0);2572if (stringBytes == NULL) {2573if (!env->ExceptionCheck()) {2574jclass cls = env->FindClass("java/lang/OutOfMemoryError");2575if (cls != NULL) {2576env->ThrowNew(cls, NULL);2577}2578}2579return;2580}2581wPrintJavaDebugString(L"AccessBridge.java: %ls", stringBytes);2582env->ReleaseStringChars(debugStr, stringBytes);2583}25842585JNIEXPORT void JNICALL2586Java_com_sun_java_accessibility_AccessBridge_propertyCaretChange(JNIEnv *env, jobject callingObj,2587jobject event, jobject source,2588jint oldValue, jint newValue) {2589theJavaAccessBridge->firePropertyCaretChange(env, callingObj,2590event, source,2591oldValue, newValue);2592}25932594JNIEXPORT void JNICALL2595Java_com_sun_java_accessibility_AccessBridge_propertyDescriptionChange(JNIEnv *env, jobject callingObj,2596jobject event, jobject source,2597jstring oldValue, jstring newValue) {2598theJavaAccessBridge->firePropertyDescriptionChange(env, callingObj,2599event, source,2600oldValue, newValue);2601}26022603JNIEXPORT void JNICALL2604Java_com_sun_java_accessibility_AccessBridge_propertyNameChange(JNIEnv *env, jobject callingObj,2605jobject event, jobject source,2606jstring oldValue, jstring newValue) {2607theJavaAccessBridge->firePropertyNameChange(env, callingObj,2608event, source,2609oldValue, newValue);2610}26112612JNIEXPORT void JNICALL2613Java_com_sun_java_accessibility_AccessBridge_propertySelectionChange(JNIEnv *env, jobject callingObj,2614jobject event, jobject source) {2615theJavaAccessBridge->firePropertySelectionChange(env, callingObj,2616event, source);2617}26182619JNIEXPORT void JNICALL2620Java_com_sun_java_accessibility_AccessBridge_propertyStateChange(JNIEnv *env, jobject callingObj,2621jobject event, jobject source,2622jstring oldValue, jstring newValue) {2623theJavaAccessBridge->firePropertyStateChange(env, callingObj,2624event, source,2625oldValue, newValue);2626}26272628JNIEXPORT void JNICALL2629Java_com_sun_java_accessibility_AccessBridge_propertyTextChange(JNIEnv *env, jobject callingObj,2630jobject event, jobject source) {2631theJavaAccessBridge->firePropertyTextChange(env, callingObj,2632event, source);2633}26342635JNIEXPORT void JNICALL2636Java_com_sun_java_accessibility_AccessBridge_propertyValueChange(JNIEnv *env, jobject callingObj,2637jobject event, jobject source,2638jstring oldValue, jstring newValue) {2639theJavaAccessBridge->firePropertyValueChange(env, callingObj,2640event, source,2641oldValue, newValue);2642}26432644JNIEXPORT void JNICALL2645Java_com_sun_java_accessibility_AccessBridge_propertyVisibleDataChange(JNIEnv *env, jobject callingObj,2646jobject event, jobject source) {2647theJavaAccessBridge->firePropertyVisibleDataChange(env, callingObj,2648event, source);2649}26502651JNIEXPORT void JNICALL2652Java_com_sun_java_accessibility_AccessBridge_propertyChildChange(JNIEnv *env, jobject callingObj,2653jobject event, jobject source,2654jobject oldValue, jobject newValue) {2655theJavaAccessBridge->firePropertyChildChange(env, callingObj,2656event, source,2657oldValue, newValue);2658}26592660JNIEXPORT void JNICALL2661Java_com_sun_java_accessibility_AccessBridge_propertyActiveDescendentChange(JNIEnv *env, jobject callingObj,2662jobject event, jobject source,2663jobject oldValue,2664jobject newValue) {2665theJavaAccessBridge->firePropertyActiveDescendentChange(env, callingObj,2666event, source,2667oldValue, newValue);2668}26692670JNIEXPORT void JNICALL2671Java_com_sun_java_accessibility_AccessBridge_propertyTableModelChange(JNIEnv *env, jobject callingObj,2672jobject event, jobject source,2673jstring oldValue, jstring newValue) {26742675theJavaAccessBridge->firePropertyTableModelChange(env, callingObj,2676event, source,2677oldValue, newValue);2678}26792680#define HANDLE_STANDARD_EVENT_FROM_JAVA(function, method) \2681JNIEXPORT void JNICALL \2682function(JNIEnv *env, jobject callingObj, jobject event, jobject source) { \2683theJavaAccessBridge->method(env, callingObj, event, source); \2684}268526862687JNIEXPORT void JNICALL2688Java_com_sun_java_accessibility_AccessBridge_javaShutdown(JNIEnv *env, jobject callingObj) {2689theJavaAccessBridge->javaShutdown(env, callingObj);2690}26912692HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_focusGained, fireFocusGained)2693HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_focusLost, fireFocusLost)2694HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_caretUpdate, fireCaretUpdate)2695HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseClicked, fireMouseClicked)2696HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseEntered, fireMouseEntered)2697HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseExited, fireMouseExited)2698HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mousePressed, fireMousePressed)2699HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseReleased, fireMouseReleased)2700HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuCanceled, fireMenuCanceled)2701HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuDeselected, fireMenuDeselected)2702HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuSelected, fireMenuSelected)2703HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuCanceled, firePopupMenuCanceled)2704HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuWillBecomeInvisible, firePopupMenuWillBecomeInvisible)2705HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuWillBecomeVisible, firePopupMenuWillBecomeVisible)27062707}270827092710