< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m

Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion

*** 22,35 **** * or visit www.oracle.com if you need additional information or have any * questions. */ #import "JavaAccessibilityUtilities.h" #import <AppKit/AppKit.h> - #import <JavaNativeFoundation/JavaNativeFoundation.h> - static BOOL JavaAccessibilityIsSupportedAttribute(id element, NSString *attribute); static void JavaAccessibilityLogError(NSString *message); static void _JavaAccessibilityRaiseException(NSString *reason, SInt32 errorCode); static NSString *AttributeWithoutAXPrefix(NSString *attribute); --- 22,34 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ #import "JavaAccessibilityUtilities.h" + #import "JNIUtilities.h" #import <AppKit/AppKit.h> static BOOL JavaAccessibilityIsSupportedAttribute(id element, NSString *attribute); static void JavaAccessibilityLogError(NSString *message); static void _JavaAccessibilityRaiseException(NSString *reason, SInt32 errorCode); static NSString *AttributeWithoutAXPrefix(NSString *attribute);
*** 41,182 **** NSMutableDictionary *sRoles = nil; void initializeRoles(); // Unique ! static JNF_CLASS_CACHE(sjc_AccessibleState, "javax/accessibility/AccessibleState"); ! // Duplicate ! JNF_CLASS_CACHE(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility"); ! JNF_CLASS_CACHE(sjc_AccessibleComponent, "javax/accessibility/AccessibleComponent"); ! JNF_CLASS_CACHE(sjc_AccessibleContext, "javax/accessibility/AccessibleContext"); ! JNF_CLASS_CACHE(sjc_Accessible, "javax/accessibility/Accessible"); ! JNF_CLASS_CACHE(sjc_AccessibleRole, "javax/accessibility/AccessibleRole"); ! JNF_CLASS_CACHE(sjc_Point, "java/awt/Point"); ! JNF_CLASS_CACHE(sjc_AccessibleText, "javax/accessibility/AccessibleText"); ! ! JNF_MEMBER_CACHE(sjf_key, sjc_AccessibleRole, "key", "Ljava/lang/String;"); ! JNF_MEMBER_CACHE(sjf_X, sjc_Point, "x", "I"); ! JNF_MEMBER_CACHE(sjf_Y, sjc_Point, "y", "I"); NSSize getAxComponentSize(JNIEnv *env, jobject axComponent, jobject component) { ! static JNF_CLASS_CACHE(jc_Dimension, "java/awt/Dimension"); ! static JNF_MEMBER_CACHE(jf_width, jc_Dimension, "width", "I"); ! static JNF_MEMBER_CACHE(jf_height, jc_Dimension, "height", "I"); ! static JNF_STATIC_MEMBER_CACHE(jm_getSize, sjc_CAccessibility, "getSize", "(Ljavax/accessibility/AccessibleComponent;Ljava/awt/Component;)Ljava/awt/Dimension;"); ! jobject dimension = JNFCallStaticObjectMethod(env, jm_getSize, axComponent, component); // AWT_THREADING Safe (AWTRunLoopMode) if (dimension == NULL) return NSZeroSize; ! return NSMakeSize(JNFGetIntField(env, dimension, jf_width), JNFGetIntField(env, dimension, jf_height)); } NSString *getJavaRole(JNIEnv *env, jobject axComponent, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleRole, sjc_CAccessibility, "getAccessibleRole", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljava/lang/String;"); ! jobject axRole = JNFCallStaticObjectMethod(env, sjm_getAccessibleRole, axComponent, component); // AWT_THREADING Safe (AWTRunLoopMode) if (axRole == NULL) return @"unknown"; ! NSString* str = JNFJavaToNSString(env, axRole); (*env)->DeleteLocalRef(env, axRole); return str; } jobject getAxSelection(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleSelection, sjc_CAccessibility, "getAccessibleSelection", "(Ljavax/accessibility/AccessibleContext;Ljava/awt/Component;)Ljavax/accessibility/AccessibleSelection;"); ! return JNFCallStaticObjectMethod(env, jm_getAccessibleSelection, axContext, component); // AWT_THREADING Safe (AWTRunLoopMode) } jobject getAxContextSelection(JNIEnv *env, jobject axContext, jint index, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_ax_getAccessibleSelection, sjc_CAccessibility, "ax_getAccessibleSelection", "(Ljavax/accessibility/AccessibleContext;ILjava/awt/Component;)Ljavax/accessibility/Accessible;"); ! return JNFCallStaticObjectMethod(env, jm_ax_getAccessibleSelection, axContext, index, component); // AWT_THREADING Safe (AWTRunLoopMode) } void setAxContextSelection(JNIEnv *env, jobject axContext, jint index, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_addAccessibleSelection, sjc_CAccessibility, "addAccessibleSelection", "(Ljavax/accessibility/AccessibleContext;ILjava/awt/Component;)V"); ! JNFCallStaticVoidMethod(env, jm_addAccessibleSelection, axContext, index, component); // AWT_THREADING Safe (AWTRunLoopMode) } jobject getAxContext(JNIEnv *env, jobject accessible, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleContext, sjc_CAccessibility, "getAccessibleContext", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;"); ! return JNFCallStaticObjectMethod(env, jm_getAccessibleContext, accessible, component); // AWT_THREADING Safe (AWTRunLoopMode) } BOOL isChildSelected(JNIEnv *env, jobject accessible, jint index, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_isAccessibleChildSelected, sjc_CAccessibility, "isAccessibleChildSelected", "(Ljavax/accessibility/Accessible;ILjava/awt/Component;)Z"); ! return JNFCallStaticBooleanMethod(env, jm_isAccessibleChildSelected, accessible, index, component); // AWT_THREADING Safe (AWTRunLoopMode) } jobject getAxStateSet(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleStateSet, sjc_CAccessibility, "getAccessibleStateSet", "(Ljavax/accessibility/AccessibleContext;Ljava/awt/Component;)Ljavax/accessibility/AccessibleStateSet;"); ! return JNFCallStaticObjectMethod(env, jm_getAccessibleStateSet, axContext, component); // AWT_THREADING Safe (AWTRunLoopMode) } BOOL containsAxState(JNIEnv *env, jobject axContext, jobject axState, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_contains, sjc_CAccessibility, "contains", "(Ljavax/accessibility/AccessibleContext;Ljavax/accessibility/AccessibleState;Ljava/awt/Component;)Z"); ! return JNFCallStaticBooleanMethod(env, jm_contains, axContext, axState, component); // AWT_THREADING Safe (AWTRunLoopMode) } BOOL isVertical(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_VERTICAL, sjc_AccessibleState, "VERTICAL", "Ljavax/accessibility/AccessibleState;"); ! jobject axVertState = JNFGetStaticObjectField(env, jm_VERTICAL); BOOL vertical = containsAxState(env, axContext, axVertState, component); (*env)->DeleteLocalRef(env, axVertState); return vertical; } BOOL isHorizontal(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_HORIZONTAL, sjc_AccessibleState, "HORIZONTAL", "Ljavax/accessibility/AccessibleState;"); ! jobject axHorizState = JNFGetStaticObjectField(env, jm_HORIZONTAL); BOOL horizontal = containsAxState(env, axContext, axHorizState, component); (*env)->DeleteLocalRef(env, axHorizState); return horizontal; } BOOL isShowing(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_SHOWING, sjc_AccessibleState, "SHOWING", "Ljavax/accessibility/AccessibleState;"); ! jobject axVisibleState = JNFGetStaticObjectField(env, jm_SHOWING); BOOL showing = containsAxState(env, axContext, axVisibleState, component); (*env)->DeleteLocalRef(env, axVisibleState); return showing; } BOOL isSelectable(JNIEnv *env, jobject axContext, jobject component) { ! static JNF_STATIC_MEMBER_CACHE( jm_SELECTABLE, sjc_AccessibleState, "SELECTABLE", ! "Ljavax/accessibility/AccessibleState;" ); ! jobject axSelectableState = JNFGetStaticObjectField(env, jm_SELECTABLE); BOOL selectable = containsAxState(env, axContext, axSelectableState, component); (*env)->DeleteLocalRef(env, axSelectableState); return selectable; } NSPoint getAxComponentLocationOnScreen(JNIEnv *env, jobject axComponent, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_getLocationOnScreen, sjc_CAccessibility, "getLocationOnScreen", "(Ljavax/accessibility/AccessibleComponent;Ljava/awt/Component;)Ljava/awt/Point;"); ! jobject jpoint = JNFCallStaticObjectMethod(env, jm_getLocationOnScreen, axComponent, component); // AWT_THREADING Safe (AWTRunLoopMode) if (jpoint == NULL) return NSZeroPoint; ! return NSMakePoint(JNFGetIntField(env, jpoint, sjf_X), JNFGetIntField(env, jpoint, sjf_Y)); } jint getAxTextCharCount(JNIEnv *env, jobject axText, jobject component) { ! static JNF_STATIC_MEMBER_CACHE(jm_getCharCount, sjc_CAccessibility, "getCharCount", "(Ljavax/accessibility/AccessibleText;Ljava/awt/Component;)I"); ! return JNFCallStaticIntMethod(env, jm_getCharCount, axText, component); // AWT_THREADING Safe (AWTRunLoopMode) } // The following JavaAccessibility methods are copied from the corresponding // NSAccessibility methods in NSAccessibility.m. // --- 40,229 ---- NSMutableDictionary *sRoles = nil; void initializeRoles(); // Unique ! static jclass sjc_AccessibleState = NULL; ! #define GET_ACCESSIBLESTATE_CLASS_RETURN(ret) \ ! GET_CLASS_RETURN(sjc_AccessibleState, "javax/accessibility/AccessibleState", ret); ! static jclass sjc_CAccessibility = NULL; NSSize getAxComponentSize(JNIEnv *env, jobject axComponent, jobject component) { ! DECLARE_CLASS_RETURN(jc_Dimension, "java/awt/Dimension", NSZeroSize); ! DECLARE_FIELD_RETURN(jf_width, jc_Dimension, "width", "I", NSZeroSize); ! DECLARE_FIELD_RETURN(jf_height, jc_Dimension, "height", "I", NSZeroSize); ! DECLARE_STATIC_METHOD_RETURN(jm_getSize, sjc_CAccessibility, "getSize", ! "(Ljavax/accessibility/AccessibleComponent;Ljava/awt/Component;)Ljava/awt/Dimension;", NSZeroSize); ! jobject dimension = (*env)->CallStaticObjectMethod(env, jc_Dimension, jm_getSize, axComponent, component); ! CHECK_EXCEPTION(); if (dimension == NULL) return NSZeroSize; ! return NSMakeSize((*env)->GetIntField(env, dimension, jf_width), (*env)->GetIntField(env, dimension, jf_height)); } NSString *getJavaRole(JNIEnv *env, jobject axComponent, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(nil); ! DECLARE_STATIC_METHOD_RETURN(sjm_getAccessibleRole, sjc_CAccessibility, "getAccessibleRole", ! "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljava/lang/String;", nil); ! jobject axRole = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, sjm_getAccessibleRole, ! axComponent, component); ! CHECK_EXCEPTION(); if (axRole == NULL) return @"unknown"; ! NSString* str = JavaStringToNSString(env, axRole); (*env)->DeleteLocalRef(env, axRole); return str; } jobject getAxSelection(JNIEnv *env, jobject axContext, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(nil); ! DECLARE_STATIC_METHOD_RETURN(jm_getAccessibleSelection, sjc_CAccessibility, "getAccessibleSelection", ! "(Ljavax/accessibility/AccessibleContext;Ljava/awt/Component;)Ljavax/accessibility/AccessibleSelection;", nil); ! jobject o = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getAccessibleSelection, ! axContext, component); ! CHECK_EXCEPTION(); ! return o; } jobject getAxContextSelection(JNIEnv *env, jobject axContext, jint index, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(nil); ! DECLARE_STATIC_METHOD_RETURN(jm_ax_getAccessibleSelection, sjc_CAccessibility, "ax_getAccessibleSelection", ! "(Ljavax/accessibility/AccessibleContext;ILjava/awt/Component;)Ljavax/accessibility/Accessible;", nil); ! return (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_ax_getAccessibleSelection, ! axContext, index, component); ! CHECK_EXCEPTION(); } void setAxContextSelection(JNIEnv *env, jobject axContext, jint index, jobject component) { ! GET_CACCESSIBILITY_CLASS(); ! DECLARE_STATIC_METHOD(jm_addAccessibleSelection, sjc_CAccessibility, "addAccessibleSelection", ! "(Ljavax/accessibility/AccessibleContext;ILjava/awt/Component;)V"); ! (*env)->CallStaticVoidMethod(env, sjc_CAccessibility, jm_addAccessibleSelection, ! axContext, index, component); ! CHECK_EXCEPTION(); } jobject getAxContext(JNIEnv *env, jobject accessible, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(nil); ! DECLARE_STATIC_METHOD_RETURN(jm_getAccessibleContext, sjc_CAccessibility, "getAccessibleContext", ! "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;", nil); ! jobject o = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getAccessibleContext, ! accessible, component); ! CHECK_EXCEPTION(); ! return o; } BOOL isChildSelected(JNIEnv *env, jobject accessible, jint index, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(NO); ! DECLARE_STATIC_METHOD_RETURN(jm_isAccessibleChildSelected, sjc_CAccessibility, "isAccessibleChildSelected", ! "(Ljavax/accessibility/Accessible;ILjava/awt/Component;)Z", NO); ! jboolean b = (*env)->CallStaticBooleanMethod(env, sjc_CAccessibility, jm_isAccessibleChildSelected, ! accessible, index, component); ! CHECK_EXCEPTION(); ! return b; } jobject getAxStateSet(JNIEnv *env, jobject axContext, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(nil); ! DECLARE_STATIC_METHOD_RETURN(jm_getAccessibleStateSet, sjc_CAccessibility, "getAccessibleStateSet", ! "(Ljavax/accessibility/AccessibleContext;Ljava/awt/Component;)Ljavax/accessibility/AccessibleStateSet;", nil); ! jobject o = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getAccessibleStateSet, ! axContext, component); ! CHECK_EXCEPTION(); ! return o; } BOOL containsAxState(JNIEnv *env, jobject axContext, jobject axState, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(NO); ! DECLARE_STATIC_METHOD_RETURN(jm_contains, sjc_CAccessibility, "contains", ! "(Ljavax/accessibility/AccessibleContext;Ljavax/accessibility/AccessibleState;Ljava/awt/Component;)Z", NO); ! jboolean b = (*env)->CallStaticBooleanMethod(env, sjc_CAccessibility, jm_contains, axContext, axState, component); ! CHECK_EXCEPTION(); ! return b; } BOOL isVertical(JNIEnv *env, jobject axContext, jobject component) { ! GET_ACCESSIBLESTATE_CLASS_RETURN(NO); ! DECLARE_STATIC_FIELD_RETURN(jm_VERTICAL, sjc_AccessibleState, "VERTICAL", "Ljavax/accessibility/AccessibleState;", NO); ! jobject axVertState = (*env)->GetStaticObjectField(env, sjc_AccessibleState, jm_VERTICAL); ! CHECK_EXCEPTION_NULL_RETURN(axVertState, NO); BOOL vertical = containsAxState(env, axContext, axVertState, component); (*env)->DeleteLocalRef(env, axVertState); return vertical; } BOOL isHorizontal(JNIEnv *env, jobject axContext, jobject component) { ! GET_ACCESSIBLESTATE_CLASS_RETURN(NO); ! DECLARE_STATIC_FIELD_RETURN(jm_HORIZONTAL, sjc_AccessibleState, "HORIZONTAL", "Ljavax/accessibility/AccessibleState;", NO); ! jobject axHorizState = (*env)->GetStaticObjectField(env, sjc_AccessibleState, jm_HORIZONTAL); ! CHECK_EXCEPTION_NULL_RETURN(axHorizState, NO); BOOL horizontal = containsAxState(env, axContext, axHorizState, component); (*env)->DeleteLocalRef(env, axHorizState); return horizontal; } BOOL isShowing(JNIEnv *env, jobject axContext, jobject component) { ! GET_ACCESSIBLESTATE_CLASS_RETURN(NO); ! DECLARE_STATIC_FIELD_RETURN(jm_SHOWING, sjc_AccessibleState, "SHOWING", "Ljavax/accessibility/AccessibleState;", NO); ! jobject axVisibleState = (*env)->GetStaticObjectField(env, sjc_AccessibleState, jm_SHOWING); ! CHECK_EXCEPTION_NULL_RETURN(axVisibleState, NO); BOOL showing = containsAxState(env, axContext, axVisibleState, component); (*env)->DeleteLocalRef(env, axVisibleState); return showing; } BOOL isSelectable(JNIEnv *env, jobject axContext, jobject component) { ! GET_ACCESSIBLESTATE_CLASS_RETURN(NO); ! DECLARE_STATIC_FIELD_RETURN(jm_SELECTABLE, sjc_AccessibleState, "SELECTABLE", ! "Ljavax/accessibility/AccessibleState;", NO ); ! jobject axSelectableState = (*env)->GetStaticObjectField(env, sjc_AccessibleState, jm_SELECTABLE); ! CHECK_EXCEPTION_NULL_RETURN(axSelectableState, NO); BOOL selectable = containsAxState(env, axContext, axSelectableState, component); (*env)->DeleteLocalRef(env, axSelectableState); return selectable; } NSPoint getAxComponentLocationOnScreen(JNIEnv *env, jobject axComponent, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(NSZeroPoint); ! DECLARE_STATIC_METHOD_RETURN(jm_getLocationOnScreen, sjc_CAccessibility, "getLocationOnScreen", ! "(Ljavax/accessibility/AccessibleComponent;Ljava/awt/Component;)Ljava/awt/Point;", NSZeroPoint); ! DECLARE_CLASS_RETURN(sjc_Point, "java/awt/Point", NSZeroPoint); ! DECLARE_FIELD_RETURN(sjf_X, sjc_Point, "x", "I", NSZeroPoint); ! DECLARE_FIELD_RETURN(sjf_Y, sjc_Point, "y", "I", NSZeroPoint); ! jobject jpoint = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getLocationOnScreen, ! axComponent, component); ! CHECK_EXCEPTION(); if (jpoint == NULL) return NSZeroPoint; ! return NSMakePoint((*env)->GetIntField(env, jpoint, sjf_X), (*env)->GetIntField(env, jpoint, sjf_Y)); } jint getAxTextCharCount(JNIEnv *env, jobject axText, jobject component) { ! GET_CACCESSIBILITY_CLASS_RETURN(0); ! DECLARE_STATIC_METHOD_RETURN(jm_getCharCount, sjc_CAccessibility, "getCharCount", ! "(Ljavax/accessibility/AccessibleText;Ljava/awt/Component;)I", 0); ! int i = (*env)->CallStaticIntMethod(env, sjc_CAccessibility, jm_getCharCount, axText, component); ! CHECK_EXCEPTION(); ! return i; } // The following JavaAccessibility methods are copied from the corresponding // NSAccessibility methods in NSAccessibility.m. //
*** 263,273 **** * Signature: (Ljavax/accessibility/AccessibleRole;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_lwawt_macosx_CAccessibility_roleKey (JNIEnv *env, jclass clz, jobject axRole) { ! return JNFGetObjectField(env, axRole, sjf_key); } // errors from NSAccessibilityErrors void JavaAccessibilityRaiseSetAttributeToIllegalTypeException(const char *functionName, id element, NSString *attribute, id value) --- 310,322 ---- * Signature: (Ljavax/accessibility/AccessibleRole;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_lwawt_macosx_CAccessibility_roleKey (JNIEnv *env, jclass clz, jobject axRole) { ! DECLARE_CLASS_RETURN(sjc_AccessibleRole, "javax/accessibility/AccessibleRole", NULL); ! DECLARE_FIELD_RETURN(sjf_key, sjc_AccessibleRole, "key", "Ljava/lang/String;", NULL); ! return (*env)->GetObjectField(env, axRole, sjf_key); } // errors from NSAccessibilityErrors void JavaAccessibilityRaiseSetAttributeToIllegalTypeException(const char *functionName, id element, NSString *attribute, id value)
< prev index next >