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 |