src/macosx/native/sun/awt/JavaComponentAccessibility.m

Print this page




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];