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