1 /*
2 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 /*
27 * A class to manage firing Accessibility events to Windows AT
28 */
29
30 #include "AccessBridgeDebug.h"
31 #include "AccessBridgeEventHandler.h"
32 #include "AccessBridgePackages.h"
33 #include "WinAccessBridge.h"
34
35 DEBUG_CODE(extern HWND theDialogWindow);
36 extern "C" {
37 DEBUG_CODE(void AppendToCallInfo(char *s));
38 }
39
40
41 // -----------------------------
42
43 /**
44 * Initialization. Set all callbacks to null
45 */
AccessBridgeEventHandler()46 AccessBridgeEventHandler::AccessBridgeEventHandler() {
47 javaEventMask = 0;
48 accessibilityEventMask = 0;
49
50 propertyChangeFP = (AccessBridge_PropertyChangeFP) NULL;
51 javaShutdownFP = (AccessBridge_JavaShutdownFP) NULL;
52 focusGainedFP = (AccessBridge_FocusGainedFP) NULL;
53 focusLostFP = (AccessBridge_FocusLostFP) NULL;
54 caretUpdateFP = (AccessBridge_CaretUpdateFP) NULL;
55 mouseClickedFP = (AccessBridge_MouseClickedFP) NULL;
56 mouseEnteredFP = (AccessBridge_MouseEnteredFP) NULL;
57 mouseExitedFP = (AccessBridge_MouseExitedFP) NULL;
58 mousePressedFP = (AccessBridge_MousePressedFP) NULL;
59 mouseReleasedFP = (AccessBridge_MouseReleasedFP) NULL;
60 menuCanceledFP = (AccessBridge_MenuCanceledFP) NULL;
61 menuDeselectedFP = (AccessBridge_MenuDeselectedFP) NULL;
62 menuSelectedFP = (AccessBridge_MenuSelectedFP) NULL;
63 popupMenuCanceledFP = (AccessBridge_PopupMenuCanceledFP) NULL;
64 popupMenuWillBecomeInvisibleFP = (AccessBridge_PopupMenuWillBecomeInvisibleFP) NULL;
65 popupMenuWillBecomeVisibleFP = (AccessBridge_PopupMenuWillBecomeVisibleFP) NULL;
66
67 propertyNameChangeFP = (AccessBridge_PropertyNameChangeFP) NULL;
68 propertyDescriptionChangeFP = (AccessBridge_PropertyDescriptionChangeFP) NULL;
69 propertyStateChangeFP = (AccessBridge_PropertyStateChangeFP) NULL;
70 propertyValueChangeFP = (AccessBridge_PropertyValueChangeFP) NULL;
71 propertySelectionChangeFP = (AccessBridge_PropertySelectionChangeFP) NULL;
72 propertyTextChangeFP = (AccessBridge_PropertyTextChangeFP) NULL;
73 propertyCaretChangeFP = (AccessBridge_PropertyCaretChangeFP) NULL;
74 propertyVisibleDataChangeFP = (AccessBridge_PropertyVisibleDataChangeFP) NULL;
75 propertyChildChangeFP = (AccessBridge_PropertyChildChangeFP) NULL;
76 propertyActiveDescendentChangeFP = (AccessBridge_PropertyActiveDescendentChangeFP) NULL;
77
78 propertyTableModelChangeFP = (AccessBridge_PropertyTableModelChangeFP) NULL;
79
80 }
81
82 /**
83 * Destruction.
84 */
~AccessBridgeEventHandler()85 AccessBridgeEventHandler::~AccessBridgeEventHandler() {
86 }
87
88
89 // ------------ Event handling methods
90
91 #define SET_JAVA_EVENT_FP(function, eventFP, callbackFP, eventConstant) \
92 void AccessBridgeEventHandler::function(eventFP fp, WinAccessBridge *wab) { \
93 callbackFP = fp; \
94 if (fp != (eventFP) 0) { \
95 javaEventMask |= eventConstant; \
96 wab->addJavaEventNotification(eventConstant); \
97 } else { \
98 javaEventMask &= (0xFFFFFFFF - eventConstant); \
99 wab->removeJavaEventNotification(eventConstant); \
100 } \
101 }
102
SET_JAVA_EVENT_FP(setPropertyChangeFP,AccessBridge_PropertyChangeFP,propertyChangeFP,cPropertyChangeEvent)103 SET_JAVA_EVENT_FP(setPropertyChangeFP, AccessBridge_PropertyChangeFP, propertyChangeFP, cPropertyChangeEvent)
104 SET_JAVA_EVENT_FP(setJavaShutdownFP, AccessBridge_JavaShutdownFP, javaShutdownFP, cJavaShutdownEvent)
105 SET_JAVA_EVENT_FP(setFocusGainedFP, AccessBridge_FocusGainedFP, focusGainedFP, cFocusGainedEvent)
106 SET_JAVA_EVENT_FP(setFocusLostFP, AccessBridge_FocusLostFP, focusLostFP, cFocusLostEvent)
107 SET_JAVA_EVENT_FP(setCaretUpdateFP, AccessBridge_CaretUpdateFP, caretUpdateFP, cCaretUpdateEvent)
108 SET_JAVA_EVENT_FP(setMouseClickedFP, AccessBridge_MouseClickedFP, mouseClickedFP, cMouseClickedEvent)
109 SET_JAVA_EVENT_FP(setMouseEnteredFP, AccessBridge_MouseEnteredFP, mouseEnteredFP, cMouseEnteredEvent)
110 SET_JAVA_EVENT_FP(setMouseExitedFP, AccessBridge_MouseExitedFP, mouseExitedFP, cMouseExitedEvent)
111 SET_JAVA_EVENT_FP(setMousePressedFP, AccessBridge_MousePressedFP, mousePressedFP, cMousePressedEvent)
112 SET_JAVA_EVENT_FP(setMouseReleasedFP, AccessBridge_MouseReleasedFP, mouseReleasedFP, cMouseReleasedEvent)
113 SET_JAVA_EVENT_FP(setMenuCanceledFP, AccessBridge_MenuCanceledFP, menuCanceledFP, cMenuCanceledEvent)
114 SET_JAVA_EVENT_FP(setMenuDeselectedFP, AccessBridge_MenuDeselectedFP, menuDeselectedFP, cMenuDeselectedEvent)
115 SET_JAVA_EVENT_FP(setMenuSelectedFP, AccessBridge_MenuSelectedFP, menuSelectedFP, cMenuSelectedEvent)
116 SET_JAVA_EVENT_FP(setPopupMenuCanceledFP, AccessBridge_PopupMenuCanceledFP, popupMenuCanceledFP, cPopupMenuCanceledEvent)
117 SET_JAVA_EVENT_FP(setPopupMenuWillBecomeInvisibleFP, AccessBridge_PopupMenuWillBecomeInvisibleFP, popupMenuWillBecomeInvisibleFP, cPopupMenuWillBecomeInvisibleEvent)
118 SET_JAVA_EVENT_FP(setPopupMenuWillBecomeVisibleFP, AccessBridge_PopupMenuWillBecomeVisibleFP, popupMenuWillBecomeVisibleFP, cPopupMenuWillBecomeVisibleEvent)
119
120 #define SET_ACCESSIBILITY_EVENT_FP(function, eventFP, callbackFP, eventConstant) \
121 void AccessBridgeEventHandler::function(eventFP fp, WinAccessBridge *wab) { \
122 callbackFP = fp; \
123 if (fp != (eventFP) 0) { \
124 accessibilityEventMask |= eventConstant; \
125 wab->addAccessibilityEventNotification(eventConstant); \
126 } else { \
127 accessibilityEventMask &= (0xFFFFFFFF - eventConstant); \
128 wab->removeAccessibilityEventNotification(eventConstant); \
129 } \
130 }
131
132
133 SET_ACCESSIBILITY_EVENT_FP(setPropertyNameChangeFP, AccessBridge_PropertyNameChangeFP, propertyNameChangeFP, cPropertyNameChangeEvent)
134 SET_ACCESSIBILITY_EVENT_FP(setPropertyDescriptionChangeFP, AccessBridge_PropertyDescriptionChangeFP, propertyDescriptionChangeFP, cPropertyDescriptionChangeEvent)
135 SET_ACCESSIBILITY_EVENT_FP(setPropertyStateChangeFP, AccessBridge_PropertyStateChangeFP, propertyStateChangeFP, cPropertyStateChangeEvent)
136 SET_ACCESSIBILITY_EVENT_FP(setPropertyValueChangeFP, AccessBridge_PropertyValueChangeFP, propertyValueChangeFP, cPropertyValueChangeEvent)
137 SET_ACCESSIBILITY_EVENT_FP(setPropertySelectionChangeFP, AccessBridge_PropertySelectionChangeFP, propertySelectionChangeFP, cPropertySelectionChangeEvent)
138 SET_ACCESSIBILITY_EVENT_FP(setPropertyTextChangeFP, AccessBridge_PropertyTextChangeFP, propertyTextChangeFP, cPropertyTextChangeEvent)
139 SET_ACCESSIBILITY_EVENT_FP(setPropertyCaretChangeFP, AccessBridge_PropertyCaretChangeFP, propertyCaretChangeFP, cPropertyCaretChangeEvent)
140 SET_ACCESSIBILITY_EVENT_FP(setPropertyVisibleDataChangeFP, AccessBridge_PropertyVisibleDataChangeFP, propertyVisibleDataChangeFP, cPropertyVisibleDataChangeEvent)
141 SET_ACCESSIBILITY_EVENT_FP(setPropertyChildChangeFP, AccessBridge_PropertyChildChangeFP, propertyChildChangeFP, cPropertyChildChangeEvent)
142 SET_ACCESSIBILITY_EVENT_FP(setPropertyActiveDescendentChangeFP, AccessBridge_PropertyActiveDescendentChangeFP, propertyActiveDescendentChangeFP, cPropertyActiveDescendentChangeEvent)
143
144 SET_ACCESSIBILITY_EVENT_FP(setPropertyTableModelChangeFP, AccessBridge_PropertyTableModelChangeFP, propertyTableModelChangeFP, cPropertyTableModelChangeEvent)
145
146
147 /**
148 * propertyChange - extends the Java method call to Windows:
149 * propertyChange(PropertyChangeEvent e, )
150 *
151 * Note: PropertyChangeEvent object passed in is a globalReference;
152 * It is critical that releaseJavaObject() be called
153 * on the PropertyChangeEvent once it is no longer needed,
154 * otherwise the JavaVM/JNI will suffer memory leaks
155 *
156 */
157 void
158 AccessBridgeEventHandler::firePropertyChange(long vmID,
159 JOBJECT64 event, JOBJECT64 source,
160 wchar_t *property, wchar_t *oldName,
161 wchar_t *newName) {
162 DEBUG_CODE(char debugBuf[255]);
163 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
164 DEBUG_CODE(sprintf(debugBuf, "\r\nCalling firePropertyChange(%p, %p):\r\n", event, source));
165 #else // JOBJECT64 is jlong (64 bit)
166 DEBUG_CODE(sprintf(debugBuf, "\r\nCalling firePropertyChange(%016I64X, %016I64X):\r\n", event, source));
167 #endif
168 DEBUG_CODE(AppendToCallInfo(debugBuf));
169
170 if (propertyChangeFP != (AccessBridge_PropertyChangeFP) 0) {
171 propertyChangeFP(vmID, event, source, property, oldName, newName);
172 } else {
173 DEBUG_CODE(AppendToCallInfo("[ERROR]: propertyChangeFP == 0"));
174 }
175 }
176
177
178 /**
179 * FIRE_EVENT - macro for all fireXXX methods (which
180 * all are basically identical to one another...)
181 *
182 * Note: the event and source objects passed in are globalReferences;
183 * It is critical that releaseJavaObject() be called
184 * on them once they are no longer needed, otherwise
185 * the JavaVM/JNI will suffer memory leaks
186 *
187 */
188 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
189 const char fireEventDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s(%p, %p); vmID = %X\r\n";
190 #else // JOBJECT64 is jlong (64 bit)
191 const char fireEventDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s(%016I64X, %016I64X); vmID = %X\r\n";
192 #endif
193
194 #define FIRE_EVENT(method, FPprototype, eventFP) \
195 void AccessBridgeEventHandler::method(long vmID, JOBJECT64 event, JOBJECT64 source) { \
196 DEBUG_CODE(char debugBuf[255]); \
197 DEBUG_CODE(sprintf(debugBuf, fireEventDebugString, #method, event, source, vmID)); \
198 DEBUG_CODE(AppendToCallInfo(debugBuf)); \
199 if (eventFP != (FPprototype) 0) { \
200 eventFP(vmID, event, source); \
201 } else { \
202 DEBUG_CODE(AppendToCallInfo("[ERROR]: eventFP == 0")); \
203 } \
204 }
205
fireJavaShutdown(long vmID)206 void AccessBridgeEventHandler::fireJavaShutdown(long vmID) {
207 DEBUG_CODE(char debugBuf[255]);
208 DEBUG_CODE(sprintf(debugBuf, "[INFO]: Calling fireJavaShutdown; vmID = %X\r\n", vmID));
209 DEBUG_CODE(AppendToCallInfo(debugBuf));
210 if (javaShutdownFP != (AccessBridge_JavaShutdownFP) 0) {
211 javaShutdownFP(vmID);
212 } else {
213 DEBUG_CODE(AppendToCallInfo("[ERROR]: javaShutdownFP == 0"));
214 }
215 }
216
217 FIRE_EVENT(fireFocusGained, AccessBridge_FocusGainedFP, focusGainedFP)
218 FIRE_EVENT(fireFocusLost, AccessBridge_FocusLostFP, focusLostFP)
219 FIRE_EVENT(fireCaretUpdate, AccessBridge_CaretUpdateFP, caretUpdateFP)
220 FIRE_EVENT(fireMouseClicked, AccessBridge_MouseClickedFP, mouseClickedFP)
221 FIRE_EVENT(fireMouseEntered, AccessBridge_MouseEnteredFP, mouseEnteredFP)
222 FIRE_EVENT(fireMouseExited, AccessBridge_MouseExitedFP, mouseExitedFP)
223 FIRE_EVENT(fireMousePressed, AccessBridge_MousePressedFP, mousePressedFP)
224 FIRE_EVENT(fireMouseReleased, AccessBridge_MouseReleasedFP, mouseReleasedFP)
225 FIRE_EVENT(fireMenuCanceled, AccessBridge_MenuCanceledFP, menuCanceledFP)
226 FIRE_EVENT(fireMenuDeselected, AccessBridge_MenuDeselectedFP, menuDeselectedFP)
227 FIRE_EVENT(fireMenuSelected, AccessBridge_MenuSelectedFP, menuSelectedFP)
228 FIRE_EVENT(firePopupMenuCanceled, AccessBridge_PopupMenuCanceledFP, popupMenuCanceledFP)
229 FIRE_EVENT(firePopupMenuWillBecomeInvisible, AccessBridge_PopupMenuWillBecomeInvisibleFP, popupMenuWillBecomeInvisibleFP)
230 FIRE_EVENT(firePopupMenuWillBecomeVisible, AccessBridge_PopupMenuWillBecomeVisibleFP, popupMenuWillBecomeVisibleFP)
231
232
233 /**
234 * FIRE_PROPERTY_CHANGE - macro for all fireXXX methods (which
235 * all are basically identical to one another...
236 *
237 * Note: the event and source objects passed in are globalReferences;
238 * It is critical that releaseJavaObject() be called
239 * on them once they are no longer needed, otherwise
240 * the JavaVM/JNI will suffer memory leaks
241 *
242 */
243 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
244 const char firePropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing a no-param property change (%p, %p):\r\n";
245 #else // JOBJECT64 is jlong (64 bit)
246 const char firePropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing a no-param property change (%016I64X, %016I64X):\r\n";
247 #endif
248
249 #define FIRE_PROPERTY_CHANGE(method, FPprototype, eventFP) \
250 void AccessBridgeEventHandler::method(long vmID, JOBJECT64 event, JOBJECT64 source) { \
251 DEBUG_CODE(char debugBuf[255]); \
252 DEBUG_CODE(sprintf(debugBuf, firePropertyChangeDebugString, #method, event, source)); \
253 DEBUG_CODE(AppendToCallInfo(debugBuf)); \
254 if (eventFP != (FPprototype) 0) { \
255 eventFP(vmID, event, source); \
256 } else { \
257 DEBUG_CODE(AppendToCallInfo("[ERROR]: eventFP == 0")); \
258 } \
259 }
260
261 /**
262 * FIRE_STRING_PROPERTY_CHANGE - macro for all firePropertyXXXChange methods
263 * that have strings as the old/new values
264
265 * Note: the event and source objects passed in are globalReferences;
266 * It is critical that releaseJavaObject() be called
267 * on them once they are no longer needed, otherwise
268 * the JavaVM/JNI will suffer memory leaks
269 *
270 */
271 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
272 const char fireStringPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing a string property change (%p, %p, %ls, %ls):\r\n";
273 #else // JOBJECT64 is jlong (64 bit)
274 const char fireStringPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing a string property change (%016I64X, %016I64X, %ls, %ls):\r\n";
275 #endif
276
277 #define FIRE_STRING_PROPERTY_CHANGE(method, FPprototype, eventFP, oldValue, newValue) \
278 void AccessBridgeEventHandler::method(long vmID, JOBJECT64 event, JOBJECT64 source, \
279 wchar_t *oldValue, wchar_t *newValue) { \
280 DEBUG_CODE(char debugBuf[255]); \
281 DEBUG_CODE(sprintf(debugBuf, fireStringPropertyChangeDebugString, #method, event, source, oldValue, newValue)); \
282 DEBUG_CODE(AppendToCallInfo(debugBuf)); \
283 if (eventFP != (FPprototype) 0) { \
284 eventFP(vmID, event, source, oldValue, newValue); \
285 } else { \
286 DEBUG_CODE(AppendToCallInfo("[ERROR]: eventFP == 0\r\n")); \
287 } \
288 }
289
290 /**
291 * FIRE_INT_PROPERTY_CHANGE - macro for all firePropertyXXXChange methods
292 * that have ints as the old/new values
293 *
294 * Note: the event and source objects passed in are globalReferences;
295 * It is critical that releaseJavaObject() be called
296 * on them once they are no longer needed, otherwise
297 * the JavaVM/JNI will suffer memory leaks
298 *
299 */
300 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
301 const char fireIntPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing an int property change (%p, %p, %d, %d):\r\n";
302 #else // JOBJECT64 is jlong (64 bit)
303 const char fireIntPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing an int property change (%016I64X, %016I64X, %d, %d):\r\n";
304 #endif
305
306 #define FIRE_INT_PROPERTY_CHANGE(method, FPprototype, eventFP) \
307 void AccessBridgeEventHandler::method(long vmID, JOBJECT64 event, JOBJECT64 source, \
308 int oldValue, int newValue) { \
309 DEBUG_CODE(char debugBuf[255]); \
310 DEBUG_CODE(sprintf(debugBuf, fireIntPropertyChangeDebugString, #method, event, source, oldValue, newValue)); \
311 DEBUG_CODE(AppendToCallInfo(debugBuf)); \
312 if (eventFP != (FPprototype) 0) { \
313 eventFP(vmID, event, source, oldValue, newValue); \
314 } else { \
315 DEBUG_CODE(AppendToCallInfo("[ERROR]: eventFP == 0\r\n")); \
316 } \
317 }
318
319 /**
320 * FIRE_AC_PROPERTY_CHANGE - macro for all firePropertyXXXChange methods
321 * that have jobjects (AccessibleContexts) as the old/new values
322 *
323 * Note: the event and source objects passed in are globalReferences;
324 * It is critical that releaseJavaObject() be called
325 * on them once they are no longer needed, otherwise
326 * the JavaVM/JNI will suffer memory leaks
327 *
328 */
329 #ifdef ACCESSBRIDGE_ARCH_LEGACY // JOBJECT64 is jobject (32 bit pointer)
330 const char fireACPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing an AC property change (%p, %p, %p, %p):\r\n";
331 #else // JOBJECT64 is jlong (64 bit)
332 const char fireACPropertyChangeDebugString[] = "[INFO]: In AccessBridgeEventHandler::%s, Firing an AC property change (%016I64X, %016I64X, %016I64X, %016I64X):\r\n";
333 #endif
334
335 #define FIRE_AC_PROPERTY_CHANGE(method, FPprototype, eventFP) \
336 void AccessBridgeEventHandler::method(long vmID, JOBJECT64 event, JOBJECT64 source, \
337 JOBJECT64 oldValue, JOBJECT64 newValue) { \
338 DEBUG_CODE(char debugBuf[255]); \
339 DEBUG_CODE(sprintf(debugBuf, fireACPropertyChangeDebugString, #method, event, source, oldValue, newValue)); \
340 DEBUG_CODE(AppendToCallInfo(debugBuf)); \
341 if (eventFP != (FPprototype) 0) { \
342 eventFP(vmID, event, source, oldValue, newValue); \
343 } else { \
344 DEBUG_CODE(AppendToCallInfo("[ERROR]: eventFP == 0\r\n")); \
345 } \
346 }
347
348 FIRE_STRING_PROPERTY_CHANGE(firePropertyNameChange,
349 AccessBridge_PropertyNameChangeFP,
350 propertyNameChangeFP, oldName, newName)
351 FIRE_STRING_PROPERTY_CHANGE(firePropertyDescriptionChange,
352 AccessBridge_PropertyDescriptionChangeFP,
353 propertyDescriptionChangeFP,
354 oldDescription, newDescription)
355 FIRE_STRING_PROPERTY_CHANGE(firePropertyStateChange,
356 AccessBridge_PropertyStateChangeFP,
357 propertyStateChangeFP, oldState, newState)
358 FIRE_STRING_PROPERTY_CHANGE(firePropertyValueChange,
359 AccessBridge_PropertyValueChangeFP,
360 propertyValueChangeFP, oldValue, newValue)
361 FIRE_PROPERTY_CHANGE(firePropertySelectionChange,
362 AccessBridge_PropertySelectionChangeFP,
363 propertySelectionChangeFP)
364 FIRE_PROPERTY_CHANGE(firePropertyTextChange,
365 AccessBridge_PropertyTextChangeFP,
366 propertyTextChangeFP);
367 FIRE_INT_PROPERTY_CHANGE(firePropertyCaretChange,
368 AccessBridge_PropertyCaretChangeFP,
369 propertyCaretChangeFP)
370 FIRE_PROPERTY_CHANGE(firePropertyVisibleDataChange,
371 AccessBridge_PropertyVisibleDataChangeFP,
372 propertyVisibleDataChangeFP)
373 FIRE_AC_PROPERTY_CHANGE(firePropertyChildChange,
374 AccessBridge_PropertyChildChangeFP,
375 propertyChildChangeFP)
376 FIRE_AC_PROPERTY_CHANGE(firePropertyActiveDescendentChange,
377 AccessBridge_PropertyActiveDescendentChangeFP,
378 propertyActiveDescendentChangeFP)
379
380 FIRE_STRING_PROPERTY_CHANGE(firePropertyTableModelChange,
381 AccessBridge_PropertyTableModelChangeFP,
382 propertyTableModelChangeFP, oldValue, newValue)
383