< prev index next >
src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityAction.m
Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54097 : 8259869: [macOS] Remove desktop module dependencies on JNF Reference APIs
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion
rev 54101 : 8259585: Accessible actions do not work on mac os x
Reviewed-by: serb
*** 1,7 ****
/*
! * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 25,93 ****
#import "JavaAccessibilityAction.h"
#import "JavaAccessibilityUtilities.h"
#import "ThreadUtilities.h"
@implementation JavaAxAction
- (id)initWithEnv:(JNIEnv *)env withAccessibleAction:(jobject)accessibleAction withIndex:(jint)index withComponent:(jobject)component
{
self = [super init];
if (self) {
! fAccessibleAction = JNFNewWeakGlobalRef(env, accessibleAction);
fIndex = index;
! fComponent = JNFNewWeakGlobalRef(env, component);
}
return self;
}
- (void)dealloc
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! JNFDeleteWeakGlobalRef(env, fAccessibleAction);
fAccessibleAction = NULL;
! JNFDeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
}
- (NSString *)getDescription
{
- static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleActionDescription, sjc_CAccessibility, "getAccessibleActionDescription", "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)Ljava/lang/String;");
-
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject fCompLocal = (*env)->NewLocalRef(env, fComponent);
if ((*env)->IsSameObject(env, fCompLocal, NULL)) {
return nil;
}
NSString *str = nil;
! jstring jstr = JNFCallStaticObjectMethod( env,
jm_getAccessibleActionDescription,
! fAccessibleAction,
fIndex,
fCompLocal );
if (jstr != NULL) {
! str = JNFJavaToNSString(env, jstr); // AWT_THREADING Safe (AWTRunLoopMode)
(*env)->DeleteLocalRef(env, jstr);
}
(*env)->DeleteLocalRef(env, fCompLocal);
return str;
}
- (void)perform
{
- static JNF_STATIC_MEMBER_CACHE(jm_doAccessibleAction, sjc_CAccessibility, "doAccessibleAction", "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)V");
-
JNIEnv* env = [ThreadUtilities getJNIEnv];
!
! JNFCallStaticVoidMethod(env, jm_doAccessibleAction, fAccessibleAction, fIndex, fComponent); // AWT_THREADING Safe (AWTRunLoopMode)
}
@end
--- 25,109 ----
#import "JavaAccessibilityAction.h"
#import "JavaAccessibilityUtilities.h"
#import "ThreadUtilities.h"
+ #import "JNIUtilities.h"
@implementation JavaAxAction
- (id)initWithEnv:(JNIEnv *)env withAccessibleAction:(jobject)accessibleAction withIndex:(jint)index withComponent:(jobject)component
{
self = [super init];
if (self) {
! fAccessibleAction = (*env)->NewWeakGlobalRef(env, accessibleAction);
! CHECK_EXCEPTION();
fIndex = index;
! fComponent = (*env)->NewWeakGlobalRef(env, component);
! CHECK_EXCEPTION();
}
return self;
}
- (void)dealloc
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! (*env)->DeleteWeakGlobalRef(env, fAccessibleAction);
fAccessibleAction = NULL;
! (*env)->DeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
}
- (NSString *)getDescription
{
JNIEnv* env = [ThreadUtilities getJNIEnv];
+ DECLARE_CLASS_RETURN(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility", nil);
+ DECLARE_STATIC_METHOD_RETURN(jm_getAccessibleActionDescription, sjc_CAccessibility,
+ "getAccessibleActionDescription",
+ "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)Ljava/lang/String;", nil);
+ /* WeakGlobalRefs can be cleared at any time, so first get strong local refs and use those */
jobject fCompLocal = (*env)->NewLocalRef(env, fComponent);
if ((*env)->IsSameObject(env, fCompLocal, NULL)) {
return nil;
}
+ jobject fAccessibleActionLocal = (*env)->NewLocalRef(env, fAccessibleAction);
+ if ((*env)->IsSameObject(env, fAccessibleActionLocal, NULL)) {
+ (*env)->DeleteLocalRef(env, fCompLocal);
+ return nil;
+ }
NSString *str = nil;
! jstring jstr = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility,
jm_getAccessibleActionDescription,
! fAccessibleActionLocal,
fIndex,
fCompLocal );
+ CHECK_EXCEPTION();
if (jstr != NULL) {
! str = JavaStringToNSString(env, jstr);
(*env)->DeleteLocalRef(env, jstr);
}
(*env)->DeleteLocalRef(env, fCompLocal);
+ (*env)->DeleteLocalRef(env, fAccessibleActionLocal);
return str;
}
- (void)perform
{
JNIEnv* env = [ThreadUtilities getJNIEnv];
! DECLARE_CLASS(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility");
! DECLARE_STATIC_METHOD(jm_doAccessibleAction, sjc_CAccessibility, "doAccessibleAction",
! "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)V");
!
! (*env)->CallStaticVoidMethod(env, sjc_CAccessibility, jm_doAccessibleAction,
! fAccessibleAction, fIndex, fComponent);
! CHECK_EXCEPTION();
}
@end
*** 95,119 ****
- (id)initWithEnv:(JNIEnv *)env withTabGroup:(jobject)tabGroup withIndex:(jint)index withComponent:(jobject)component
{
self = [super init];
if (self) {
! fTabGroup = JNFNewWeakGlobalRef(env, tabGroup);
fIndex = index;
! fComponent = JNFNewWeakGlobalRef(env, component);
}
return self;
}
- (void)dealloc
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! JNFDeleteWeakGlobalRef(env, fTabGroup);
fTabGroup = NULL;
! JNFDeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
}
--- 111,137 ----
- (id)initWithEnv:(JNIEnv *)env withTabGroup:(jobject)tabGroup withIndex:(jint)index withComponent:(jobject)component
{
self = [super init];
if (self) {
! fTabGroup = (*env)->NewWeakGlobalRef(env, tabGroup);
! CHECK_EXCEPTION();
fIndex = index;
! fComponent = (*env)->NewWeakGlobalRef(env, component);
! CHECK_EXCEPTION();
}
return self;
}
- (void)dealloc
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! (*env)->DeleteWeakGlobalRef(env, fTabGroup);
fTabGroup = NULL;
! (*env)->DeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
}
< prev index next >