< prev index next >
src/java.desktop/macosx/native/libawt_lwawt/awt/CTrayIcon.m
Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54096 : 8259651: [macOS] Replace JNF_COCOA_ENTER/EXIT macros
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
*** 24,34 ****
*/
#import "jni_util.h"
#import <AppKit/AppKit.h>
- #import <JavaNativeFoundation/JavaNativeFoundation.h>
#import "CTrayIcon.h"
#import "ThreadUtilities.h"
#include "GeomUtilities.h"
#import "LWCToolkit.h"
--- 24,33 ----
*** 73,83 ****
return self;
}
-(void) dealloc {
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! JNFDeleteGlobalRef(env, peer);
[[NSStatusBar systemStatusBar] removeStatusItem: theItem];
// Its a bad idea to force the item to release our view by setting
// the item's view to nil: it can lead to a crash in some scenarios.
--- 72,82 ----
return self;
}
-(void) dealloc {
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
! (*env)->DeleteGlobalRef(env, peer);
[[NSStatusBar systemStatusBar] removeStatusItem: theItem];
// Its a bad idea to force the item to release our view by setting
// the item's view to nil: it can lead to a crash in some scenarios.
*** 144,156 ****
if ([AWTToolkit hasPreciseScrollingDeltas: event]) {
deltaX = [event scrollingDeltaX] * 0.1;
deltaY = [event scrollingDeltaY] * 0.1;
}
! static JNF_CLASS_CACHE(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
! static JNF_CTOR_CACHE(jctor_NSEvent, jc_NSEvent, "(IIIIIIIIDDI)V");
! jobject jEvent = JNFNewObject(env, jctor_NSEvent,
[event type],
[event modifierFlags],
clickCount,
[event buttonNumber],
(jint)localPoint.x, (jint)localPoint.y,
--- 143,155 ----
if ([AWTToolkit hasPreciseScrollingDeltas: event]) {
deltaX = [event scrollingDeltaX] * 0.1;
deltaY = [event scrollingDeltaY] * 0.1;
}
! DECLARE_CLASS(jc_NSEvent, "sun/lwawt/macosx/NSEvent");
! DECLARE_METHOD(jctor_NSEvent, jc_NSEvent, "<init>", "(IIIIIIIIDDI)V");
! jobject jEvent = (*env)->NewObject(env, jc_NSEvent, jctor_NSEvent,
[event type],
[event modifierFlags],
clickCount,
[event buttonNumber],
(jint)localPoint.x, (jint)localPoint.y,
*** 158,170 ****
deltaY,
deltaX,
[AWTToolkit scrollStateWithEvent: event]);
CHECK_NULL(jEvent);
! static JNF_CLASS_CACHE(jc_TrayIcon, "sun/lwawt/macosx/CTrayIcon");
! static JNF_MEMBER_CACHE(jm_handleMouseEvent, jc_TrayIcon, "handleMouseEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
! JNFCallVoidMethod(env, peer, jm_handleMouseEvent, jEvent);
(*env)->DeleteLocalRef(env, jEvent);
}
@end //AWTTrayIcon
//================================================
--- 157,170 ----
deltaY,
deltaX,
[AWTToolkit scrollStateWithEvent: event]);
CHECK_NULL(jEvent);
! DECLARE_CLASS(jc_TrayIcon, "sun/lwawt/macosx/CTrayIcon");
! DECLARE_METHOD(jm_handleMouseEvent, jc_TrayIcon, "handleMouseEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
! (*env)->CallVoidMethod(env, peer, jm_handleMouseEvent, jEvent);
! CHECK_EXCEPTION();
(*env)->DeleteLocalRef(env, jEvent);
}
@end //AWTTrayIcon
//================================================
*** 266,278 ****
// don't show the menu on ctrl+click: it triggers ACTION event, like right click
if (([event modifierFlags] & NSControlKeyMask) == 0) {
//find CTrayIcon.getPopupMenuModel method and call it to get popup menu ptr.
JNIEnv *env = [ThreadUtilities getJNIEnv];
! static JNF_CLASS_CACHE(jc_CTrayIcon, "sun/lwawt/macosx/CTrayIcon");
! static JNF_MEMBER_CACHE(jm_getPopupMenuModel, jc_CTrayIcon, "getPopupMenuModel", "()J");
! jlong res = JNFCallLongMethod(env, trayIcon.peer, jm_getPopupMenuModel);
if (res != 0) {
CPopupMenu *cmenu = jlong_to_ptr(res);
NSMenu* menu = [cmenu menu];
[menu setDelegate:self];
--- 266,279 ----
// don't show the menu on ctrl+click: it triggers ACTION event, like right click
if (([event modifierFlags] & NSControlKeyMask) == 0) {
//find CTrayIcon.getPopupMenuModel method and call it to get popup menu ptr.
JNIEnv *env = [ThreadUtilities getJNIEnv];
! DECLARE_CLASS(jc_CTrayIcon, "sun/lwawt/macosx/CTrayIcon");
! DECLARE_METHOD(jm_getPopupMenuModel, jc_CTrayIcon, "getPopupMenuModel", "()J");
! jlong res = (*env)->CallLongMethod(env, trayIcon.peer, jm_getPopupMenuModel);
! CHECK_EXCEPTION();
if (res != 0) {
CPopupMenu *cmenu = jlong_to_ptr(res);
NSMenu* menu = [cmenu menu];
[menu setDelegate:self];
*** 329,346 ****
*/
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeCreate
(JNIEnv *env, jobject peer) {
__block AWTTrayIcon *trayIcon = nil;
! JNF_COCOA_ENTER(env);
! jobject thePeer = JNFNewGlobalRef(env, peer);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
trayIcon = [[AWTTrayIcon alloc] initWithPeer:thePeer];
}];
! JNF_COCOA_EXIT(env);
return ptr_to_jlong(trayIcon);
}
--- 330,347 ----
*/
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeCreate
(JNIEnv *env, jobject peer) {
__block AWTTrayIcon *trayIcon = nil;
! JNI_COCOA_ENTER(env);
! jobject thePeer = (*env)->NewGlobalRef(env, peer);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
trayIcon = [[AWTTrayIcon alloc] initWithPeer:thePeer];
}];
! JNI_COCOA_EXIT(env);
return ptr_to_jlong(trayIcon);
}
*** 359,426 ****
* Method: nativeSetToolTip
* Signature: (JLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeSetToolTip
(JNIEnv *env, jobject self, jlong model, jstring jtooltip) {
! JNF_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
! NSString *tooltip = JNFJavaToNSString(env, jtooltip);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[icon setTooltip:tooltip];
}];
! JNF_COCOA_EXIT(env);
}
/*
* Class: sun_lwawt_macosx_CTrayIcon
* Method: setNativeImage
* Signature: (JJZ)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_setNativeImage
(JNIEnv *env, jobject self, jlong model, jlong imagePtr, jboolean autosize) {
! JNF_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[icon setImage:jlong_to_ptr(imagePtr) sizing:autosize];
}];
! JNF_COCOA_EXIT(env);
}
JNIEXPORT jobject JNICALL
Java_sun_lwawt_macosx_CTrayIcon_nativeGetIconLocation
(JNIEnv *env, jobject self, jlong model) {
jobject jpt = NULL;
! JNF_COCOA_ENTER(env);
__block NSPoint pt = NSZeroPoint;
AWTTrayIcon *icon = jlong_to_ptr(model);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
NSPoint loc = [icon getLocationOnScreen];
pt = ConvertNSScreenPoint(env, loc);
}];
jpt = NSToJavaPoint(env, pt);
! JNF_COCOA_EXIT(env);
return jpt;
}
JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CTrayIcon_nativeShowNotification
(JNIEnv *env, jobject self, jlong model, jobject jcaption, jobject jtext,
long nsimage) {
! JNF_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
! NSString *caption = JNFJavaToNSString(env, jcaption);
! NSString *text = JNFJavaToNSString(env, jtext);
NSImage * contentImage = jlong_to_ptr(nsimage);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = caption;
--- 360,427 ----
* Method: nativeSetToolTip
* Signature: (JLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_nativeSetToolTip
(JNIEnv *env, jobject self, jlong model, jstring jtooltip) {
! JNI_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
! NSString *tooltip = JavaStringToNSString(env, jtooltip);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[icon setTooltip:tooltip];
}];
! JNI_COCOA_EXIT(env);
}
/*
* Class: sun_lwawt_macosx_CTrayIcon
* Method: setNativeImage
* Signature: (JJZ)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CTrayIcon_setNativeImage
(JNIEnv *env, jobject self, jlong model, jlong imagePtr, jboolean autosize) {
! JNI_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[icon setImage:jlong_to_ptr(imagePtr) sizing:autosize];
}];
! JNI_COCOA_EXIT(env);
}
JNIEXPORT jobject JNICALL
Java_sun_lwawt_macosx_CTrayIcon_nativeGetIconLocation
(JNIEnv *env, jobject self, jlong model) {
jobject jpt = NULL;
! JNI_COCOA_ENTER(env);
__block NSPoint pt = NSZeroPoint;
AWTTrayIcon *icon = jlong_to_ptr(model);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
NSPoint loc = [icon getLocationOnScreen];
pt = ConvertNSScreenPoint(env, loc);
}];
jpt = NSToJavaPoint(env, pt);
! JNI_COCOA_EXIT(env);
return jpt;
}
JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CTrayIcon_nativeShowNotification
(JNIEnv *env, jobject self, jlong model, jobject jcaption, jobject jtext,
long nsimage) {
! JNI_COCOA_ENTER(env);
AWTTrayIcon *icon = jlong_to_ptr(model);
! NSString *caption = JavaStringToNSString(env, jcaption);
! NSString *text = JavaStringToNSString(env, jtext);
NSImage * contentImage = jlong_to_ptr(nsimage);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.title = caption;
*** 430,436 ****
[[NSUserNotificationCenter defaultUserNotificationCenter]
deliverNotification:notification];
}];
! JNF_COCOA_EXIT(env);
}
--- 431,437 ----
[[NSUserNotificationCenter defaultUserNotificationCenter]
deliverNotification:notification];
}];
! JNI_COCOA_EXIT(env);
}
< prev index next >