jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m
changeset 15985 b9e25a486549
parent 15322 3638f33225ec
child 23010 6dadb192ad81
equal deleted inserted replaced
15984:b9b67f6eeb86 15985:b9e25a486549
  1111     static JNF_STATIC_MEMBER_CACHE(jm_getFocusOwner, sjc_CAccessibility, "getFocusOwner", "(Ljava/awt/Component;)Ljavax/accessibility/Accessible;");
  1111     static JNF_STATIC_MEMBER_CACHE(jm_getFocusOwner, sjc_CAccessibility, "getFocusOwner", "(Ljava/awt/Component;)Ljavax/accessibility/Accessible;");
  1112 
  1112 
  1113     JNIEnv *env = [ThreadUtilities getJNIEnv];
  1113     JNIEnv *env = [ThreadUtilities getJNIEnv];
  1114     id value = nil;
  1114     id value = nil;
  1115 
  1115 
  1116     // This code frequently gets called indirectly by Java when VoiceOver is active.
  1116     jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
  1117     // Basically, we just have to know when we going to be a bad state, and do something "special".
  1117     if (focused != NULL) {
  1118     // Note that while NSApplication isn't technically correct, we post a focus changed notification
  1118         if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
  1119     // (which will call this method, but with the correct codepath) shortly afterwards. See +postFocusChanged.
  1119             value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
  1120     if (sInPerformFromJava) {
       
  1121         return [NSApplication sharedApplication];
       
  1122     } else {
       
  1123         jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
       
  1124         if (focused != NULL) {
       
  1125             if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
       
  1126                 value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
       
  1127             }
       
  1128         }
  1120         }
  1129     }
  1121     }
  1130 
  1122 
  1131     if (value == nil) {
  1123     if (value == nil) {
  1132         value = self;
  1124         value = self;
  1147 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged
  1139 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged
  1148 (JNIEnv *env, jobject jthis)
  1140 (JNIEnv *env, jobject jthis)
  1149 {
  1141 {
  1150 
  1142 
  1151 JNF_COCOA_ENTER(env);
  1143 JNF_COCOA_ENTER(env);
  1152     [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) onObject:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO awtMode:NO];
  1144     [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) on:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO];
  1153 JNF_COCOA_EXIT(env);
  1145 JNF_COCOA_EXIT(env);
  1154 }
  1146 }
  1155 
  1147 
  1156 
  1148 
  1157 
  1149 
  1162  */
  1154  */
  1163 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged
  1155 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged
  1164 (JNIEnv *env, jclass jklass, jlong element)
  1156 (JNIEnv *env, jclass jklass, jlong element)
  1165 {
  1157 {
  1166 JNF_COCOA_ENTER(env);
  1158 JNF_COCOA_ENTER(env);
  1167     [ThreadUtilities performOnMainThread:@selector(postValueChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
  1159     [ThreadUtilities performOnMainThread:@selector(postValueChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
  1168 JNF_COCOA_EXIT(env);
  1160 JNF_COCOA_EXIT(env);
  1169 }
  1161 }
  1170 
  1162 
  1171 /*
  1163 /*
  1172  * Class:     sun_lwawt_macosx_CAccessible
  1164  * Class:     sun_lwawt_macosx_CAccessible
  1175  */
  1167  */
  1176 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged
  1168 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged
  1177 (JNIEnv *env, jclass jklass, jlong element)
  1169 (JNIEnv *env, jclass jklass, jlong element)
  1178 {
  1170 {
  1179 JNF_COCOA_ENTER(env);
  1171 JNF_COCOA_ENTER(env);
  1180     [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
  1172     [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
  1181 JNF_COCOA_EXIT(env);
  1173 JNF_COCOA_EXIT(env);
  1182 }
  1174 }
  1183 
  1175 
  1184 
  1176 
  1185 /*
  1177 /*
  1189  */
  1181  */
  1190 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem
  1182 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem
  1191 (JNIEnv *env, jclass jklass, jlong element)
  1183 (JNIEnv *env, jclass jklass, jlong element)
  1192 {
  1184 {
  1193 JNF_COCOA_ENTER(env);
  1185 JNF_COCOA_ENTER(env);
  1194     [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
  1186     [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
  1195 JNF_COCOA_EXIT(env);
  1187 JNF_COCOA_EXIT(env);
  1196 }
  1188 }
  1197 
  1189 
  1198 @implementation TabGroupAccessibility
  1190 @implementation TabGroupAccessibility
  1199 
  1191