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 */ 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 */ 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 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\r\n")); 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[] = "\r\nIn AccessBridgeEventHandler::%s(%p, %p); vmID = %X\r\n"; 190 #else // JOBJECT64 is jlong (64 bit) 191 const char fireEventDebugString[] = "\r\nIn 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\r\n")); \ 203 } \ 204 } 205 206 void AccessBridgeEventHandler::fireJavaShutdown(long vmID) { 207 DEBUG_CODE(char debugBuf[255]); 208 DEBUG_CODE(sprintf(debugBuf, "\r\nCalling 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\r\n")); 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[] = "\r\nIn AccessBridgeEventHandler::%s, Firing a no-param property change (%p, %p):\r\n"; 245 #else // JOBJECT64 is jlong (64 bit) 246 const char firePropertyChangeDebugString[] = "\r\nIn 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\r\n")); \ 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[] = "\r\nIn AccessBridgeEventHandler::%s, Firing a string property change (%p, %p, %ls, %ls):\r\n"; 273 #else // JOBJECT64 is jlong (64 bit) 274 const char fireStringPropertyChangeDebugString[] = "\r\nIn 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[] = "\r\nIn AccessBridgeEventHandler::%s, Firing an int property change (%p, %p, %d, %d):\r\n"; 302 #else // JOBJECT64 is jlong (64 bit) 303 const char fireIntPropertyChangeDebugString[] = "\r\nIn 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[] = "\r\nIn AccessBridgeEventHandler::%s, Firing an AC property change (%p, %p, %p, %p):\r\n"; 331 #else // JOBJECT64 is jlong (64 bit) 332 const char fireACPropertyChangeDebugString[] = "\r\nIn 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)