1096 value = self; 1097 } 1098 1099 if ([value accessibilityIsIgnored]) { 1100 value = NSAccessibilityUnignoredAncestor(value); 1101 } 1102 1103 #ifdef JAVA_AX_DEBUG 1104 NSLog(@"%s: %@", __FUNCTION__, value); 1105 #endif 1106 return value; 1107 } 1108 1109 - (id)accessibilityFocusedUIElement 1110 { 1111 static JNF_STATIC_MEMBER_CACHE(jm_getFocusOwner, sjc_CAccessibility, "getFocusOwner", "(Ljava/awt/Component;)Ljavax/accessibility/Accessible;"); 1112 1113 JNIEnv *env = [ThreadUtilities getJNIEnv]; 1114 id value = nil; 1115 1116 // This code frequently gets called indirectly by Java when VoiceOver is active. 1117 // Basically, we just have to know when we going to be a bad state, and do something "special". 1118 // Note that while NSApplication isn't technically correct, we post a focus changed notification 1119 // (which will call this method, but with the correct codepath) shortly afterwards. See +postFocusChanged. 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 } 1129 } 1130 1131 if (value == nil) { 1132 value = self; 1133 } 1134 #ifdef JAVA_AX_DEBUG 1135 NSLog(@"%s: %@", __FUNCTION__, value); 1136 #endif 1137 return value; 1138 } 1139 1140 @end 1141 1142 /* 1143 * Class: sun_lwawt_macosx_CAccessibility 1144 * Method: focusChanged 1145 * Signature: ()V 1146 */ 1147 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged 1148 (JNIEnv *env, jobject jthis) 1149 { 1150 1151 JNF_COCOA_ENTER(env); 1152 [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) onObject:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO awtMode:NO]; 1153 JNF_COCOA_EXIT(env); 1154 } 1155 1156 1157 1158 /* 1159 * Class: sun_lwawt_macosx_CAccessible 1160 * Method: valueChanged 1161 * Signature: (I)V 1162 */ 1163 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged 1164 (JNIEnv *env, jclass jklass, jlong element) 1165 { 1166 JNF_COCOA_ENTER(env); 1167 [ThreadUtilities performOnMainThread:@selector(postValueChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; 1168 JNF_COCOA_EXIT(env); 1169 } 1170 1171 /* 1172 * Class: sun_lwawt_macosx_CAccessible 1173 * Method: selectionChanged 1174 * Signature: (I)V 1175 */ 1176 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged 1177 (JNIEnv *env, jclass jklass, jlong element) 1178 { 1179 JNF_COCOA_ENTER(env); 1180 [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; 1181 JNF_COCOA_EXIT(env); 1182 } 1183 1184 1185 /* 1186 * Class: sun_lwawt_macosx_CAccessible 1187 * Method: unregisterFromCocoaAXSystem 1188 * Signature: (I)V 1189 */ 1190 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem 1191 (JNIEnv *env, jclass jklass, jlong element) 1192 { 1193 JNF_COCOA_ENTER(env); 1194 [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO]; 1195 JNF_COCOA_EXIT(env); 1196 } 1197 1198 @implementation TabGroupAccessibility 1199 1200 - (id)initWithParent:(NSObject *)parent withEnv:(JNIEnv *)env withAccessible:(jobject)accessible withIndex:(jint)index withView:(NSView *)view withJavaRole:(NSString *)javaRole 1201 { 1202 self = [super initWithParent:parent withEnv:env withAccessible:accessible withIndex:index withView:view withJavaRole:javaRole]; 1203 if (self) { 1204 _numTabs = -1; //flag for uninitialized numTabs 1205 } 1206 return self; 1207 } 1208 1209 - (NSArray *)initializeAttributeNamesWithEnv:(JNIEnv *)env 1210 { 1211 NSMutableArray *names = (NSMutableArray *)[super initializeAttributeNamesWithEnv:env]; 1212 1213 [names addObject:NSAccessibilityTabsAttribute]; 1214 [names addObject:NSAccessibilityContentsAttribute]; | 1096 value = self; 1097 } 1098 1099 if ([value accessibilityIsIgnored]) { 1100 value = NSAccessibilityUnignoredAncestor(value); 1101 } 1102 1103 #ifdef JAVA_AX_DEBUG 1104 NSLog(@"%s: %@", __FUNCTION__, value); 1105 #endif 1106 return value; 1107 } 1108 1109 - (id)accessibilityFocusedUIElement 1110 { 1111 static JNF_STATIC_MEMBER_CACHE(jm_getFocusOwner, sjc_CAccessibility, "getFocusOwner", "(Ljava/awt/Component;)Ljavax/accessibility/Accessible;"); 1112 1113 JNIEnv *env = [ThreadUtilities getJNIEnv]; 1114 id value = nil; 1115 1116 jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop) 1117 if (focused != NULL) { 1118 if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) { 1119 value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView]; 1120 } 1121 } 1122 1123 if (value == nil) { 1124 value = self; 1125 } 1126 #ifdef JAVA_AX_DEBUG 1127 NSLog(@"%s: %@", __FUNCTION__, value); 1128 #endif 1129 return value; 1130 } 1131 1132 @end 1133 1134 /* 1135 * Class: sun_lwawt_macosx_CAccessibility 1136 * Method: focusChanged 1137 * Signature: ()V 1138 */ 1139 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged 1140 (JNIEnv *env, jobject jthis) 1141 { 1142 1143 JNF_COCOA_ENTER(env); 1144 [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) on:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO]; 1145 JNF_COCOA_EXIT(env); 1146 } 1147 1148 1149 1150 /* 1151 * Class: sun_lwawt_macosx_CAccessible 1152 * Method: valueChanged 1153 * Signature: (I)V 1154 */ 1155 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged 1156 (JNIEnv *env, jclass jklass, jlong element) 1157 { 1158 JNF_COCOA_ENTER(env); 1159 [ThreadUtilities performOnMainThread:@selector(postValueChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO]; 1160 JNF_COCOA_EXIT(env); 1161 } 1162 1163 /* 1164 * Class: sun_lwawt_macosx_CAccessible 1165 * Method: selectionChanged 1166 * Signature: (I)V 1167 */ 1168 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged 1169 (JNIEnv *env, jclass jklass, jlong element) 1170 { 1171 JNF_COCOA_ENTER(env); 1172 [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO]; 1173 JNF_COCOA_EXIT(env); 1174 } 1175 1176 1177 /* 1178 * Class: sun_lwawt_macosx_CAccessible 1179 * Method: unregisterFromCocoaAXSystem 1180 * Signature: (I)V 1181 */ 1182 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSystem 1183 (JNIEnv *env, jclass jklass, jlong element) 1184 { 1185 JNF_COCOA_ENTER(env); 1186 [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO]; 1187 JNF_COCOA_EXIT(env); 1188 } 1189 1190 @implementation TabGroupAccessibility 1191 1192 - (id)initWithParent:(NSObject *)parent withEnv:(JNIEnv *)env withAccessible:(jobject)accessible withIndex:(jint)index withView:(NSView *)view withJavaRole:(NSString *)javaRole 1193 { 1194 self = [super initWithParent:parent withEnv:env withAccessible:accessible withIndex:index withView:view withJavaRole:javaRole]; 1195 if (self) { 1196 _numTabs = -1; //flag for uninitialized numTabs 1197 } 1198 return self; 1199 } 1200 1201 - (NSArray *)initializeAttributeNamesWithEnv:(JNIEnv *)env 1202 { 1203 NSMutableArray *names = (NSMutableArray *)[super initializeAttributeNamesWithEnv:env]; 1204 1205 [names addObject:NSAccessibilityTabsAttribute]; 1206 [names addObject:NSAccessibilityContentsAttribute]; |