Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/windows/native/sun/bridge/JavaAccessBridge.cpp
32287 views
1
/*
2
* Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
/*
27
* A DLL which is loaded by Java applications to handle communication
28
* between Java VMs purposes of Accessbility.
29
*/
30
31
#include "AccessBridgeDebug.h"
32
#include "JavaAccessBridge.h"
33
#include "com_sun_java_accessibility_AccessBridge.h" // programatically generated by JNI
34
#include "accessBridgeResource.h"
35
#include "accessBridgeCallbacks.h"
36
#include "AccessBridgeMessages.h"
37
38
39
#include <windows.h>
40
#include <stdio.h>
41
42
// #ifdef JAWT_SUPPORT
43
#include <jawt.h>
44
#include <win32/jawt_md.h>
45
// #endif /* JAWT_SUPPORT */
46
47
JavaAccessBridge *theJavaAccessBridge;
48
HWND theDialogWindow;
49
50
// re-entrance lock for receiving memory messages
51
CRITICAL_SECTION receiveMemoryIPCLock;
52
53
54
// unique broadcast msg. IDs gotten dymanically
55
extern UINT theFromJavaHelloMsgID;
56
extern UINT theFromWindowsHelloMsgID;
57
58
59
// ---------------------------------------------------------------------------
60
61
extern "C" {
62
/**
63
* DllMain - where Windows executables will load/unload us
64
*
65
*/
66
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved) {
67
68
switch (fdwReason) {
69
case DLL_PROCESS_ATTACH:
70
InitializeCriticalSection(&receiveMemoryIPCLock);
71
theJavaAccessBridge = new JavaAccessBridge(hinstDll);
72
break;
73
74
case DLL_PROCESS_DETACH: // A Windows executable unloaded us
75
if (theJavaAccessBridge != (JavaAccessBridge *) 0) {
76
delete theJavaAccessBridge;
77
DeleteCriticalSection(&receiveMemoryIPCLock);
78
}
79
break;
80
}
81
return TRUE;
82
}
83
84
/**
85
* Open a native window (and init the wrappers we'll be using)
86
*
87
*/
88
JNIEXPORT void JNICALL
89
Java_com_sun_java_accessibility_AccessBridge_runDLL(JNIEnv *env, jobject obj) {
90
PrintDebugString("[INFO]: JavaAccessBridge.DLL runDLL() called");
91
theJavaAccessBridge->javaRun(env, obj);
92
}
93
94
/**
95
* Our window proc
96
*
97
*/
98
BOOL APIENTRY AccessBridgeDialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
99
int command;
100
COPYDATASTRUCT *sentToUs;
101
char *package;
102
103
switch (message) {
104
case WM_INITDIALOG:
105
PrintDebugString("[INFO]: In AccessBridgeDialog - Initializing");
106
break;
107
108
case WM_COMMAND:
109
command = LOWORD (wParam);
110
PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COMMAND, command: %X", command);
111
break;
112
113
// call from Java with data for us to deliver
114
case WM_COPYDATA:
115
if (theDialogWindow == (HWND) wParam) {
116
PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COPYDATA from ourselves");
117
} else {
118
PrintDebugString("[INFO]: In AccessBridgeDialog - Got WM_COPYDATA from HWND %p", wParam);
119
sentToUs = (COPYDATASTRUCT *) lParam;
120
package = (char *) sentToUs->lpData;
121
theJavaAccessBridge->processPackage(package, sentToUs->cbData);
122
}
123
break;
124
125
// call from Java with data for us retrieve from memory mapped file and deliver
126
case AB_MESSAGE_WAITING:
127
// wParam == sourceHwnd
128
// lParam == buffer size in shared memory
129
if (theDialogWindow == (HWND) wParam) {
130
PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_MESSAGE_WAITING from ourselves");
131
} else {
132
PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_MESSAGE_WAITING from HWND %p", wParam);
133
LRESULT returnVal = theJavaAccessBridge->receiveMemoryPackage((HWND) wParam, (long) lParam);
134
}
135
break;
136
137
// a JavaAccessBridge DLL is going away
138
case AB_DLL_GOING_AWAY:
139
PrintDebugString("[INFO]: In AccessBridgeDialog - Got AB_DLL_GOING_AWAY message");
140
theJavaAccessBridge->WindowsATDestroyed((HWND) wParam);
141
break;
142
143
default:
144
// the Windows AT is saying "hi"!
145
// wParam == sourceHwnc; lParam unused
146
if (message == theFromWindowsHelloMsgID) {
147
// A new Windows AT just said "hi";
148
// say "hi" back so it can mate up with us
149
// otherwise don't do anything (e.g. don't set up data structures yet)
150
PrintDebugString("[INFO]: In AccessBridgeDialog - Got theFromWindowsHelloMsgID message");
151
theJavaAccessBridge->postHelloToWindowsDLLMsg((HWND) wParam);
152
}
153
}
154
return FALSE;
155
}
156
157
}
158
159
160
// -----------------------------
161
162
163
/**
164
* Initialize the JavaAccessBridge
165
*
166
*/
167
JavaAccessBridge::JavaAccessBridge(HINSTANCE hInstance) {
168
windowsInstance = hInstance;
169
ATs = (AccessBridgeATInstance *) 0;
170
initializeFileLogger("java_access_bridge");
171
initBroadcastMessageIDs(); // get the unique to us broadcast msg. IDs
172
}
173
174
extern DWORD JavaBridgeThreadId;
175
176
/**
177
* Destroy the JavaAccessBridge
178
*
179
*/
180
JavaAccessBridge::~JavaAccessBridge() {
181
// inform all other AccessBridges that we're going away
182
183
PrintDebugString("[INFO]: in JavaAccessBridge::~JavaAccessBridge()");
184
185
// Send a shutdown message for those applications like StarOffice that do
186
// send a shutdown message themselves.
187
javaShutdown(NULL, 0);
188
189
AccessBridgeATInstance *current = ATs;
190
while (current != (AccessBridgeATInstance *) 0) {
191
PrintDebugString("[INFO]: telling %p we're going away", current->winAccessBridgeWindow);
192
SendMessage(current->winAccessBridgeWindow,
193
AB_DLL_GOING_AWAY, (WPARAM) dialogWindow, (LPARAM) 0);
194
current = current->nextATInstance;
195
}
196
197
PrintDebugString("[INFO]: finished telling ATs about our demise");
198
199
if(JavaBridgeThreadId)
200
{
201
PostThreadMessage(JavaBridgeThreadId,WM_USER+1,0,0);
202
Sleep(100);
203
}
204
205
delete ATs;
206
207
PrintDebugString("[INFO]: finished deleting ATs");
208
PrintDebugString("[INFO]: GOODBYE CRUEL WORLD...");
209
finalizeFileLogger();
210
}
211
212
213
void
214
JavaAccessBridge::javaRun(JNIEnv *env, jobject obj) {
215
MSG msg;
216
217
PrintDebugString("[INFO]: JavaAccessBridge::javaRun(%p, %p) called", env, obj);
218
219
if (env->GetJavaVM(&javaVM) != 0) {
220
return; // huh!?!?!
221
}
222
PrintDebugString("[INFO]: -> javaVM = %p", javaVM);
223
224
if (javaVM->AttachCurrentThread((void **) &windowsThreadJNIEnv, NULL) != 0) {
225
return; // huh!?!?!
226
}
227
PrintDebugString("[INFO]: -> windowsThreadJNIEnv = %p", windowsThreadJNIEnv);
228
229
javaThreadABObject = env->NewGlobalRef(obj);
230
windowsThreadABObject = windowsThreadJNIEnv->NewGlobalRef(obj);
231
232
// initialize the Java thread AccessBridge entry points
233
javaThreadEntryPoints = new AccessBridgeJavaEntryPoints(env, javaThreadABObject);
234
if (javaThreadEntryPoints->BuildJavaEntryPoints() == FALSE) {
235
return; // couldn't build our entry points; let's get out of here!
236
}
237
PrintDebugString("[INFO]: all Java thread entry points successfully found.");
238
239
// initialize the Windows thread AccessBridge entry points
240
windowsThreadEntryPoints = new AccessBridgeJavaEntryPoints(windowsThreadJNIEnv,
241
windowsThreadABObject);
242
if (windowsThreadEntryPoints->BuildJavaEntryPoints() == FALSE) {
243
return; // couldn't build our entry points; let's get out of here!
244
}
245
PrintDebugString("[INFO]: all Windows thread entry points successfully found.");
246
247
248
// open our window
249
if (initWindow() == TRUE) {
250
PrintDebugString("[INFO]: Window created. HWND = %p", dialogWindow);
251
252
// post a broadcast msg.; let other AccessBridge DLLs know we exist
253
postHelloToWindowsDLLMsg(HWND_BROADCAST);
254
255
// do that message loop thing
256
while (GetMessage(&msg, NULL, 0, 0)) {
257
TranslateMessage(&msg);
258
DispatchMessage(&msg);
259
}
260
} else {
261
PrintDebugString("[ERROR]: FAILED TO CREATE WINDOW!!!");
262
}
263
264
javaVM->DetachCurrentThread();
265
}
266
267
/**
268
* Bring up our window; make a connection to the rest of the world
269
*
270
*/
271
BOOL
272
JavaAccessBridge::initWindow() {
273
theDialogWindow = CreateDialog(windowsInstance,
274
"ACCESSBRIDGESTATUSWINDOW", NULL,
275
(DLGPROC) AccessBridgeDialogProc);
276
277
// If window could not be created, return "failure".
278
if (!theDialogWindow)
279
return FALSE;
280
281
dialogWindow = theDialogWindow;
282
283
// Make the window visible, update its client area, & return "success".
284
// DEBUG_CODE(ShowWindow (theDialogWindow, SW_SHOWNORMAL));
285
// DEBUG_CODE(UpdateWindow (theDialogWindow));
286
287
return TRUE;
288
}
289
290
291
292
// -----------------------
293
294
295
/**
296
* postHelloToWindowsDLLMsg
297
* - PostMessage(theFromJavaHelloMsgID) to let one or
298
* all WindowDLLs we're here and have a vmID
299
*
300
* destHwnd is either a single hwnd or HWND_BROADCAST
301
* (former if a reply, latter if we're just born)
302
* wParam is our HWND
303
* lParam is our vmID
304
*
305
*/
306
void
307
JavaAccessBridge::postHelloToWindowsDLLMsg(HWND destHwnd) {
308
PrintDebugString("[INFO]: In JavaAccessBridge::postHelloToWindowsDLLMsg");
309
PrintDebugString("[INFO]: calling PostMessage(%p, %X, %p, %p)",
310
destHwnd, theFromJavaHelloMsgID, dialogWindow, dialogWindow);
311
PostMessage(destHwnd, theFromJavaHelloMsgID, (WPARAM) dialogWindow, (LPARAM) dialogWindow);
312
}
313
314
315
// -----------------------
316
317
/**
318
* sendPackage - uses SendMessage(WM_COPYDATA) to do IPC messaging
319
* with the Java AccessBridge DLL
320
*
321
*/
322
void
323
JavaAccessBridge::sendPackage(char *buffer, int bufsize, HWND destHwnd) {
324
COPYDATASTRUCT toCopy;
325
toCopy.dwData = 0; // 32-bits we could use for something...
326
toCopy.cbData = bufsize;
327
toCopy.lpData = buffer;
328
329
SendMessage(destHwnd, WM_COPYDATA, (WPARAM) dialogWindow, (LPARAM) &toCopy);
330
}
331
332
333
/**
334
* sendJavaEventPackage - walk through ATs, sending event messages to 'em
335
*
336
*/
337
void
338
JavaAccessBridge::sendJavaEventPackage(char *buffer, int bufsize, long type) {
339
340
PrintDebugString("[INFO]: JavaAccessBridge::sendJavaEventPackage(), type = %X", type);
341
342
if (ATs == (AccessBridgeATInstance *) 0) {
343
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
344
}
345
346
AccessBridgeATInstance *ati = ATs;
347
while (ati != (AccessBridgeATInstance *) 0) {
348
ati->sendJavaEventPackage(buffer, bufsize, type);
349
ati = ati->nextATInstance;
350
}
351
}
352
353
/**
354
* sendAccessibilityEventPackage - walk through ATs, sending event messages to 'em
355
*
356
*/
357
void
358
JavaAccessBridge::sendAccessibilityEventPackage(char *buffer, int bufsize, long type) {
359
360
PrintDebugString("[INFO]: JavaAccessBridge::sendAccessibilityEventPackage(), type = %X", type);
361
362
if (ATs == (AccessBridgeATInstance *) 0) {
363
PrintDebugString("[ERROR] ATs == 0! (shouldn't happen here!)");
364
}
365
366
AccessBridgeATInstance *ati = ATs;
367
while (ati != (AccessBridgeATInstance *) 0) {
368
ati->sendAccessibilityEventPackage(buffer, bufsize, type);
369
ati = ati->nextATInstance;
370
}
371
}
372
373
374
375
376
/**
377
* receiveMemoryPackage - uses Memory-Mapped files to do IPC messaging
378
* with the Java AccessBridge DLL, receiving the
379
* message from Java AccessBridge DLL by reading the
380
* contents of the shared memory mapped file that
381
* is used for Java-initiated messages
382
*
383
*/
384
BOOL
385
JavaAccessBridge::receiveMemoryPackage(HWND srcWindow, long bufsize) {
386
char *IPCview;
387
388
PrintDebugString("[INFO]: JavaAccessBridge::receiveMemoryPackage(%p, %d)", srcWindow, bufsize);
389
390
// look-up the appropriate IPCview based on the srcHWND of the Windows AccessBridge DLL
391
if (ATs == (AccessBridgeATInstance *) 0) {
392
PrintDebugString("[ERROR]: - ATs == 0 (shouldn't happen in receiveMemoryPackage()!");
393
return FALSE;
394
}
395
AccessBridgeATInstance *ati = ATs->findABATInstanceFromATHWND(srcWindow);
396
if (ati != (AccessBridgeATInstance *) 0) {
397
IPCview = (char *) ati->memoryMappedView;
398
399
// wait for the lock if someone else has it (re-entrancy)
400
EnterCriticalSection(&receiveMemoryIPCLock);
401
{
402
// set byte at end of buffer to indicate to caller that we have reached this point
403
IPCview[bufsize] = 1;
404
405
// process the package
406
processPackage(IPCview, bufsize);
407
}
408
// release re-entrance lock
409
LeaveCriticalSection(&receiveMemoryIPCLock);
410
411
return TRUE;
412
413
} else {
414
//DEBUG_CODE(AppendToCallInfo("ERROR receiving memory package: couldn't find srcWindow"));
415
PrintDebugString("[ERROR]: receiving memory package: couldn't find srcWindow");
416
return FALSE;
417
}
418
}
419
420
/**
421
* processPackage - processes the output of SendMessage(WM_COPYDATA)
422
* to do IPC messaging with the Windows AccessBridge DLL
423
*
424
*/
425
LRESULT
426
JavaAccessBridge::processPackage(char *buffer, int bufsize) {
427
PrintDebugString("[INFO]: Processing package sent from Windows, bufsize = %d:", bufsize);
428
429
PackageType *type = (PackageType *) buffer;
430
LRESULT returnVal = 0;
431
PrintDebugString("[INFO]: PackageType = %X:", *type);
432
jobject rAC;
433
434
switch (*type) {
435
436
437
case cMemoryMappedFileCreatedPackage:
438
// Windows is telling us it created a memory mapped file for us to use
439
// in repsonding to various information querying packages (see below)
440
PrintDebugString("[INFO]: type == cMemoryMappedFileCreatedPackage");
441
if (bufsize == (sizeof(PackageType) + sizeof(MemoryMappedFileCreatedPackage))) {
442
MemoryMappedFileCreatedPackage *pkg =
443
(MemoryMappedFileCreatedPackage *) (buffer + sizeof(PackageType));
444
returnVal = MemoryMappedFileCreated((HWND)ABLongToHandle(pkg->bridgeWindow), pkg->filename);
445
} else {
446
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
447
bufsize, sizeof(PackageType) + sizeof(MemoryMappedFileCreatedPackage));
448
}
449
break;
450
451
// ------------ information querying packages ------------------
452
453
case cReleaseJavaObjectPackage:
454
PrintDebugString("[INFO]: type == cReleaseJavaObjectPackage");
455
if (bufsize == (sizeof(PackageType) + sizeof(ReleaseJavaObjectPackage))) {
456
ReleaseJavaObjectPackage *pkg =
457
(ReleaseJavaObjectPackage *) (buffer + sizeof(PackageType));
458
releaseJavaObject((jobject)pkg->object);
459
} else {
460
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
461
bufsize, sizeof(PackageType) + sizeof(ReleaseJavaObjectPackage));
462
}
463
break;
464
465
case cGetAccessBridgeVersionPackage:
466
PrintDebugString("[INFO]: type == cGetAccessBridgeVersionPackage");
467
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessBridgeVersionPackage))) {
468
GetAccessBridgeVersionPackage *pkg =
469
(GetAccessBridgeVersionPackage *) (buffer + sizeof(PackageType));
470
windowsThreadEntryPoints->getVersionInfo(&(pkg->rVersionInfo));
471
} else {
472
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
473
bufsize, sizeof(PackageType) + sizeof(GetAccessBridgeVersionPackage));
474
}
475
break;
476
477
case cIsJavaWindowPackage:
478
PrintDebugString("[INFO]: type == cIsJavaWindowPackage");
479
if (bufsize == (sizeof(PackageType) + sizeof(IsJavaWindowPackage))) {
480
IsJavaWindowPackage *pkg =
481
(IsJavaWindowPackage *) (buffer + sizeof(PackageType));
482
pkg->rResult =
483
windowsThreadEntryPoints->isJavaWindow(pkg->window);
484
PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);
485
} else {
486
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
487
bufsize, sizeof(PackageType) + sizeof(IsJavaWindowPackage));
488
}
489
break;
490
491
case cIsSameObjectPackage:
492
PrintDebugString("[INFO]: type == cIsSameObjectPackage");
493
if (bufsize == (sizeof(PackageType) + sizeof(IsSameObjectPackage))) {
494
IsSameObjectPackage *pkg =
495
(IsSameObjectPackage *) (buffer + sizeof(PackageType));
496
pkg->rResult =
497
windowsThreadEntryPoints->isSameObject((jobject)pkg->obj1, (jobject)pkg->obj2);
498
PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);
499
} else {
500
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
501
bufsize, sizeof(PackageType) + sizeof(IsSameObjectPackage));
502
}
503
break;
504
505
506
case cGetAccessibleContextFromHWNDPackage:
507
PrintDebugString("[INFO]: type == cGetAccessibleContextFromHWNDPackage");
508
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextFromHWNDPackage))) {
509
GetAccessibleContextFromHWNDPackage *pkg =
510
(GetAccessibleContextFromHWNDPackage *) (buffer + sizeof(PackageType));
511
rAC = windowsThreadEntryPoints->getAccessibleContextFromHWND(pkg->window);
512
pkg->rAccessibleContext = (JOBJECT64)rAC;
513
pkg->rVMID = HandleToLong(dialogWindow);
514
PrintDebugString("[INFO]: -> returning AC = %p, vmID = %X", rAC, pkg->rVMID);
515
} else {
516
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
517
bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextFromHWNDPackage));
518
}
519
break;
520
521
522
case cGetHWNDFromAccessibleContextPackage:
523
PrintDebugString("[INFO]: type == cGetHWNDFromAccessibleContextPackage");
524
if (bufsize == (sizeof(PackageType) + sizeof(GetHWNDFromAccessibleContextPackage))) {
525
GetHWNDFromAccessibleContextPackage *pkg =
526
(GetHWNDFromAccessibleContextPackage *) (buffer + sizeof(PackageType));
527
pkg->rHWND =
528
ABHandleToLong( windowsThreadEntryPoints->getHWNDFromAccessibleContext((jobject)pkg->accessibleContext) );
529
PrintDebugString("[INFO]: -> returning HWND = %p", pkg->rHWND);
530
} else {
531
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
532
bufsize, sizeof(PackageType) + sizeof(GetHWNDFromAccessibleContextPackage));
533
}
534
break;
535
536
537
/* ===== utility methods ===== */
538
539
case cSetTextContentsPackage:
540
PrintDebugString("[INFO]: type == cSetTextContentsPackage");
541
if (bufsize == (sizeof(PackageType) + sizeof(SetTextContentsPackage))) {
542
SetTextContentsPackage *pkg =
543
(SetTextContentsPackage *) (buffer + sizeof(PackageType));
544
pkg->rResult =
545
windowsThreadEntryPoints->setTextContents((jobject)pkg->accessibleContext, pkg->text);
546
PrintDebugString("[INFO]: -> returning result = %d", pkg->rResult);
547
} else {
548
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
549
bufsize, sizeof(PackageType) + sizeof(SetTextContentsPackage));
550
}
551
break;
552
553
case cGetParentWithRolePackage:
554
if (bufsize == (sizeof(PackageType) + sizeof(GetParentWithRolePackage))) {
555
GetParentWithRolePackage *pkg =
556
(GetParentWithRolePackage *) (buffer + sizeof(PackageType));
557
rAC = windowsThreadEntryPoints->getParentWithRole((jobject)pkg->accessibleContext, pkg->role);
558
pkg->rAccessibleContext = (JOBJECT64)rAC;
559
PrintDebugString("[INFO]: type == cGetParentWithRolePackage\n"\
560
" pkg->vmID: %X"\
561
" pkg->accessibleContext: %p"\
562
" pkg->role: %ls"\
563
" -> returning rAccessibleContext = %p"\
564
, pkg->vmID, (jobject)pkg->accessibleContext, pkg->role, rAC);
565
} else {
566
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
567
bufsize, sizeof(PackageType) + sizeof(GetParentWithRolePackage));
568
}
569
break;
570
571
case cGetTopLevelObjectPackage:
572
PrintDebugString("[INFO]: type == cGetTopLevelObjectPackage");
573
if (bufsize == (sizeof(PackageType) + sizeof(GetTopLevelObjectPackage))) {
574
GetTopLevelObjectPackage *pkg =
575
(GetTopLevelObjectPackage *) (buffer + sizeof(PackageType));
576
rAC = windowsThreadEntryPoints->getTopLevelObject((jobject)pkg->accessibleContext);
577
pkg->rAccessibleContext = (JOBJECT64)rAC;
578
PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);
579
} else {
580
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
581
bufsize, sizeof(PackageType) + sizeof(GetTopLevelObjectPackage));
582
}
583
break;
584
585
case cGetParentWithRoleElseRootPackage:
586
PrintDebugString("[INFO]: type == cGetParentWithRoleElseRootPackage");
587
if (bufsize == (sizeof(PackageType) + sizeof(GetParentWithRoleElseRootPackage))) {
588
GetParentWithRoleElseRootPackage *pkg =
589
(GetParentWithRoleElseRootPackage *) (buffer + sizeof(PackageType));
590
rAC = windowsThreadEntryPoints->getParentWithRoleElseRoot((jobject)pkg->accessibleContext, pkg->role);
591
pkg->rAccessibleContext = (JOBJECT64)rAC;
592
PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);
593
} else {
594
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
595
bufsize, sizeof(PackageType) + sizeof(GetParentWithRoleElseRootPackage));
596
}
597
break;
598
599
case cGetObjectDepthPackage:
600
PrintDebugString("[INFO]: type == cGetObjectDepthPackage");
601
if (bufsize == (sizeof(PackageType) + sizeof(GetObjectDepthPackage))) {
602
GetObjectDepthPackage *pkg =
603
(GetObjectDepthPackage *) (buffer + sizeof(PackageType));
604
pkg->rResult =
605
windowsThreadEntryPoints->getObjectDepth((jobject)pkg->accessibleContext);
606
PrintDebugString("[INFO]: -> returning rResult = %d", pkg->rResult);
607
} else {
608
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
609
bufsize, sizeof(PackageType) + sizeof(GetObjectDepthPackage));
610
}
611
break;
612
613
case cGetActiveDescendentPackage:
614
PrintDebugString("[INFO]: type == cGetActiveDescendentPackage");
615
if (bufsize == (sizeof(PackageType) + sizeof(GetActiveDescendentPackage))) {
616
GetActiveDescendentPackage *pkg =
617
(GetActiveDescendentPackage *) (buffer + sizeof(PackageType));
618
rAC = windowsThreadEntryPoints->getActiveDescendent((jobject)pkg->accessibleContext);
619
pkg->rAccessibleContext = (JOBJECT64)rAC;
620
PrintDebugString("[INFO]: -> returning rAccessibleContext = %p", rAC);
621
} else {
622
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
623
bufsize, sizeof(PackageType) + sizeof(GetActiveDescendentPackage));
624
}
625
break;
626
627
case cGetAccessibleContextAtPackage:
628
PrintDebugString("[INFO]: type == cGetAccessibleContextAtPackage");
629
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextAtPackage))) {
630
GetAccessibleContextAtPackage *pkg =
631
(GetAccessibleContextAtPackage *) (buffer + sizeof(PackageType));
632
pkg->rAccessibleContext = (JOBJECT64)
633
windowsThreadEntryPoints->getAccessibleContextAt(pkg->x, pkg->y,
634
(jobject)pkg->AccessibleContext);
635
} else {
636
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
637
bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextAtPackage));
638
}
639
break;
640
641
case cGetAccessibleContextWithFocusPackage:
642
PrintDebugString("[INFO]: type == cGetAccessibleContextWithFocusPackage");
643
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextWithFocusPackage))) {
644
GetAccessibleContextWithFocusPackage *pkg =
645
(GetAccessibleContextWithFocusPackage *) (buffer + sizeof(PackageType));
646
pkg->rAccessibleContext = (JOBJECT64)
647
windowsThreadEntryPoints->getAccessibleContextWithFocus();
648
pkg->rVMID = HandleToLong(dialogWindow);
649
} else {
650
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
651
bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextWithFocusPackage));
652
}
653
break;
654
655
case cGetAccessibleContextInfoPackage:
656
PrintDebugString("[INFO]: type == cGetAccessibleContextInfoPackage");
657
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleContextInfoPackage))) {
658
GetAccessibleContextInfoPackage *pkg =
659
(GetAccessibleContextInfoPackage *) (buffer + sizeof(PackageType));
660
windowsThreadEntryPoints->getAccessibleContextInfo(
661
(jobject)pkg->AccessibleContext, &(pkg->rAccessibleContextInfo));
662
} else {
663
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
664
bufsize, sizeof(PackageType) + sizeof(GetAccessibleContextInfoPackage));
665
}
666
break;
667
668
case cGetAccessibleChildFromContextPackage:
669
PrintDebugString("[INFO]: type == cGetAccessibleChildFromContextPackage");
670
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleChildFromContextPackage))) {
671
GetAccessibleChildFromContextPackage *pkg =
672
(GetAccessibleChildFromContextPackage *) (buffer + sizeof(PackageType));
673
pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleChildFromContext(
674
(jobject)pkg->AccessibleContext, pkg->childIndex);
675
} else {
676
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
677
bufsize, sizeof(PackageType) + sizeof(GetAccessibleChildFromContextPackage));
678
}
679
break;
680
681
case cGetAccessibleParentFromContextPackage:
682
PrintDebugString("[INFO]: type == cGetAccessibleParentFromContextPackage");
683
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleParentFromContextPackage))) {
684
GetAccessibleParentFromContextPackage *pkg =
685
(GetAccessibleParentFromContextPackage *) (buffer + sizeof(PackageType));
686
pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleParentFromContext(
687
(jobject)pkg->AccessibleContext);
688
} else {
689
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
690
bufsize, sizeof(PackageType) + sizeof(GetAccessibleParentFromContextPackage));
691
}
692
break;
693
694
// ------------ begin AccessibleTable packages ------------------
695
696
case cGetAccessibleTableInfoPackage:
697
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableInfoPackage");
698
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableInfoPackage))) {
699
GetAccessibleTableInfoPackage *pkg =
700
(GetAccessibleTableInfoPackage *) (buffer + sizeof(PackageType));
701
windowsThreadEntryPoints->getAccessibleTableInfo((jobject)pkg->accessibleContext,
702
&(pkg->rTableInfo));
703
PrintDebugString("[INFO]: ##### processing succeeded");
704
} else {
705
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
706
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableInfoPackage));
707
}
708
break;
709
710
case cGetAccessibleTableCellInfoPackage:
711
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableCellInfoPackage");
712
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableCellInfoPackage))) {
713
GetAccessibleTableCellInfoPackage *pkg =
714
(GetAccessibleTableCellInfoPackage *) (buffer + sizeof(PackageType));
715
windowsThreadEntryPoints->getAccessibleTableCellInfo((jobject)pkg->accessibleTable, pkg->row,
716
pkg->column, &(pkg->rTableCellInfo));
717
PrintDebugString("[INFO]: ##### processing succeeded");
718
} else {
719
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
720
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableCellInfoPackage));
721
}
722
break;
723
724
case cGetAccessibleTableRowHeaderPackage:
725
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowHeaderPackage");
726
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowHeaderPackage))) {
727
GetAccessibleTableRowHeaderPackage *pkg =
728
(GetAccessibleTableRowHeaderPackage *) (buffer + sizeof(PackageType));
729
windowsThreadEntryPoints->getAccessibleTableRowHeader((jobject)pkg->accessibleContext,
730
&(pkg->rTableInfo));
731
PrintDebugString("[INFO]: ##### processing succeeded");
732
} else {
733
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
734
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowHeaderPackage));
735
}
736
break;
737
738
case cGetAccessibleTableColumnHeaderPackage:
739
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnHeaderPackage");
740
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnHeaderPackage))) {
741
GetAccessibleTableColumnHeaderPackage *pkg =
742
(GetAccessibleTableColumnHeaderPackage *) (buffer + sizeof(PackageType));
743
windowsThreadEntryPoints->getAccessibleTableColumnHeader((jobject)pkg->accessibleContext,
744
&(pkg->rTableInfo));
745
PrintDebugString("[INFO]: ##### processing succeeded");
746
} else {
747
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
748
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnHeaderPackage));
749
}
750
break;
751
752
753
case cGetAccessibleTableRowDescriptionPackage:
754
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowDescriptionPackage");
755
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowDescriptionPackage))) {
756
GetAccessibleTableRowDescriptionPackage *pkg =
757
(GetAccessibleTableRowDescriptionPackage *) (buffer + sizeof(PackageType));
758
pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleTableRowDescription(
759
(jobject)pkg->accessibleContext, pkg->row);
760
PrintDebugString("[INFO]: ##### processing succeeded");
761
} else {
762
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
763
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowDescriptionPackage));
764
}
765
break;
766
767
case cGetAccessibleTableColumnDescriptionPackage:
768
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnDescriptionPackage");
769
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnDescriptionPackage))) {
770
GetAccessibleTableColumnDescriptionPackage *pkg =
771
(GetAccessibleTableColumnDescriptionPackage *) (buffer + sizeof(PackageType));
772
pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleTableColumnDescription(
773
(jobject)pkg->accessibleContext, pkg->column);
774
PrintDebugString("[INFO]: ##### processing succeeded");
775
} else {
776
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
777
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnDescriptionPackage));
778
}
779
break;
780
781
case cGetAccessibleTableColumnSelectionCountPackage:
782
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnSelectionCountPackage");
783
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionCountPackage))) {
784
GetAccessibleTableColumnSelectionCountPackage *pkg =
785
(GetAccessibleTableColumnSelectionCountPackage *) (buffer + sizeof(PackageType));
786
pkg->rCount = windowsThreadEntryPoints->getAccessibleTableColumnSelectionCount(
787
(jobject)pkg->accessibleTable);
788
PrintDebugString("[INFO]: ##### processing succeeded");
789
} else {
790
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
791
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionCountPackage));
792
}
793
break;
794
795
case cGetAccessibleTableRowSelectionCountPackage:
796
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowSelectionCountPackage");
797
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionCountPackage))) {
798
GetAccessibleTableRowSelectionCountPackage *pkg =
799
(GetAccessibleTableRowSelectionCountPackage *) (buffer + sizeof(PackageType));
800
801
pkg->rCount = windowsThreadEntryPoints->getAccessibleTableRowSelectionCount(
802
(jobject)pkg->accessibleTable);
803
804
PrintDebugString("[INFO]: ##### processing succeeded");
805
} else {
806
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
807
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionCountPackage));
808
}
809
break;
810
811
case cIsAccessibleTableRowSelectedPackage:
812
PrintDebugString("[INFO]: ##### type == cIsAccessibleTableRowSelectedPackage");
813
if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleTableRowSelectedPackage))) {
814
IsAccessibleTableRowSelectedPackage *pkg =
815
(IsAccessibleTableRowSelectedPackage *) (buffer + sizeof(PackageType));
816
pkg->rResult = windowsThreadEntryPoints->isAccessibleTableRowSelected(
817
(jobject)pkg->accessibleTable, pkg->row);
818
PrintDebugString("[INFO]: ##### processing succeeded");
819
} else {
820
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
821
bufsize, sizeof(PackageType) + sizeof(IsAccessibleTableRowSelectedPackage));
822
}
823
break;
824
825
case cIsAccessibleTableColumnSelectedPackage:
826
PrintDebugString("[INFO]: ##### type == cIsAccessibleTableColumnSelectedPackage");
827
if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleTableColumnSelectedPackage))) {
828
IsAccessibleTableColumnSelectedPackage *pkg =
829
(IsAccessibleTableColumnSelectedPackage *) (buffer + sizeof(PackageType));
830
pkg->rResult = windowsThreadEntryPoints->isAccessibleTableColumnSelected(
831
(jobject)pkg->accessibleTable, pkg->column);
832
PrintDebugString("[INFO]: ##### processing succeeded");
833
} else {
834
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
835
bufsize, sizeof(PackageType) + sizeof(IsAccessibleTableColumnSelectedPackage));
836
}
837
break;
838
839
case cGetAccessibleTableColumnSelectionsPackage:
840
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnSelectionsPackage");
841
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionsPackage))) {
842
GetAccessibleTableColumnSelectionsPackage *pkg =
843
(GetAccessibleTableColumnSelectionsPackage *) (buffer + sizeof(PackageType));
844
PrintDebugString("[INFO]: ##### cGetAccessibleTableColumnSelectionsPackage count=%d", pkg->count);
845
windowsThreadEntryPoints->getAccessibleTableColumnSelections(
846
(jobject)pkg->accessibleTable, pkg->count, pkg->rSelections);
847
848
for (int i = 0; i < pkg->count; i++) {
849
PrintDebugString("[INFO]: ##### cGetAccessibleTableColumnSelectionsPackage(%d)=%d", i, pkg->rSelections[i]);
850
}
851
852
PrintDebugString("[INFO]: ##### processing succeeded");
853
} else {
854
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
855
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnSelectionsPackage));
856
}
857
break;
858
859
860
case cGetAccessibleTableRowSelectionsPackage:
861
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowSelectionsPackage");
862
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionsPackage))) {
863
GetAccessibleTableRowSelectionsPackage *pkg =
864
(GetAccessibleTableRowSelectionsPackage *) (buffer + sizeof(PackageType));
865
windowsThreadEntryPoints->getAccessibleTableRowSelections(
866
(jobject)pkg->accessibleTable, pkg->count, pkg->rSelections);
867
PrintDebugString("[INFO]: ##### processing succeeded");
868
} else {
869
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
870
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowSelectionsPackage));
871
}
872
break;
873
874
case cGetAccessibleTableRowPackage:
875
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableRowPackage");
876
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableRowPackage))) {
877
GetAccessibleTableRowPackage *pkg =
878
(GetAccessibleTableRowPackage *) (buffer + sizeof(PackageType));
879
pkg->rRow = windowsThreadEntryPoints->getAccessibleTableRow(
880
(jobject)pkg->accessibleTable, pkg->index);
881
PrintDebugString("[INFO]: ##### processing succeeded");
882
} else {
883
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
884
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableRowPackage));
885
}
886
break;
887
888
case cGetAccessibleTableColumnPackage:
889
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableColumnPackage");
890
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableColumnPackage))) {
891
GetAccessibleTableColumnPackage *pkg =
892
(GetAccessibleTableColumnPackage *) (buffer + sizeof(PackageType));
893
pkg->rColumn = windowsThreadEntryPoints->getAccessibleTableColumn(
894
(jobject)pkg->accessibleTable, pkg->index);
895
PrintDebugString("[INFO]: ##### processing succeeded");
896
} else {
897
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
898
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableColumnPackage));
899
}
900
break;
901
902
case cGetAccessibleTableIndexPackage:
903
PrintDebugString("[INFO]: ##### type == cGetAccessibleTableIndexPackage");
904
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTableIndexPackage))) {
905
GetAccessibleTableIndexPackage *pkg =
906
(GetAccessibleTableIndexPackage *) (buffer + sizeof(PackageType));
907
pkg->rIndex = windowsThreadEntryPoints->getAccessibleTableIndex(
908
(jobject)pkg->accessibleTable, pkg->row, pkg->column);
909
PrintDebugString("[INFO]: ##### processing succeeded");
910
} else {
911
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
912
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTableIndexPackage));
913
}
914
break;
915
916
// ------------ end AccessibleTable packages ------------------
917
918
919
// ------------ begin AccessibleRelationSet packages ------------------
920
921
case cGetAccessibleRelationSetPackage:
922
PrintDebugString("[INFO]: ##### type == cGetAccessibleRelationSetPackage");
923
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleRelationSetPackage))) {
924
GetAccessibleRelationSetPackage *pkg =
925
(GetAccessibleRelationSetPackage *) (buffer + sizeof(PackageType));
926
windowsThreadEntryPoints->getAccessibleRelationSet(
927
(jobject)pkg->accessibleContext, &(pkg->rAccessibleRelationSetInfo));
928
PrintDebugString("[INFO]: ##### processing succeeded");
929
} else {
930
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
931
bufsize, sizeof(PackageType) + sizeof(GetAccessibleRelationSetPackage));
932
}
933
break;
934
935
// ------------ end AccessibleRelationSet packages ------------------
936
937
// ------------ begin AccessibleHypertext packages ------------------
938
939
case cGetAccessibleHypertextPackage:
940
PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextPackage");
941
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextPackage))) {
942
GetAccessibleHypertextPackage *pkg =
943
(GetAccessibleHypertextPackage *) (buffer + sizeof(PackageType));
944
windowsThreadEntryPoints->getAccessibleHypertext(
945
(jobject)pkg->accessibleContext, &(pkg->rAccessibleHypertextInfo));
946
PrintDebugString("[INFO]: ##### processing succeeded");
947
} else {
948
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
949
bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextPackage));
950
}
951
break;
952
953
case cActivateAccessibleHyperlinkPackage:
954
PrintDebugString("[INFO]: ##### type == cActivateAccessibleHyperlinkPackage");
955
if (bufsize == (sizeof(PackageType) + sizeof(ActivateAccessibleHyperlinkPackage))) {
956
ActivateAccessibleHyperlinkPackage *pkg =
957
(ActivateAccessibleHyperlinkPackage *) (buffer + sizeof(PackageType));
958
pkg->rResult = windowsThreadEntryPoints->activateAccessibleHyperlink(
959
(jobject)pkg->accessibleContext, (jobject)pkg->accessibleHyperlink);
960
PrintDebugString("[INFO]: ##### processing succeeded");
961
} else {
962
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
963
bufsize, sizeof(PackageType) + sizeof(ActivateAccessibleHyperlinkPackage));
964
}
965
break;
966
967
case cGetAccessibleHyperlinkCountPackage:
968
PrintDebugString("[INFO]: ##### type == cGetAccessibleHyperlinkCountPackage");
969
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHyperlinkCountPackage))) {
970
GetAccessibleHyperlinkCountPackage *pkg =
971
(GetAccessibleHyperlinkCountPackage *) (buffer + sizeof(PackageType));
972
pkg->rLinkCount = windowsThreadEntryPoints->getAccessibleHyperlinkCount(
973
(jobject)pkg->accessibleContext);
974
PrintDebugString("[INFO]: ##### processing succeeded: pkg->rLinkCount = %d", pkg->rLinkCount);
975
} else {
976
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
977
bufsize, sizeof(PackageType) + sizeof(GetAccessibleHyperlinkCountPackage));
978
}
979
break;
980
981
case cGetAccessibleHypertextExtPackage:
982
PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextExtPackage");
983
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextExtPackage))) {
984
GetAccessibleHypertextExtPackage *pkg =
985
(GetAccessibleHypertextExtPackage *) (buffer + sizeof(PackageType));
986
pkg->rSuccess = windowsThreadEntryPoints->getAccessibleHypertextExt(
987
(jobject)pkg->accessibleContext, pkg->startIndex, &(pkg->rAccessibleHypertextInfo));
988
PrintDebugString("[INFO]: ##### processing succeeded");
989
} else {
990
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
991
bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextExtPackage));
992
}
993
break;
994
995
case cGetAccessibleHypertextLinkIndexPackage:
996
PrintDebugString("[INFO]: ##### type == cGetAccessibleHypertextLinkIndexPackage");
997
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHypertextLinkIndexPackage))) {
998
GetAccessibleHypertextLinkIndexPackage *pkg =
999
(GetAccessibleHypertextLinkIndexPackage *) (buffer + sizeof(PackageType));
1000
pkg->rLinkIndex = windowsThreadEntryPoints->getAccessibleHypertextLinkIndex(
1001
(jobject)pkg->hypertext, pkg->charIndex);
1002
PrintDebugString("[INFO]: ##### processing succeeded");
1003
} else {
1004
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1005
bufsize, sizeof(PackageType) + sizeof(GetAccessibleHypertextLinkIndexPackage));
1006
}
1007
break;
1008
1009
case cGetAccessibleHyperlinkPackage:
1010
PrintDebugString("[INFO]: ##### type == cGetAccessibleHyperlinkPackage");
1011
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleHyperlinkPackage))) {
1012
GetAccessibleHyperlinkPackage *pkg =
1013
(GetAccessibleHyperlinkPackage *) (buffer + sizeof(PackageType));
1014
windowsThreadEntryPoints->getAccessibleHyperlink((jobject)pkg->hypertext, pkg->linkIndex,
1015
&(pkg->rAccessibleHyperlinkInfo));
1016
PrintDebugString("[INFO]: ##### processing succeeded");
1017
} else {
1018
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1019
bufsize, sizeof(PackageType) + sizeof(GetAccessibleHyperlinkPackage));
1020
}
1021
break;
1022
1023
// ------------ end AccessibleHypertext packages
1024
1025
// ------------ begin Accessible KeyBindings, Icons and Actions
1026
1027
case cGetAccessibleKeyBindingsPackage:
1028
PrintDebugString("[INFO]: ##### type == cGetAccessibleKeyBindingsPackage");
1029
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleKeyBindingsPackage))) {
1030
GetAccessibleKeyBindingsPackage *pkg =
1031
(GetAccessibleKeyBindingsPackage *) (buffer + sizeof(PackageType));
1032
windowsThreadEntryPoints->getAccessibleKeyBindings (
1033
(jobject)pkg->accessibleContext, &(pkg->rAccessibleKeyBindings));
1034
PrintDebugString("[INFO]: ##### processing succeeded");
1035
} else {
1036
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1037
bufsize, sizeof(PackageType) + sizeof(GetAccessibleKeyBindingsPackage));
1038
}
1039
break;
1040
1041
case cGetAccessibleIconsPackage:
1042
PrintDebugString("[INFO]: ##### type == cGetAccessibleIconsPackage");
1043
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleIconsPackage))) {
1044
GetAccessibleIconsPackage *pkg =
1045
(GetAccessibleIconsPackage *) (buffer + sizeof(PackageType));
1046
windowsThreadEntryPoints->getAccessibleIcons (
1047
(jobject)pkg->accessibleContext, &(pkg->rAccessibleIcons));
1048
PrintDebugString("[INFO]: ##### processing succeeded");
1049
} else {
1050
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1051
bufsize, sizeof(PackageType) + sizeof(GetAccessibleIconsPackage));
1052
}
1053
break;
1054
1055
1056
case cGetAccessibleActionsPackage:
1057
PrintDebugString("[INFO]: ##### type == cGetAccessibleActionsPackage");
1058
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleActionsPackage))) {
1059
GetAccessibleActionsPackage *pkg =
1060
(GetAccessibleActionsPackage *) (buffer + sizeof(PackageType));
1061
windowsThreadEntryPoints->getAccessibleActions (
1062
(jobject)pkg->accessibleContext, &(pkg->rAccessibleActions));
1063
PrintDebugString("[INFO]: ##### processing succeeded");
1064
} else {
1065
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1066
bufsize, sizeof(PackageType) + sizeof(GetAccessibleActionsPackage));
1067
}
1068
break;
1069
1070
case cDoAccessibleActionsPackage:
1071
PrintDebugString("[INFO]: ##### type == cDoAccessibleActionsPackage");
1072
if (bufsize == (sizeof(PackageType) + sizeof(DoAccessibleActionsPackage))) {
1073
DoAccessibleActionsPackage *pkg =
1074
(DoAccessibleActionsPackage *) (buffer + sizeof(PackageType));
1075
pkg->rResult =
1076
windowsThreadEntryPoints->doAccessibleActions((jobject)pkg->accessibleContext, &(pkg->actionsToDo),
1077
&(pkg->failure));
1078
PrintDebugString("[INFO]: ##### processing succeeded");
1079
} else {
1080
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1081
bufsize, sizeof(PackageType) + sizeof(DoAccessibleActionsPackage));
1082
}
1083
break;
1084
1085
// ------------ begin addtional methods for Teton
1086
1087
case cGetVirtualAccessibleNamePackage:
1088
PrintDebugString("[INFO]: ##### type == GetVirtualAccessibleNamePackage");
1089
if (bufsize == (sizeof(PackageType) + sizeof(GetVirtualAccessibleNamePackage))) {
1090
GetVirtualAccessibleNamePackage *pkg =
1091
(GetVirtualAccessibleNamePackage *) (buffer + sizeof(PackageType));
1092
windowsThreadEntryPoints->getVirtualAccessibleName ((const jobject)pkg->accessibleContext,
1093
pkg->rName,
1094
pkg->len);
1095
PrintDebugString("[INFO]: ##### processing succeeded");
1096
} else {
1097
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1098
bufsize, sizeof(PackageType) + sizeof(GetVirtualAccessibleNamePackage));
1099
}
1100
break;
1101
1102
case cRequestFocusPackage:
1103
PrintDebugString("[INFO]: ##### type == RequestFocusPackage");
1104
if (bufsize == (sizeof(PackageType) + sizeof(RequestFocusPackage))) {
1105
RequestFocusPackage *pkg =
1106
(RequestFocusPackage *) (buffer + sizeof(PackageType));
1107
windowsThreadEntryPoints->requestFocus (
1108
(jobject)pkg->accessibleContext);
1109
PrintDebugString("[INFO]: ##### processing succeeded");
1110
} else {
1111
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1112
bufsize, sizeof(PackageType) + sizeof(RequestFocusPackage));
1113
}
1114
break;
1115
1116
case cSelectTextRangePackage:
1117
PrintDebugString("[INFO]: ##### type == SelectTextRangePackage");
1118
if (bufsize == (sizeof(PackageType) + sizeof(SelectTextRangePackage))) {
1119
SelectTextRangePackage *pkg =
1120
(SelectTextRangePackage *) (buffer + sizeof(PackageType));
1121
windowsThreadEntryPoints->selectTextRange (
1122
(jobject)pkg->accessibleContext, pkg->startIndex, pkg->endIndex);
1123
PrintDebugString("[INFO]: ##### processing succeeded");
1124
} else {
1125
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1126
bufsize, sizeof(PackageType) + sizeof(SelectTextRangePackage));
1127
}
1128
break;
1129
1130
case cGetTextAttributesInRangePackage:
1131
PrintDebugString("[INFO]: ##### type == GetTextAttributesInRangePackage");
1132
if (bufsize == (sizeof(PackageType) + sizeof(GetTextAttributesInRangePackage))) {
1133
GetTextAttributesInRangePackage *pkg =
1134
(GetTextAttributesInRangePackage *) (buffer + sizeof(PackageType));
1135
windowsThreadEntryPoints->getTextAttributesInRange (
1136
(jobject)pkg->accessibleContext, pkg->startIndex, pkg->endIndex,
1137
(AccessibleTextAttributesInfo *)&(pkg->attributes),
1138
&(pkg->rLength));
1139
PrintDebugString("[INFO]: ##### processing succeeded");
1140
} else {
1141
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1142
bufsize, sizeof(PackageType) + sizeof(GetTextAttributesInRangePackage));
1143
}
1144
break;
1145
1146
1147
case cGetVisibleChildrenCountPackage:
1148
PrintDebugString("[INFO]: ##### type == GetVisibleChildrenCountPackage");
1149
if (bufsize == (sizeof(PackageType) + sizeof(GetVisibleChildrenCountPackage))) {
1150
GetVisibleChildrenCountPackage *pkg =
1151
(GetVisibleChildrenCountPackage *) (buffer + sizeof(PackageType));
1152
pkg->rChildrenCount = windowsThreadEntryPoints->getVisibleChildrenCount ((jobject)pkg->accessibleContext);
1153
1154
PrintDebugString("[INFO]: ##### processing succeeded");
1155
} else {
1156
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1157
bufsize, sizeof(PackageType) + sizeof(GetVisibleChildrenCountPackage));
1158
}
1159
break;
1160
1161
case cGetVisibleChildrenPackage:
1162
PrintDebugString("[INFO]: ##### type == GetVisibleChildrenPackage");
1163
if (bufsize == (sizeof(PackageType) + sizeof(GetVisibleChildrenPackage))) {
1164
GetVisibleChildrenPackage *pkg =
1165
(GetVisibleChildrenPackage *) (buffer + sizeof(PackageType));
1166
pkg->rSuccess = windowsThreadEntryPoints->getVisibleChildren ((jobject)pkg->accessibleContext,
1167
pkg->startIndex,
1168
&(pkg->rVisibleChildrenInfo));
1169
1170
PrintDebugString("[INFO]: ##### processing succeeded");
1171
} else {
1172
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1173
bufsize, sizeof(PackageType) + sizeof(GetVisibleChildrenPackage));
1174
}
1175
break;
1176
1177
case cSetCaretPositionPackage:
1178
PrintDebugString("[INFO]: ##### type == SetCaretPositionPackage");
1179
if (bufsize == (sizeof(PackageType) + sizeof(SetCaretPositionPackage))) {
1180
SetCaretPositionPackage *pkg =
1181
(SetCaretPositionPackage *) (buffer + sizeof(PackageType));
1182
windowsThreadEntryPoints->setCaretPosition (
1183
(jobject)pkg->accessibleContext, pkg->position);
1184
PrintDebugString("[INFO]: ##### processing succeeded");
1185
} else {
1186
PrintDebugString("[ERROR]: ##### processing FAILED!! -> bufsize = %d; expectation = %d",
1187
bufsize, sizeof(PackageType) + sizeof(SetCaretPositionPackage));
1188
}
1189
break;
1190
1191
// ------------ end additional methods for Teton
1192
1193
// ------------ end Accessible KeyBindings, Icons and Actions
1194
1195
// ------------ Accessible Text packages ------------------
1196
1197
case cGetAccessibleTextInfoPackage:
1198
PrintDebugString("[INFO]: type == cGetAccessibleTextInfoPackage");
1199
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage))) {
1200
GetAccessibleTextInfoPackage *pkg =
1201
(GetAccessibleTextInfoPackage *) (buffer + sizeof(PackageType));
1202
windowsThreadEntryPoints->getAccessibleTextInfo((jobject)pkg->AccessibleContext,
1203
&(pkg->rTextInfo), pkg->x, pkg->y);
1204
} else {
1205
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1206
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage));
1207
}
1208
break;
1209
1210
case cGetAccessibleTextItemsPackage:
1211
PrintDebugString("[INFO]: type == cGetAccessibleTextItemsPackage");
1212
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextItemsPackage))) {
1213
GetAccessibleTextItemsPackage *pkg =
1214
(GetAccessibleTextItemsPackage *) (buffer + sizeof(PackageType));
1215
windowsThreadEntryPoints->getAccessibleTextItems((jobject)pkg->AccessibleContext,
1216
&(pkg->rTextItemsInfo), pkg->index);
1217
} else {
1218
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1219
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextInfoPackage));
1220
}
1221
break;
1222
1223
case cGetAccessibleTextSelectionInfoPackage:
1224
PrintDebugString("[INFO]: type == cGetAccessibleTextSelectionInfoPackage");
1225
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextSelectionInfoPackage))) {
1226
GetAccessibleTextSelectionInfoPackage *pkg =
1227
(GetAccessibleTextSelectionInfoPackage *) (buffer + sizeof(PackageType));
1228
windowsThreadEntryPoints->getAccessibleTextSelectionInfo(
1229
(jobject)pkg->AccessibleContext, &(pkg->rTextSelectionItemsInfo));
1230
} else {
1231
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1232
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextSelectionInfoPackage));
1233
}
1234
break;
1235
1236
case cGetAccessibleTextAttributeInfoPackage:
1237
PrintDebugString("[INFO]: type == cGetAccessibleTextAttributeInfoPackage");
1238
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextAttributeInfoPackage))) {
1239
GetAccessibleTextAttributeInfoPackage *pkg =
1240
(GetAccessibleTextAttributeInfoPackage *) (buffer + sizeof(PackageType));
1241
windowsThreadEntryPoints->getAccessibleTextAttributes(
1242
(jobject)pkg->AccessibleContext, pkg->index, (AccessibleTextAttributesInfo *) &(pkg->rAttributeInfo));
1243
} else {
1244
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1245
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextAttributeInfoPackage));
1246
}
1247
break;
1248
1249
case cGetAccessibleTextRectInfoPackage:
1250
PrintDebugString("[INFO]: type == cGetAccessibleTextRectInfoPackage");
1251
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextRectInfoPackage))) {
1252
GetAccessibleTextRectInfoPackage *pkg =
1253
(GetAccessibleTextRectInfoPackage *) (buffer + sizeof(PackageType));
1254
windowsThreadEntryPoints->getAccessibleTextRect((jobject)pkg->AccessibleContext,
1255
&(pkg->rTextRectInfo), pkg->index);
1256
} else {
1257
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1258
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextRectInfoPackage));
1259
}
1260
break;
1261
1262
case cGetCaretLocationPackage:
1263
PrintDebugString("[INFO]: type == cGetCaretLocationPackage");
1264
if (bufsize == (sizeof(PackageType) + sizeof(GetCaretLocationPackage))) {
1265
GetCaretLocationPackage *pkg =
1266
(GetCaretLocationPackage *) (buffer + sizeof(PackageType));
1267
windowsThreadEntryPoints->getCaretLocation((jobject)pkg->AccessibleContext,
1268
&(pkg->rTextRectInfo), pkg->index);
1269
} else {
1270
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1271
bufsize, sizeof(PackageType) + sizeof(GetCaretLocationPackage));
1272
}
1273
break;
1274
1275
case cGetAccessibleTextLineBoundsPackage:
1276
PrintDebugString("[INFO]: type == cGetAccessibleTextLineBoundsPackage");
1277
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextLineBoundsPackage))) {
1278
GetAccessibleTextLineBoundsPackage *pkg =
1279
(GetAccessibleTextLineBoundsPackage *) (buffer + sizeof(PackageType));
1280
windowsThreadEntryPoints->getAccessibleTextLineBounds((jobject)pkg->AccessibleContext,
1281
pkg->index, &(pkg->rLineStart), &(pkg->rLineEnd));
1282
} else {
1283
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1284
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextLineBoundsPackage));
1285
}
1286
break;
1287
1288
case cGetAccessibleTextRangePackage:
1289
PrintDebugString("[INFO]: type == cGetAccessibleTextRangePackage");
1290
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleTextRangePackage))) {
1291
GetAccessibleTextRangePackage *pkg =
1292
(GetAccessibleTextRangePackage *) (buffer + sizeof(PackageType));
1293
windowsThreadEntryPoints->getAccessibleTextRange((jobject)pkg->AccessibleContext,
1294
pkg->start, pkg->end, (wchar_t *) &(pkg->rText), (sizeof(pkg->rText) / sizeof(wchar_t)));
1295
} else {
1296
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1297
bufsize, sizeof(PackageType) + sizeof(GetAccessibleTextRangePackage));
1298
}
1299
break;
1300
1301
1302
// ------------ Accessible Value packages ------------------
1303
1304
case cGetCurrentAccessibleValueFromContextPackage:
1305
PrintDebugString("[INFO]: type == cGetCurrentAccessibleValueFromContextPackage");
1306
if (bufsize == (sizeof(PackageType) + sizeof(GetCurrentAccessibleValueFromContextPackage))) {
1307
GetCurrentAccessibleValueFromContextPackage *pkg =
1308
(GetCurrentAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));
1309
windowsThreadEntryPoints->getCurrentAccessibleValueFromContext((jobject)pkg->AccessibleContext,
1310
(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));
1311
} else {
1312
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1313
bufsize, sizeof(PackageType) + sizeof(GetCurrentAccessibleValueFromContextPackage));
1314
}
1315
break;
1316
1317
case cGetMaximumAccessibleValueFromContextPackage:
1318
PrintDebugString("[INFO]: type == cGetMaximumAccessibleValueFromContextPackage");
1319
if (bufsize == (sizeof(PackageType) + sizeof(GetMaximumAccessibleValueFromContextPackage))) {
1320
GetMaximumAccessibleValueFromContextPackage *pkg =
1321
(GetMaximumAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));
1322
windowsThreadEntryPoints->getMaximumAccessibleValueFromContext((jobject)pkg->AccessibleContext,
1323
(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));
1324
} else {
1325
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1326
bufsize, sizeof(PackageType) + sizeof(GetMaximumAccessibleValueFromContextPackage));
1327
}
1328
break;
1329
1330
case cGetMinimumAccessibleValueFromContextPackage:
1331
PrintDebugString("[INFO]: type == cGetMinimumAccessibleValueFromContextPackage");
1332
if (bufsize == (sizeof(PackageType) + sizeof(GetMinimumAccessibleValueFromContextPackage))) {
1333
GetMinimumAccessibleValueFromContextPackage *pkg =
1334
(GetMinimumAccessibleValueFromContextPackage *) (buffer + sizeof(PackageType));
1335
windowsThreadEntryPoints->getMinimumAccessibleValueFromContext((jobject)pkg->AccessibleContext,
1336
(wchar_t *) &(pkg->rValue), (sizeof(pkg->rValue) / sizeof(wchar_t)));
1337
} else {
1338
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1339
bufsize, sizeof(PackageType) + sizeof(GetMinimumAccessibleValueFromContextPackage));
1340
}
1341
break;
1342
1343
// ------------ Accessible Selection packages ------------------
1344
1345
case cAddAccessibleSelectionFromContextPackage:
1346
PrintDebugString("[INFO]: type == cAddAccessibleSelectionFromContextPackage");
1347
if (bufsize == (sizeof(PackageType) + sizeof(AddAccessibleSelectionFromContextPackage))) {
1348
AddAccessibleSelectionFromContextPackage *pkg =
1349
(AddAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));
1350
windowsThreadEntryPoints->addAccessibleSelectionFromContext((jobject)pkg->AccessibleContext,
1351
pkg->index);
1352
} else {
1353
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1354
bufsize, sizeof(PackageType) + sizeof(AddAccessibleSelectionFromContextPackage));
1355
}
1356
break;
1357
1358
case cClearAccessibleSelectionFromContextPackage:
1359
PrintDebugString("[INFO]: type == cClearAccessibleSelectionFromContextPackage");
1360
if (bufsize == (sizeof(PackageType) + sizeof(ClearAccessibleSelectionFromContextPackage))) {
1361
ClearAccessibleSelectionFromContextPackage *pkg =
1362
(ClearAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));
1363
windowsThreadEntryPoints->clearAccessibleSelectionFromContext((jobject)pkg->AccessibleContext);
1364
} else {
1365
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1366
bufsize, sizeof(PackageType) + sizeof(ClearAccessibleSelectionFromContextPackage));
1367
}
1368
break;
1369
1370
case cGetAccessibleSelectionFromContextPackage:
1371
PrintDebugString("[INFO]: type == cGetAccessibleSelectionFromContextPackage");
1372
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleSelectionFromContextPackage))) {
1373
GetAccessibleSelectionFromContextPackage *pkg =
1374
(GetAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));
1375
pkg->rAccessibleContext = (JOBJECT64)windowsThreadEntryPoints->getAccessibleSelectionFromContext(
1376
(jobject)pkg->AccessibleContext, pkg->index);
1377
} else {
1378
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1379
bufsize, sizeof(PackageType) + sizeof(GetAccessibleSelectionFromContextPackage));
1380
}
1381
break;
1382
1383
case cGetAccessibleSelectionCountFromContextPackage:
1384
PrintDebugString("[INFO]: type == cGetAccessibleSelectionCountFromContextPackage");
1385
if (bufsize == (sizeof(PackageType) + sizeof(GetAccessibleSelectionCountFromContextPackage))) {
1386
GetAccessibleSelectionCountFromContextPackage *pkg =
1387
(GetAccessibleSelectionCountFromContextPackage *) (buffer + sizeof(PackageType));
1388
pkg->rCount = windowsThreadEntryPoints->getAccessibleSelectionCountFromContext(
1389
(jobject)pkg->AccessibleContext);
1390
} else {
1391
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1392
bufsize, sizeof(PackageType) + sizeof(GetAccessibleSelectionCountFromContextPackage));
1393
}
1394
break;
1395
1396
case cIsAccessibleChildSelectedFromContextPackage:
1397
PrintDebugString("[INFO]: type == cIsAccessibleChildSelectedFromContextPackage");
1398
if (bufsize == (sizeof(PackageType) + sizeof(IsAccessibleChildSelectedFromContextPackage))) {
1399
IsAccessibleChildSelectedFromContextPackage *pkg =
1400
(IsAccessibleChildSelectedFromContextPackage *) (buffer + sizeof(PackageType));
1401
pkg->rResult = windowsThreadEntryPoints->isAccessibleChildSelectedFromContext(
1402
(jobject)pkg->AccessibleContext, pkg->index);
1403
} else {
1404
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1405
bufsize, sizeof(PackageType) + sizeof(IsAccessibleChildSelectedFromContextPackage));
1406
}
1407
break;
1408
1409
case cRemoveAccessibleSelectionFromContextPackage:
1410
PrintDebugString("[INFO]: type == cRemoveAccessibleSelectionFromContextPackage");
1411
if (bufsize == (sizeof(PackageType) + sizeof(RemoveAccessibleSelectionFromContextPackage))) {
1412
RemoveAccessibleSelectionFromContextPackage *pkg =
1413
(RemoveAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));
1414
windowsThreadEntryPoints->removeAccessibleSelectionFromContext((jobject)pkg->AccessibleContext,
1415
pkg->index);
1416
} else {
1417
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1418
bufsize, sizeof(PackageType) + sizeof(RemoveAccessibleSelectionFromContextPackage));
1419
}
1420
break;
1421
1422
case cSelectAllAccessibleSelectionFromContextPackage:
1423
PrintDebugString("[INFO]: type == cSelectAllAccessibleSelectionFromContextPackage");
1424
if (bufsize == (sizeof(PackageType) + sizeof(SelectAllAccessibleSelectionFromContextPackage))) {
1425
SelectAllAccessibleSelectionFromContextPackage *pkg =
1426
(SelectAllAccessibleSelectionFromContextPackage *) (buffer + sizeof(PackageType));
1427
windowsThreadEntryPoints->selectAllAccessibleSelectionFromContext((jobject)pkg->AccessibleContext);
1428
} else {
1429
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1430
bufsize, sizeof(PackageType) + sizeof(SelectAllAccessibleSelectionFromContextPackage));
1431
}
1432
break;
1433
1434
1435
// ------------ event notification management packages ------------------
1436
1437
case cAddJavaEventNotificationPackage:
1438
PrintDebugString("[INFO]: type = cAddJavaEventNotificationPackage");
1439
if (bufsize == (sizeof(PackageType) + sizeof(AddJavaEventNotificationPackage))) {
1440
AddJavaEventNotificationPackage *pkg =
1441
(AddJavaEventNotificationPackage *) (buffer + sizeof(PackageType));
1442
addJavaEventNotification(pkg->type, (HWND)ABLongToHandle( pkg->DLLwindow ) );
1443
} else {
1444
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1445
bufsize, sizeof(PackageType) + sizeof(AddJavaEventNotificationPackage));
1446
}
1447
break;
1448
1449
case cRemoveJavaEventNotificationPackage:
1450
PrintDebugString("[INFO]: type = cRemoveJavaEventNotificationPackage");
1451
if (bufsize == (sizeof(PackageType) + sizeof(RemoveJavaEventNotificationPackage))) {
1452
RemoveJavaEventNotificationPackage *pkg =
1453
(RemoveJavaEventNotificationPackage *) (buffer + sizeof(PackageType));
1454
removeJavaEventNotification(pkg->type, (HWND)ABLongToHandle( pkg->DLLwindow ));
1455
} else {
1456
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1457
bufsize, sizeof(PackageType) + sizeof(RemoveJavaEventNotificationPackage));
1458
}
1459
break;
1460
1461
case cAddAccessibilityEventNotificationPackage:
1462
PrintDebugString("[INFO]: type = cAddAccessibilityEventNotificationPackage");
1463
if (bufsize == (sizeof(PackageType) + sizeof(AddAccessibilityEventNotificationPackage))) {
1464
AddAccessibilityEventNotificationPackage *pkg =
1465
(AddAccessibilityEventNotificationPackage *) (buffer + sizeof(PackageType));
1466
addAccessibilityEventNotification(pkg->type, (HWND)ABLongToHandle(pkg->DLLwindow));
1467
} else {
1468
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1469
bufsize, sizeof(PackageType) + sizeof(AddAccessibilityEventNotificationPackage));
1470
}
1471
break;
1472
1473
case cRemoveAccessibilityEventNotificationPackage:
1474
PrintDebugString("[INFO]: type = cRemoveAccessibilityEventNotificationPackage");
1475
if (bufsize == (sizeof(PackageType) + sizeof(RemoveAccessibilityEventNotificationPackage))) {
1476
RemoveAccessibilityEventNotificationPackage *pkg =
1477
(RemoveAccessibilityEventNotificationPackage *) (buffer + sizeof(PackageType));
1478
removeAccessibilityEventNotification(pkg->type, (HWND)ABLongToHandle(pkg->DLLwindow));
1479
} else {
1480
PrintDebugString("[ERROR]: processing FAILED!! -> bufsize = %d; expectation = %d",
1481
bufsize, sizeof(PackageType) + sizeof(RemoveAccessibilityEventNotificationPackage));
1482
}
1483
break;
1484
1485
default:
1486
PrintDebugString("[ERROR]: processing FAILED!! -> don't know how to handle type = %X", *type);
1487
returnVal = -1;
1488
break;
1489
}
1490
1491
PrintDebugString("[INFO]: package processing completed");
1492
return returnVal;
1493
}
1494
1495
1496
// -----------------------------
1497
1498
1499
/**
1500
* MemoryMappedFileCreated
1501
* - WindowsDLL letting us know it's created a memory-mapped file
1502
* for IPC. We need to open it and write a magic string into
1503
* it to let the WindowsDLL know all is OK. Also we need to
1504
* set up our own data structures to communicate with the
1505
* WindowsDLL
1506
*
1507
*/
1508
LRESULT
1509
JavaAccessBridge::MemoryMappedFileCreated(HWND ATBridgeDLLWindow, char *filename) {
1510
PrintDebugString("[INFO]: in MemoryMappedFileCreated(%p, %s)!", ATBridgeDLLWindow, filename);
1511
AccessBridgeATInstance *newAT =
1512
new AccessBridgeATInstance(dialogWindow, ATBridgeDLLWindow, filename, ATs);
1513
PrintDebugString("[INFO]: just created a new ATInstance = %p, old = %p", newAT, ATs);
1514
ATs = newAT;
1515
1516
LRESULT returnVal = ATs->initiateIPC();
1517
if (returnVal == 0) {
1518
PrintDebugString("[INFO]: Successfully initiated IPC with AT!!!");
1519
} else {
1520
PrintDebugString("[ERROR]: Failed to initiate IPC with AT!!!");
1521
}
1522
1523
return returnVal;
1524
}
1525
1526
1527
/**
1528
* WindowsATDestroyed - lets the JavaABDLL know a Windows AT disappeared
1529
*
1530
*/
1531
void
1532
JavaAccessBridge::WindowsATDestroyed(HWND ATBridgeDLLWindow) {
1533
PrintDebugString("[INFO]: in JavaAccessBridge::WindowsATDestroyed(%p)", ATBridgeDLLWindow);
1534
if (ATs == (AccessBridgeATInstance *) 0) {
1535
PrintDebugString("[ERROR]: -> ATs == 0! (shouldn't happen here)");
1536
return;
1537
}
1538
1539
AccessBridgeATInstance *currentAT = ATs;
1540
AccessBridgeATInstance *previousAT = ATs;
1541
if (ATs->winAccessBridgeWindow == ATBridgeDLLWindow) {
1542
ATs = ATs->nextATInstance;
1543
// remove event notification for this AT
1544
removeJavaEventNotification(currentAT->javaEventMask, ATBridgeDLLWindow);
1545
removeAccessibilityEventNotification(currentAT->accessibilityEventMask, ATBridgeDLLWindow);
1546
delete currentAT;
1547
PrintDebugString("[INFO]: data structures successfully removed");
1548
} else {
1549
while (currentAT != (AccessBridgeATInstance *) NULL) {
1550
if (currentAT->winAccessBridgeWindow == ATBridgeDLLWindow) {
1551
previousAT->nextATInstance = currentAT->nextATInstance;
1552
delete currentAT;
1553
PrintDebugString("[INFO]: data structures successfully removed");
1554
return;
1555
} else {
1556
previousAT = currentAT;
1557
currentAT = currentAT->nextATInstance;
1558
}
1559
}
1560
PrintDebugString("[ERROR]: couldn't find matching data structures!");
1561
}
1562
}
1563
1564
1565
// -----------------------------
1566
1567
1568
/**
1569
* releaseJavaObject - lets the JavaVM know it can release the Java Object
1570
*
1571
* Note: once you have made this call, the JavaVM will garbage collect
1572
* the jobject you pass in. If you later use that jobject in another
1573
* call, you will cause all maner of havoc!
1574
*
1575
*/
1576
void
1577
JavaAccessBridge::releaseJavaObject(jobject object) {
1578
PrintDebugString("[INFO]: In JavaAccessBridge::releaseJavaObject");
1579
PrintDebugString("[INFO]: object X: %p", object);
1580
if (windowsThreadJNIEnv != (JNIEnv *) 0) {
1581
windowsThreadJNIEnv->DeleteGlobalRef(object);
1582
PrintDebugString("[INFO]: global reference deleted.", object);
1583
} else {
1584
PrintDebugString("[ERROR]: windowsThreadJNIEnv == 0");
1585
}
1586
}
1587
1588
// -----------------------------
1589
1590
/**
1591
* addJavaEventNotification - this AT now wants this type of events
1592
*
1593
*/
1594
void
1595
JavaAccessBridge::addJavaEventNotification(jlong type, HWND DLLwindow) {
1596
// walk through list of ATs, find this one and add this type
1597
// and, if we weren't listening for these before, ask Java for 'em
1598
PrintDebugString("[INFO]: adding Java event type %016I64X to HWND %p", type, DLLwindow);
1599
AccessBridgeATInstance *ati = ATs;
1600
long globalEventMask = 0;
1601
while (ati != (AccessBridgeATInstance *) 0) {
1602
if (ati->winAccessBridgeWindow == DLLwindow) {
1603
ati->javaEventMask |= type;
1604
PrintDebugString("[INFO]: found HWND, javaEventMask now is %X", ati->javaEventMask);
1605
} else {
1606
globalEventMask |= ati->javaEventMask;
1607
}
1608
ati = ati->nextATInstance;
1609
}
1610
PrintDebugString("[INFO]: union of all Java AT event masks: %X", globalEventMask);
1611
if (!(globalEventMask & type)) {
1612
// no other ATs wanted this event;
1613
// start getting them from Java
1614
PrintDebugString("[INFO]: no other AT wanted this Java event (so not registered); adding to AccessBridge.java");
1615
windowsThreadEntryPoints->addJavaEventNotification(type);
1616
}
1617
}
1618
1619
/**
1620
* removeJavaEventNotification - this AT no longer wants this type of events
1621
*
1622
*/
1623
void
1624
JavaAccessBridge::removeJavaEventNotification(jlong type, HWND DLLwindow) {
1625
// walk through list of ATs, find this one and remove this type
1626
// and, if no other AT wants 'em either, tell Java we no longer want 'em
1627
PrintDebugString("[INFO]: removing Java event type %016I64X from HWND %p", type, DLLwindow);
1628
AccessBridgeATInstance *ati = ATs;
1629
long globalEventMask = 0;
1630
while (ati != (AccessBridgeATInstance *) 0) {
1631
if (ati->winAccessBridgeWindow == DLLwindow) {
1632
ati->javaEventMask &= (0xFFFFFFFF - type);
1633
PrintDebugString("[INFO]: found HWND, javaEventMask now is %X", ati->javaEventMask);
1634
} else {
1635
globalEventMask |= ati->javaEventMask;
1636
}
1637
ati = ati->nextATInstance;
1638
}
1639
PrintDebugString("[INFO]: union of all Java AT event masks: %X", globalEventMask);
1640
if (!(globalEventMask & type)) {
1641
// no other ATs wanted this event;
1642
// stop getting them from Java
1643
PrintDebugString("[INFO]: no other AT wanted this Java event (so can remove); removing from AccessBridge.java");
1644
windowsThreadEntryPoints->removeJavaEventNotification(type);
1645
}
1646
}
1647
1648
1649
/**
1650
* addAccesibilityEventNotification - this AT now wants this type of events
1651
*
1652
*/
1653
void
1654
JavaAccessBridge::addAccessibilityEventNotification(jlong type, HWND DLLwindow) {
1655
// walk through list of ATs, find this one and add this type
1656
// and, if we weren't listening for these before, ask Java for 'em
1657
PrintDebugString("[INFO]: adding Accesibility event type %016I64X to HWND %p", type, DLLwindow);
1658
AccessBridgeATInstance *ati = ATs;
1659
long globalEventMask = 0;
1660
while (ati != (AccessBridgeATInstance *) 0) {
1661
if (ati->winAccessBridgeWindow == DLLwindow) {
1662
ati->accessibilityEventMask |= type;
1663
PrintDebugString("[INFO]: found HWND, accessibilityEventMask now is %X", ati->accessibilityEventMask);
1664
} else {
1665
globalEventMask |= ati->accessibilityEventMask;
1666
}
1667
ati = ati->nextATInstance;
1668
}
1669
PrintDebugString("[INFO]: union of all Accessibility AT event masks: %X", globalEventMask);
1670
if (!(globalEventMask & type)) {
1671
// no other ATs wanted this event;
1672
// start getting them from Java
1673
PrintDebugString("[INFO]: no other AT wanted this Accesibility event (so not registered); adding to AccessBridge.java");
1674
windowsThreadEntryPoints->addAccessibilityEventNotification(type);
1675
}
1676
}
1677
1678
/**
1679
* removeAccesibilityEventNotification - this AT no longer wants this type of events
1680
*
1681
*/
1682
void
1683
JavaAccessBridge::removeAccessibilityEventNotification(jlong type, HWND DLLwindow) {
1684
// walk through list of ATs, find this one and remove this type
1685
// and, if no other AT wants 'em either, tell Java we no longer want 'em
1686
PrintDebugString("[INFO]: removing Accesibility event type %016I64X from HWND %p", type, DLLwindow);
1687
AccessBridgeATInstance *ati = ATs;
1688
long globalEventMask = 0;
1689
while (ati != (AccessBridgeATInstance *) 0) {
1690
if (ati->winAccessBridgeWindow == DLLwindow) {
1691
ati->accessibilityEventMask &= (0xFFFFFFFF - type);
1692
PrintDebugString("[INFO]: found HWND, accessibilityEventMask now is %X", ati->accessibilityEventMask);
1693
} else {
1694
globalEventMask |= ati->accessibilityEventMask;
1695
}
1696
ati = ati->nextATInstance;
1697
}
1698
PrintDebugString("[INFO]: union of all Accessibility AT event masks: %X", globalEventMask);
1699
if (!(globalEventMask & type)) {
1700
// no other ATs wanted this event;
1701
// stop getting them from Java
1702
PrintDebugString("[INFO]: no other AT wanted this Accessibility event (so can remove); removing from AccessBridge.java");
1703
windowsThreadEntryPoints->removeAccessibilityEventNotification(type);
1704
}
1705
}
1706
1707
1708
1709
1710
/**
1711
* firePropertyCaretChange
1712
*
1713
*/
1714
void
1715
JavaAccessBridge::firePropertyCaretChange(JNIEnv *env, jobject callingObj,
1716
jobject event, jobject source,
1717
jint oldValue, jint newValue) {
1718
1719
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyCaretChanged(%p, %p, %p, %p, %d, %d)",
1720
env, callingObj, event,
1721
source, oldValue, newValue);
1722
1723
// sanity check
1724
if (ATs == (AccessBridgeATInstance *) 0) {
1725
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
1726
return; // panic!
1727
}
1728
1729
// common setup
1730
char buffer[sizeof(PackageType) + sizeof(PropertyCaretChangePackage)];
1731
PackageType *type = (PackageType *) buffer;
1732
PropertyCaretChangePackage *pkg = (PropertyCaretChangePackage *) (buffer + sizeof(PackageType));
1733
*type = cPropertyCaretChangePackage;
1734
pkg->vmID = (long) dialogWindow;
1735
1736
// make new Global Refs and send events only to those ATs that want 'em
1737
AccessBridgeATInstance *ati = ATs;
1738
while (ati != (AccessBridgeATInstance *) 0) {
1739
if (ati->accessibilityEventMask & cPropertyCaretChangeEvent) {
1740
1741
PrintDebugString("[INFO]: sending to AT");
1742
1743
// make new GlobalRefs for this AT
1744
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
1745
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
1746
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
1747
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
1748
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
1749
#else // JOBJECT64 is jlong (64 bit)
1750
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
1751
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
1752
#endif
1753
1754
pkg->oldPosition = oldValue;
1755
pkg->newPosition = newValue;
1756
1757
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyCaretChangeEvent);
1758
}
1759
ati = ati->nextATInstance;
1760
}
1761
PrintDebugString("[INFO]: done with propertyCaretChange event");
1762
}
1763
1764
/**
1765
* firePropertyDescriptionChange
1766
*
1767
*/
1768
void
1769
JavaAccessBridge::firePropertyDescriptionChange(JNIEnv *env, jobject callingObj,
1770
jobject event, jobject source,
1771
jstring oldValue, jstring newValue){
1772
1773
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyDescriptionChanged(%p, %p, %p, %p, %p, %p)",
1774
env, callingObj, event,
1775
source, oldValue, newValue);
1776
1777
// sanity check
1778
if (ATs == (AccessBridgeATInstance *) 0) {
1779
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
1780
return; // panic!
1781
}
1782
1783
// common setup
1784
const wchar_t *stringBytes;
1785
char buffer[sizeof(PackageType) + sizeof(PropertyDescriptionChangePackage)];
1786
PackageType *type = (PackageType *) buffer;
1787
PropertyDescriptionChangePackage *pkg = (PropertyDescriptionChangePackage *) (buffer + sizeof(PackageType));
1788
*type = cPropertyDescriptionChangePackage;
1789
pkg->vmID = (long) dialogWindow;
1790
1791
// make new Global Refs and send events only to those ATs that want 'em
1792
AccessBridgeATInstance *ati = ATs;
1793
while (ati != (AccessBridgeATInstance *) 0) {
1794
if (ati->accessibilityEventMask & cPropertyCaretChangeEvent) {
1795
1796
PrintDebugString("[INFO]: sending to AT");
1797
1798
// make new GlobalRefs for this AT
1799
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
1800
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
1801
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
1802
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
1803
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
1804
#else // JOBJECT64 is jlong (64 bit)
1805
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
1806
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
1807
#endif
1808
1809
if (oldValue != (jstring) 0) {
1810
stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);
1811
if (stringBytes == NULL) {
1812
if (!env->ExceptionCheck()) {
1813
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
1814
if (cls != NULL) {
1815
env->ThrowNew(cls, NULL);
1816
}
1817
}
1818
return;
1819
}
1820
wcsncpy(pkg->oldDescription, stringBytes, (sizeof(pkg->oldDescription) / sizeof(wchar_t)));
1821
env->ReleaseStringChars(oldValue, stringBytes);
1822
} else {
1823
wcsncpy(pkg->oldDescription, L"(null)", (sizeof(pkg->oldDescription) / sizeof(wchar_t)));
1824
}
1825
1826
if (newValue != (jstring) 0) {
1827
stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);
1828
if (stringBytes == NULL) {
1829
if (!env->ExceptionCheck()) {
1830
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
1831
if (cls != NULL) {
1832
env->ThrowNew(cls, NULL);
1833
}
1834
}
1835
return;
1836
}
1837
wcsncpy(pkg->newDescription, stringBytes, (sizeof(pkg->newDescription) / sizeof(wchar_t)));
1838
env->ReleaseStringChars(newValue, stringBytes);
1839
} else {
1840
wcsncpy(pkg->newDescription, L"(null)", (sizeof(pkg->newDescription) / sizeof(wchar_t)));
1841
}
1842
1843
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyDescriptionChangeEvent);
1844
}
1845
ati = ati->nextATInstance;
1846
}
1847
PrintDebugString("[INFO]: done with propertyDescriptionChange event");
1848
}
1849
1850
/**
1851
* firePropertyNameChange
1852
*
1853
*/
1854
void
1855
JavaAccessBridge::firePropertyNameChange(JNIEnv *env, jobject callingObj,
1856
jobject event, jobject source,
1857
jstring oldValue, jstring newValue){
1858
1859
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyNameChanged(%p, %p, %p, %p, %p, %p)",
1860
env, callingObj, event,
1861
source, oldValue, newValue);
1862
1863
// sanity check
1864
if (ATs == (AccessBridgeATInstance *) 0) {
1865
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
1866
return; // panic!
1867
}
1868
1869
// common setup
1870
const wchar_t *stringBytes;
1871
char buffer[sizeof(PackageType) + sizeof(PropertyNameChangePackage)];
1872
PackageType *type = (PackageType *) buffer;
1873
PropertyNameChangePackage *pkg = (PropertyNameChangePackage *) (buffer + sizeof(PackageType));
1874
*type = cPropertyNameChangePackage;
1875
pkg->vmID = (long) dialogWindow;
1876
1877
// make new Global Refs and send events only to those ATs that want 'em
1878
AccessBridgeATInstance *ati = ATs;
1879
while (ati != (AccessBridgeATInstance *) 0) {
1880
if (ati->accessibilityEventMask & cPropertyNameChangeEvent) {
1881
1882
PrintDebugString("[INFO]: sending to AT");
1883
1884
// make new GlobalRefs for this AT
1885
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
1886
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
1887
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
1888
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
1889
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
1890
#else // JOBJECT64 is jlong (64 bit)
1891
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
1892
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
1893
#endif
1894
1895
if (oldValue != (jstring) 0) {
1896
stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);
1897
if (stringBytes == NULL) {
1898
if (!env->ExceptionCheck()) {
1899
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
1900
if (cls != NULL) {
1901
env->ThrowNew(cls, NULL);
1902
}
1903
}
1904
return;
1905
}
1906
wcsncpy(pkg->oldName, stringBytes, (sizeof(pkg->oldName) / sizeof(wchar_t)));
1907
env->ReleaseStringChars(oldValue, stringBytes);
1908
} else {
1909
wcsncpy(pkg->oldName, L"(null)", (sizeof(pkg->oldName) / sizeof(wchar_t)));
1910
}
1911
1912
if (newValue != (jstring) 0) {
1913
stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);
1914
if (stringBytes == NULL) {
1915
if (!env->ExceptionCheck()) {
1916
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
1917
if (cls != NULL) {
1918
env->ThrowNew(cls, NULL);
1919
}
1920
}
1921
return;
1922
}
1923
wcsncpy(pkg->newName, stringBytes, (sizeof(pkg->newName) / sizeof(wchar_t)));
1924
env->ReleaseStringChars(newValue, stringBytes);
1925
} else {
1926
wcsncpy(pkg->newName, L"(null)", (sizeof(pkg->newName) / sizeof(wchar_t)));
1927
}
1928
1929
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyNameChangeEvent);
1930
}
1931
ati = ati->nextATInstance;
1932
}
1933
PrintDebugString("[INFO]: done with propertyNameChange event");
1934
}
1935
1936
1937
/**
1938
* firePropertySelectionChange
1939
*
1940
*/
1941
void
1942
JavaAccessBridge::firePropertySelectionChange(JNIEnv *env, jobject callingObj,
1943
jobject event, jobject source) {
1944
1945
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertySelectionChanged(%p, %p, %p, %p)",
1946
env, callingObj, event, source);
1947
1948
// sanity check
1949
if (ATs == (AccessBridgeATInstance *) 0) {
1950
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
1951
return; // panic!
1952
}
1953
1954
// common setup
1955
char buffer[sizeof(PackageType) + sizeof(PropertySelectionChangePackage)];
1956
PackageType *type = (PackageType *) buffer;
1957
PropertySelectionChangePackage *pkg = (PropertySelectionChangePackage *) (buffer + sizeof(PackageType));
1958
*type = cPropertySelectionChangePackage;
1959
pkg->vmID = (long) dialogWindow;
1960
1961
// make new Global Refs and send events only to those ATs that want 'em
1962
AccessBridgeATInstance *ati = ATs;
1963
while (ati != (AccessBridgeATInstance *) 0) {
1964
if (ati->accessibilityEventMask & cPropertySelectionChangeEvent) {
1965
1966
PrintDebugString("[INFO]: sending to AT");
1967
1968
// make new GlobalRefs for this AT
1969
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
1970
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
1971
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
1972
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
1973
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
1974
#else // JOBJECT64 is jlong (64 bit)
1975
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
1976
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
1977
#endif
1978
1979
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertySelectionChangeEvent);
1980
}
1981
ati = ati->nextATInstance;
1982
}
1983
PrintDebugString("[INFO]: done with propertySelectionChange event");
1984
}
1985
1986
1987
/**
1988
* firePropertyStateChange
1989
*
1990
*/
1991
void
1992
JavaAccessBridge::firePropertyStateChange(JNIEnv *env, jobject callingObj,
1993
jobject event, jobject source,
1994
jstring oldValue, jstring newValue){
1995
1996
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyStateChanged(%p, %p, %p, %p, %p, %p)",
1997
env, callingObj, event,
1998
source, oldValue, newValue);
1999
2000
// sanity check
2001
if (ATs == (AccessBridgeATInstance *) 0) {
2002
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2003
return; // panic!
2004
}
2005
2006
// common setup
2007
const wchar_t *stringBytes;
2008
char buffer[sizeof(PackageType) + sizeof(PropertyStateChangePackage)];
2009
PackageType *type = (PackageType *) buffer;
2010
PropertyStateChangePackage *pkg = (PropertyStateChangePackage *) (buffer + sizeof(PackageType));
2011
*type = cPropertyStateChangePackage;
2012
pkg->vmID = (long) dialogWindow;
2013
2014
// make new Global Refs and send events only to those ATs that want 'em
2015
AccessBridgeATInstance *ati = ATs;
2016
while (ati != (AccessBridgeATInstance *) 0) {
2017
if (ati->accessibilityEventMask & cPropertyStateChangeEvent) {
2018
2019
PrintDebugString("[INFO]: sending to AT");
2020
2021
// make new GlobalRefs for this AT
2022
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2023
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2024
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2025
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2026
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
2027
#else // JOBJECT64 is jlong (64 bit)
2028
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2029
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2030
#endif
2031
2032
if (oldValue != (jstring) 0) {
2033
stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);
2034
if (stringBytes == NULL) {
2035
if (!env->ExceptionCheck()) {
2036
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2037
if (cls != NULL) {
2038
env->ThrowNew(cls, NULL);
2039
}
2040
}
2041
return;
2042
}
2043
wcsncpy(pkg->oldState, stringBytes, (sizeof(pkg->oldState) / sizeof(wchar_t)));
2044
env->ReleaseStringChars(oldValue, stringBytes);
2045
} else {
2046
wcsncpy(pkg->oldState, L"(null)", (sizeof(pkg->oldState) / sizeof(wchar_t)));
2047
}
2048
2049
if (newValue != (jstring) 0) {
2050
stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);
2051
if (stringBytes == NULL) {
2052
if (!env->ExceptionCheck()) {
2053
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2054
if (cls != NULL) {
2055
env->ThrowNew(cls, NULL);
2056
}
2057
}
2058
return;
2059
}
2060
wcsncpy(pkg->newState, stringBytes, (sizeof(pkg->newState) / sizeof(wchar_t)));
2061
env->ReleaseStringChars(newValue, stringBytes);
2062
} else {
2063
wcsncpy(pkg->newState, L"(null)", (sizeof(pkg->newState) / sizeof(wchar_t)));
2064
}
2065
2066
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyStateChangeEvent);
2067
}
2068
ati = ati->nextATInstance;
2069
}
2070
PrintDebugString("[INFO]: done with propertyStateChange event");
2071
}
2072
2073
2074
/**
2075
* firePropertyTextChange
2076
*
2077
*/
2078
void
2079
JavaAccessBridge::firePropertyTextChange(JNIEnv *env, jobject callingObj,
2080
jobject event, jobject source) {
2081
2082
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyTextChanged(%p, %p, %p, %p)",
2083
env, callingObj, event, source);
2084
2085
// sanity check
2086
if (ATs == (AccessBridgeATInstance *) 0) {
2087
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2088
return; // panic!
2089
}
2090
2091
// common setup
2092
char buffer[sizeof(PackageType) + sizeof(PropertyTextChangePackage)];
2093
PackageType *type = (PackageType *) buffer;
2094
PropertyTextChangePackage *pkg = (PropertyTextChangePackage *) (buffer + sizeof(PackageType));
2095
*type = cPropertyTextChangePackage;
2096
pkg->vmID = (long) dialogWindow;
2097
2098
// make new Global Refs and send events only to those ATs that want 'em
2099
AccessBridgeATInstance *ati = ATs;
2100
while (ati != (AccessBridgeATInstance *) 0) {
2101
if (ati->accessibilityEventMask & cPropertyTextChangeEvent) {
2102
2103
PrintDebugString("[INFO]: sending to AT");
2104
2105
// make new GlobalRefs for this AT
2106
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2107
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2108
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2109
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2110
" GlobalRef'd Source: %p",pkg->Event, pkg->AccessibleContextSource);
2111
#else // JOBJECT64 is jlong (64 bit)
2112
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2113
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2114
#endif
2115
2116
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyTextChangeEvent);
2117
}
2118
ati = ati->nextATInstance;
2119
}
2120
PrintDebugString("[INFO]: done with propertyTextChange event");
2121
}
2122
2123
2124
/**
2125
* firePropertyValueChange
2126
*
2127
*/
2128
void
2129
JavaAccessBridge::firePropertyValueChange(JNIEnv *env, jobject callingObj,
2130
jobject event, jobject source,
2131
jstring oldValue, jstring newValue){
2132
2133
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyValueChanged(%p, %p, %p, %p, %p, %p)",
2134
env, callingObj, event,
2135
source, oldValue, newValue);
2136
2137
// sanity check
2138
if (ATs == (AccessBridgeATInstance *) 0) {
2139
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2140
return; // panic!
2141
}
2142
2143
// common setup
2144
const wchar_t *stringBytes;
2145
char buffer[sizeof(PackageType) + sizeof(PropertyValueChangePackage)];
2146
PackageType *type = (PackageType *) buffer;
2147
PropertyValueChangePackage *pkg = (PropertyValueChangePackage *) (buffer + sizeof(PackageType));
2148
*type = cPropertyValueChangePackage;
2149
pkg->vmID = (long) dialogWindow;
2150
2151
// make new Global Refs and send events only to those ATs that want 'em
2152
AccessBridgeATInstance *ati = ATs;
2153
while (ati != (AccessBridgeATInstance *) 0) {
2154
if (ati->accessibilityEventMask & cPropertyValueChangeEvent) {
2155
2156
PrintDebugString("[INFO]: sending to AT");
2157
2158
// make new GlobalRefs for this AT
2159
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2160
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2161
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2162
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2163
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
2164
#else // JOBJECT64 is jlong (64 bit)
2165
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2166
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2167
#endif
2168
2169
if (oldValue != (jstring) 0) {
2170
stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);
2171
if (stringBytes == NULL) {
2172
if (!env->ExceptionCheck()) {
2173
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2174
if (cls != NULL) {
2175
env->ThrowNew(cls, NULL);
2176
}
2177
}
2178
return;
2179
}
2180
wcsncpy(pkg->oldValue, stringBytes, (sizeof(pkg->oldValue) / sizeof(wchar_t)));
2181
env->ReleaseStringChars(oldValue, stringBytes);
2182
} else {
2183
wcsncpy(pkg->oldValue, L"(null)", (sizeof(pkg->oldValue) / sizeof(wchar_t)));
2184
}
2185
2186
if (newValue != (jstring) 0) {
2187
stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);
2188
if (stringBytes == NULL) {
2189
if (!env->ExceptionCheck()) {
2190
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2191
if (cls != NULL) {
2192
env->ThrowNew(cls, NULL);
2193
}
2194
}
2195
return;
2196
}
2197
wcsncpy(pkg->newValue, stringBytes, (sizeof(pkg->newValue) / sizeof(wchar_t)));
2198
env->ReleaseStringChars(newValue, stringBytes);
2199
} else {
2200
wcsncpy(pkg->newValue, L"(null)", (sizeof(pkg->newValue) / sizeof(wchar_t)));
2201
}
2202
2203
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyValueChangeEvent);
2204
}
2205
ati = ati->nextATInstance;
2206
}
2207
PrintDebugString("[INFO]: done with propertyValueChange event");
2208
}
2209
2210
/**
2211
* firePropertyVisibleDataChange
2212
*
2213
*/
2214
void
2215
JavaAccessBridge::firePropertyVisibleDataChange(JNIEnv *env, jobject callingObj,
2216
jobject event, jobject source) {
2217
2218
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyVisibleDataChanged(%p, %p, %p, %p)",
2219
env, callingObj, event, source);
2220
2221
// sanity check
2222
if (ATs == (AccessBridgeATInstance *) 0) {
2223
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2224
return; // panic!
2225
}
2226
2227
// common setup
2228
char buffer[sizeof(PackageType) + sizeof(PropertyVisibleDataChangePackage)];
2229
PackageType *type = (PackageType *) buffer;
2230
PropertyVisibleDataChangePackage *pkg = (PropertyVisibleDataChangePackage *) (buffer + sizeof(PackageType));
2231
*type = cPropertyVisibleDataChangePackage;
2232
pkg->vmID = (long) dialogWindow;
2233
2234
// make new Global Refs and send events only to those ATs that want 'em
2235
AccessBridgeATInstance *ati = ATs;
2236
while (ati != (AccessBridgeATInstance *) 0) {
2237
if (ati->accessibilityEventMask & cPropertyVisibleDataChangeEvent) {
2238
2239
PrintDebugString("[INFO]: sending to AT");
2240
2241
// make new GlobalRefs for this AT
2242
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2243
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2244
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2245
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2246
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
2247
#else // JOBJECT64 is jlong (64 bit)
2248
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2249
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2250
#endif
2251
2252
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyVisibleDataChangeEvent);
2253
}
2254
ati = ati->nextATInstance;
2255
}
2256
PrintDebugString("[INFO]: done with propertyVisibleDataChange event");
2257
}
2258
2259
2260
/**
2261
* firePropertyChildChange
2262
*
2263
*/
2264
void
2265
JavaAccessBridge::firePropertyChildChange(JNIEnv *env, jobject callingObj,
2266
jobject event, jobject source,
2267
jobject oldValue, jobject newValue){
2268
2269
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyChildPropertyChanged(%p, %p, %p, %p, %p, %p)",
2270
env, callingObj, event,
2271
source, oldValue, newValue);
2272
2273
// sanity check
2274
if (ATs == (AccessBridgeATInstance *) 0) {
2275
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2276
return; // panic!
2277
}
2278
2279
// common setup
2280
char buffer[sizeof(PackageType) + sizeof(PropertyChildChangePackage)];
2281
PackageType *type = (PackageType *) buffer;
2282
PropertyChildChangePackage *pkg = (PropertyChildChangePackage *) (buffer + sizeof(PackageType));
2283
*type = cPropertyChildChangePackage;
2284
pkg->vmID = (long) dialogWindow;
2285
2286
// make new Global Refs and send events only to those ATs that want 'em
2287
AccessBridgeATInstance *ati = ATs;
2288
while (ati != (AccessBridgeATInstance *) 0) {
2289
if (ati->accessibilityEventMask & cPropertyChildChangeEvent) {
2290
2291
PrintDebugString("[INFO]: sending to AT");
2292
2293
// make new GlobalRefs for this AT
2294
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2295
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2296
pkg->oldChildAccessibleContext = (JOBJECT64)env->NewGlobalRef(oldValue);
2297
pkg->newChildAccessibleContext = (JOBJECT64)env->NewGlobalRef(newValue);
2298
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2299
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2300
" GlobalRef'd Source: %p"\
2301
" GlobalRef'd OldChildAC: %p"\
2302
" GlobalRef'd NewChildAC: %p"\
2303
, pkg->Event, pkg->AccessibleContextSource, pkg->oldChildAccessibleContext, pkg->newChildAccessibleContext);
2304
#else // JOBJECT64 is jlong (64 bit)
2305
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2306
" GlobalRef'd Source: %016I64X"\
2307
" GlobalRef'd OldChildAC: %016I64X"\
2308
" GlobalRef'd NewChildAC: %016I64X"\
2309
, pkg->Event, pkg->AccessibleContextSource, pkg->oldChildAccessibleContext, pkg->newChildAccessibleContext);
2310
#endif
2311
2312
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyChildChangeEvent);
2313
}
2314
ati = ati->nextATInstance;
2315
}
2316
PrintDebugString("[INFO]: done with propertyChildChange event");
2317
}
2318
2319
2320
/**
2321
* firePropertyActiveDescendentChange
2322
*
2323
*/
2324
void
2325
JavaAccessBridge::firePropertyActiveDescendentChange(JNIEnv *env, jobject callingObj,
2326
jobject event, jobject source,
2327
jobject oldValue, jobject newValue){
2328
2329
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyActiveDescendentPropertyChanged(%p, %p, %p, %p, %p, %p)",
2330
env, callingObj, event,
2331
source, oldValue, newValue);
2332
2333
// sanity check
2334
if (ATs == (AccessBridgeATInstance *) 0) {
2335
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2336
return; // panic!
2337
}
2338
2339
// common setup
2340
char buffer[sizeof(PackageType) + sizeof(PropertyActiveDescendentChangePackage)];
2341
PackageType *type = (PackageType *) buffer;
2342
PropertyActiveDescendentChangePackage *pkg = (PropertyActiveDescendentChangePackage *) (buffer + sizeof(PackageType));
2343
*type = cPropertyActiveDescendentChangePackage;
2344
pkg->vmID = (long) dialogWindow;
2345
2346
// make new Global Refs and send events only to those ATs that want 'em
2347
AccessBridgeATInstance *ati = ATs;
2348
while (ati != (AccessBridgeATInstance *) 0) {
2349
if (ati->accessibilityEventMask & cPropertyActiveDescendentChangeEvent) {
2350
2351
PrintDebugString("[INFO]: sending to AT");
2352
2353
// make new GlobalRefs for this AT
2354
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2355
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2356
pkg->oldActiveDescendentAccessibleContext = (JOBJECT64)env->NewGlobalRef(oldValue);
2357
pkg->newActiveDescendentAccessibleContext = (JOBJECT64)env->NewGlobalRef(newValue);
2358
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2359
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2360
" GlobalRef'd Source: %p"\
2361
" GlobalRef'd OldActiveDescendentAC: %p"\
2362
" GlobalRef'd NewActiveDescendentAC: %p"\
2363
, pkg->Event, pkg->AccessibleContextSource, pkg->oldActiveDescendentAccessibleContext, pkg->newActiveDescendentAccessibleContext);
2364
#else // JOBJECT64 is jlong (64 bit)
2365
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2366
" GlobalRef'd Source: %016I64X"\
2367
" GlobalRef'd OldActiveDescendentAC: %016I64X"\
2368
" GlobalRef'd NewActiveDescendentAC: %016I64X"\
2369
, pkg->Event, pkg->AccessibleContextSource, pkg->oldActiveDescendentAccessibleContext, pkg->newActiveDescendentAccessibleContext);
2370
#endif
2371
2372
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyActiveDescendentChangeEvent);
2373
}
2374
ati = ati->nextATInstance;
2375
}
2376
PrintDebugString("[INFO]: done with propertyActiveChange event");
2377
}
2378
2379
/**
2380
* firePropertyValueChange
2381
*
2382
*/
2383
void
2384
JavaAccessBridge::firePropertyTableModelChange(JNIEnv *env, jobject callingObj,
2385
jobject event, jobject source,
2386
jstring oldValue, jstring newValue){
2387
2388
PrintDebugString("[INFO]: Java_com_sun_java_accessibility_AccessBridge_propertyTableModelChange(%p, %p, %p, %p, %p, %p)",
2389
env, callingObj, event,
2390
source, oldValue, newValue);
2391
2392
// sanity check
2393
if (ATs == (AccessBridgeATInstance *) 0) {
2394
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2395
return; // panic!
2396
}
2397
2398
// common setup
2399
const wchar_t *stringBytes;
2400
char buffer[sizeof(PackageType) + sizeof(PropertyTableModelChangePackage)];
2401
PackageType *type = (PackageType *) buffer;
2402
PropertyTableModelChangePackage *pkg = (PropertyTableModelChangePackage *) (buffer + sizeof(PackageType));
2403
*type = cPropertyTableModelChangePackage;
2404
pkg->vmID = (long) dialogWindow;
2405
2406
// make new Global Refs and send events only to those ATs that want 'em
2407
AccessBridgeATInstance *ati = ATs;
2408
while (ati != (AccessBridgeATInstance *) 0) {
2409
if (ati->accessibilityEventMask & cPropertyTableModelChangeEvent) {
2410
2411
PrintDebugString("[INFO]: sending to AT");
2412
2413
// make new GlobalRefs for this AT
2414
pkg->Event = (JOBJECT64)env->NewGlobalRef(event);
2415
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source);
2416
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2417
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2418
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
2419
#else // JOBJECT64 is jlong (64 bit)
2420
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2421
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2422
#endif
2423
2424
if (oldValue != (jstring) 0) {
2425
stringBytes = (const wchar_t *) env->GetStringChars(oldValue, 0);
2426
if (stringBytes == NULL) {
2427
if (!env->ExceptionCheck()) {
2428
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2429
if (cls != NULL) {
2430
env->ThrowNew(cls, NULL);
2431
}
2432
}
2433
return;
2434
}
2435
wcsncpy(pkg->oldValue, stringBytes, (sizeof(pkg->oldValue) / sizeof(wchar_t)));
2436
env->ReleaseStringChars(oldValue, stringBytes);
2437
} else {
2438
wcsncpy(pkg->oldValue, L"(null)", (sizeof(pkg->oldValue) / sizeof(wchar_t)));
2439
}
2440
2441
if (newValue != (jstring) 0) {
2442
stringBytes = (const wchar_t *) env->GetStringChars(newValue, 0);
2443
if (stringBytes == NULL) {
2444
if (!env->ExceptionCheck()) {
2445
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2446
if (cls != NULL) {
2447
env->ThrowNew(cls, NULL);
2448
}
2449
}
2450
return;
2451
}
2452
wcsncpy(pkg->newValue, stringBytes, (sizeof(pkg->newValue) / sizeof(wchar_t)));
2453
env->ReleaseStringChars(newValue, stringBytes);
2454
} else {
2455
wcsncpy(pkg->newValue, L"(null)", (sizeof(pkg->newValue) / sizeof(wchar_t)));
2456
}
2457
2458
ati->sendAccessibilityEventPackage(buffer, sizeof(buffer), cPropertyTableModelChangeEvent);
2459
}
2460
ati = ati->nextATInstance;
2461
}
2462
PrintDebugString("[INFO]: done with propertyTableModelChange event");
2463
}
2464
2465
2466
2467
#ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
2468
#define PRINT_GLOBALREFS() \
2469
PrintDebugString("[INFO]: GlobalRef'd Event: %p"\
2470
" GlobalRef'd Source: %p", pkg->Event, pkg->AccessibleContextSource);
2471
#else // JOBJECT64 is jlong (64 bit)
2472
#define PRINT_GLOBALREFS() \
2473
PrintDebugString("[INFO]: GlobalRef'd Event: %016I64X"\
2474
" GlobalRef'd Source: %016I64X", pkg->Event, pkg->AccessibleContextSource);
2475
#endif
2476
2477
#define FIRE_EVENT(function, packageStruct, packageConstant, eventConstant) \
2478
void JavaAccessBridge::function(JNIEnv *env, jobject callingObj, \
2479
jobject eventObj, jobject source) { \
2480
\
2481
PrintDebugString("[INFO]: Firing event id = %d(%p, %p, %p, %p); vmID = %X", \
2482
eventConstant, env, callingObj, eventObj, source, dialogWindow);\
2483
\
2484
/* sanity check */ \
2485
if (ATs == (AccessBridgeATInstance *) 0) { \
2486
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)"); \
2487
return; /* panic! */ \
2488
} \
2489
\
2490
/* common setup */ \
2491
char buffer[sizeof(PackageType) + sizeof(packageStruct)]; \
2492
PackageType *type = (PackageType *) buffer; \
2493
packageStruct *pkg = (packageStruct *) (buffer + sizeof(PackageType)); \
2494
*type = packageConstant; \
2495
pkg->vmID = (long) dialogWindow; \
2496
\
2497
/* make new Global Refs, send events only to those ATs that want 'em */ \
2498
AccessBridgeATInstance *ati = ATs; \
2499
while (ati != (AccessBridgeATInstance *) 0) { \
2500
PrintDebugString("[INFO]: javaEventMask = %X eventConstant=%d pkg->vmID=%X",\
2501
ati->javaEventMask, eventConstant, pkg->vmID ); \
2502
if (ati->javaEventMask & eventConstant) { \
2503
\
2504
PrintDebugString("[INFO]: sending to AT"); \
2505
/* make new GlobalRefs for this AT */ \
2506
pkg->Event = (JOBJECT64)env->NewGlobalRef(eventObj); \
2507
pkg->AccessibleContextSource = (JOBJECT64)env->NewGlobalRef(source); \
2508
PRINT_GLOBALREFS() \
2509
\
2510
ati->sendJavaEventPackage(buffer, sizeof(buffer), eventConstant); \
2511
} \
2512
ati = ati->nextATInstance; \
2513
} \
2514
PrintDebugString("[INFO]: done with firing AWT event"); \
2515
}
2516
2517
void JavaAccessBridge::javaShutdown(JNIEnv *env, jobject callingObj) {
2518
2519
PrintDebugString("[INFO]: Firing event id = %d(%p, %p); vmID = %X",
2520
cJavaShutdownEvent, env, callingObj, dialogWindow);
2521
2522
/* sanity check */
2523
if (ATs == (AccessBridgeATInstance *) 0) {
2524
PrintDebugString("[ERROR]: ATs == 0! (shouldn't happen here!)");
2525
return; /* panic! */
2526
}
2527
2528
/* common setup */
2529
char buffer[sizeof(PackageType) + sizeof(JavaShutdownPackage)];
2530
PackageType *type = (PackageType *) buffer;
2531
JavaShutdownPackage *pkg = (JavaShutdownPackage *) (buffer + sizeof(PackageType));
2532
*type = cJavaShutdownPackage;
2533
pkg->vmID = (long) dialogWindow;
2534
2535
/* make new Global Refs, send events only to those ATs that want 'em */
2536
AccessBridgeATInstance *ati = ATs;
2537
while (ati != (AccessBridgeATInstance *) 0) {
2538
if (ati->javaEventMask & cJavaShutdownEvent) {
2539
PrintDebugString("[INFO]: sending to AT");
2540
ati->sendJavaEventPackage(buffer, sizeof(buffer), cJavaShutdownEvent);
2541
}
2542
ati = ati->nextATInstance;
2543
}
2544
PrintDebugString("[INFO]: done with firing AWT event");
2545
}
2546
2547
FIRE_EVENT(fireFocusGained, FocusGainedPackage, cFocusGainedPackage, cFocusGainedEvent)
2548
FIRE_EVENT(fireFocusLost, FocusLostPackage, cFocusLostPackage, cFocusLostEvent)
2549
FIRE_EVENT(fireCaretUpdate, CaretUpdatePackage, cCaretUpdatePackage, cCaretUpdateEvent)
2550
FIRE_EVENT(fireMouseClicked, MouseClickedPackage, cMouseClickedPackage, cMouseClickedEvent)
2551
FIRE_EVENT(fireMouseEntered, MouseEnteredPackage, cMouseEnteredPackage, cMouseEnteredEvent)
2552
FIRE_EVENT(fireMouseExited, MouseExitedPackage, cMouseExitedPackage, cMouseExitedEvent)
2553
FIRE_EVENT(fireMousePressed, MousePressedPackage, cMousePressedPackage, cMousePressedEvent)
2554
FIRE_EVENT(fireMouseReleased, MouseReleasedPackage, cMouseReleasedPackage, cMouseReleasedEvent)
2555
FIRE_EVENT(fireMenuCanceled, MenuCanceledPackage, cMenuCanceledPackage, cMenuCanceledEvent)
2556
FIRE_EVENT(fireMenuDeselected, MenuDeselectedPackage, cMenuDeselectedPackage, cMenuDeselectedEvent)
2557
FIRE_EVENT(fireMenuSelected, MenuSelectedPackage, cMenuSelectedPackage, cMenuSelectedEvent)
2558
FIRE_EVENT(firePopupMenuCanceled, PopupMenuCanceledPackage, cPopupMenuCanceledPackage, cPopupMenuCanceledEvent)
2559
FIRE_EVENT(firePopupMenuWillBecomeInvisible, PopupMenuWillBecomeInvisiblePackage, cPopupMenuWillBecomeInvisiblePackage, cPopupMenuWillBecomeInvisibleEvent)
2560
FIRE_EVENT(firePopupMenuWillBecomeVisible, PopupMenuWillBecomeVisiblePackage, cPopupMenuWillBecomeVisiblePackage, cPopupMenuWillBecomeVisibleEvent)
2561
2562
2563
// -----------------------------
2564
2565
2566
extern "C" { // event stuff from AccessBridge.h, generated by JNI
2567
2568
JNIEXPORT void JNICALL
2569
Java_com_sun_java_accessibility_AccessBridge_sendDebugString(JNIEnv *env, jobject callingObj, jstring debugStr) {
2570
2571
const wchar_t *stringBytes;
2572
stringBytes = (const wchar_t *) env->GetStringChars(debugStr, 0);
2573
if (stringBytes == NULL) {
2574
if (!env->ExceptionCheck()) {
2575
jclass cls = env->FindClass("java/lang/OutOfMemoryError");
2576
if (cls != NULL) {
2577
env->ThrowNew(cls, NULL);
2578
}
2579
}
2580
return;
2581
}
2582
wPrintJavaDebugString(L"AccessBridge.java: %ls", stringBytes);
2583
env->ReleaseStringChars(debugStr, stringBytes);
2584
}
2585
2586
JNIEXPORT void JNICALL
2587
Java_com_sun_java_accessibility_AccessBridge_propertyCaretChange(JNIEnv *env, jobject callingObj,
2588
jobject event, jobject source,
2589
jint oldValue, jint newValue) {
2590
theJavaAccessBridge->firePropertyCaretChange(env, callingObj,
2591
event, source,
2592
oldValue, newValue);
2593
}
2594
2595
JNIEXPORT void JNICALL
2596
Java_com_sun_java_accessibility_AccessBridge_propertyDescriptionChange(JNIEnv *env, jobject callingObj,
2597
jobject event, jobject source,
2598
jstring oldValue, jstring newValue) {
2599
theJavaAccessBridge->firePropertyDescriptionChange(env, callingObj,
2600
event, source,
2601
oldValue, newValue);
2602
}
2603
2604
JNIEXPORT void JNICALL
2605
Java_com_sun_java_accessibility_AccessBridge_propertyNameChange(JNIEnv *env, jobject callingObj,
2606
jobject event, jobject source,
2607
jstring oldValue, jstring newValue) {
2608
theJavaAccessBridge->firePropertyNameChange(env, callingObj,
2609
event, source,
2610
oldValue, newValue);
2611
}
2612
2613
JNIEXPORT void JNICALL
2614
Java_com_sun_java_accessibility_AccessBridge_propertySelectionChange(JNIEnv *env, jobject callingObj,
2615
jobject event, jobject source) {
2616
theJavaAccessBridge->firePropertySelectionChange(env, callingObj,
2617
event, source);
2618
}
2619
2620
JNIEXPORT void JNICALL
2621
Java_com_sun_java_accessibility_AccessBridge_propertyStateChange(JNIEnv *env, jobject callingObj,
2622
jobject event, jobject source,
2623
jstring oldValue, jstring newValue) {
2624
theJavaAccessBridge->firePropertyStateChange(env, callingObj,
2625
event, source,
2626
oldValue, newValue);
2627
}
2628
2629
JNIEXPORT void JNICALL
2630
Java_com_sun_java_accessibility_AccessBridge_propertyTextChange(JNIEnv *env, jobject callingObj,
2631
jobject event, jobject source) {
2632
theJavaAccessBridge->firePropertyTextChange(env, callingObj,
2633
event, source);
2634
}
2635
2636
JNIEXPORT void JNICALL
2637
Java_com_sun_java_accessibility_AccessBridge_propertyValueChange(JNIEnv *env, jobject callingObj,
2638
jobject event, jobject source,
2639
jstring oldValue, jstring newValue) {
2640
theJavaAccessBridge->firePropertyValueChange(env, callingObj,
2641
event, source,
2642
oldValue, newValue);
2643
}
2644
2645
JNIEXPORT void JNICALL
2646
Java_com_sun_java_accessibility_AccessBridge_propertyVisibleDataChange(JNIEnv *env, jobject callingObj,
2647
jobject event, jobject source) {
2648
theJavaAccessBridge->firePropertyVisibleDataChange(env, callingObj,
2649
event, source);
2650
}
2651
2652
JNIEXPORT void JNICALL
2653
Java_com_sun_java_accessibility_AccessBridge_propertyChildChange(JNIEnv *env, jobject callingObj,
2654
jobject event, jobject source,
2655
jobject oldValue, jobject newValue) {
2656
theJavaAccessBridge->firePropertyChildChange(env, callingObj,
2657
event, source,
2658
oldValue, newValue);
2659
}
2660
2661
JNIEXPORT void JNICALL
2662
Java_com_sun_java_accessibility_AccessBridge_propertyActiveDescendentChange(JNIEnv *env, jobject callingObj,
2663
jobject event, jobject source,
2664
jobject oldValue,
2665
jobject newValue) {
2666
theJavaAccessBridge->firePropertyActiveDescendentChange(env, callingObj,
2667
event, source,
2668
oldValue, newValue);
2669
}
2670
2671
JNIEXPORT void JNICALL
2672
Java_com_sun_java_accessibility_AccessBridge_propertyTableModelChange(JNIEnv *env, jobject callingObj,
2673
jobject event, jobject source,
2674
jstring oldValue, jstring newValue) {
2675
2676
theJavaAccessBridge->firePropertyTableModelChange(env, callingObj,
2677
event, source,
2678
oldValue, newValue);
2679
}
2680
2681
#define HANDLE_STANDARD_EVENT_FROM_JAVA(function, method) \
2682
JNIEXPORT void JNICALL \
2683
function(JNIEnv *env, jobject callingObj, jobject event, jobject source) { \
2684
theJavaAccessBridge->method(env, callingObj, event, source); \
2685
}
2686
2687
2688
JNIEXPORT void JNICALL
2689
Java_com_sun_java_accessibility_AccessBridge_javaShutdown(JNIEnv *env, jobject callingObj) {
2690
theJavaAccessBridge->javaShutdown(env, callingObj);
2691
}
2692
2693
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_focusGained, fireFocusGained)
2694
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_focusLost, fireFocusLost)
2695
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_caretUpdate, fireCaretUpdate)
2696
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseClicked, fireMouseClicked)
2697
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseEntered, fireMouseEntered)
2698
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseExited, fireMouseExited)
2699
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mousePressed, fireMousePressed)
2700
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_mouseReleased, fireMouseReleased)
2701
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuCanceled, fireMenuCanceled)
2702
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuDeselected, fireMenuDeselected)
2703
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_menuSelected, fireMenuSelected)
2704
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuCanceled, firePopupMenuCanceled)
2705
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuWillBecomeInvisible, firePopupMenuWillBecomeInvisible)
2706
HANDLE_STANDARD_EVENT_FROM_JAVA(Java_com_sun_java_accessibility_AccessBridge_popupMenuWillBecomeVisible, firePopupMenuWillBecomeVisible)
2707
2708
}
2709
2710