8031087: [Parfait] warnings from b121 for jdk/src/solaris/native/sun/xawt

Reviewed-by: anthony, pchelko, serb
This commit is contained in:
Alexander Zvegintsev 2014-04-07 17:41:16 +01:00
parent 5cd27375dd
commit 43246996f4
6 changed files with 290 additions and 229 deletions

View File

@ -62,7 +62,7 @@ static Atom decor_list[9];
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif
void
jboolean
awtJNI_ThreadYield(JNIEnv *env) {
static jclass threadClass = NULL;
@ -76,7 +76,7 @@ awtJNI_ThreadYield(JNIEnv *env) {
Boolean err = FALSE;
if (threadClass == NULL) {
jclass tc = (*env)->FindClass(env, "java/lang/Thread");
CHECK_NULL(tc);
CHECK_NULL_RETURN(tc, JNI_FALSE);
threadClass = (*env)->NewGlobalRef(env, tc);
(*env)->DeleteLocalRef(env, tc);
if (threadClass != NULL) {
@ -92,10 +92,11 @@ awtJNI_ThreadYield(JNIEnv *env) {
err = TRUE;
}
if (err) {
return;
return JNI_FALSE;
}
} /* threadClass == NULL*/
(*env)->CallStaticVoidMethod(env, threadClass, yieldMethodID);
DASSERT(!((*env)->ExceptionOccurred(env)));
return JNI_TRUE;
} /* awtJNI_ThreadYield() */

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2014, 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
@ -78,7 +78,7 @@ struct DPos {
int32_t echoC;
};
extern void awtJNI_ThreadYield(JNIEnv *env);
extern jboolean awtJNI_ThreadYield(JNIEnv *env);
/*
* Functions for accessing fields by name and signature

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2014, 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
@ -40,6 +40,7 @@
#include "awt_Component.h"
#include "awt_MenuComponent.h"
#include "awt_Font.h"
#include "awt_util.h"
#include "sun_awt_X11_XToolkit.h"
#include "java_awt_SystemColor.h"
@ -76,6 +77,8 @@ struct MenuComponentIDs menuComponentIDs;
#ifndef HEADLESS
extern Display* awt_init_Display(JNIEnv *env, jobject this);
extern void freeNativeStringArray(char **array, long length);
extern char** stringArrayToNative(JNIEnv *env, jobjectArray array, jsize * ret_length);
struct XFontPeerIDs xFontPeerIDs;
@ -103,9 +106,11 @@ Java_sun_awt_X11_XToolkit_initIDs
(JNIEnv *env, jclass clazz)
{
jfieldID fid = (*env)->GetStaticFieldID(env, clazz, "numLockMask", "I");
CHECK_NULL(fid);
awt_NumLockMask = (*env)->GetStaticIntField(env, clazz, fid);
DTRACE_PRINTLN1("awt_NumLockMask = %u", awt_NumLockMask);
fid = (*env)->GetStaticFieldID(env, clazz, "modLockIsShiftLock", "I");
CHECK_NULL(fid);
awt_ModLockIsShiftLock = (*env)->GetStaticIntField(env, clazz, fid) != 0 ? True : False;
}
@ -173,21 +178,31 @@ Java_java_awt_Component_initIDs
componentIDs.x = (*env)->GetFieldID(env, cls, "x", "I");
CHECK_NULL(componentIDs.x);
componentIDs.y = (*env)->GetFieldID(env, cls, "y", "I");
CHECK_NULL(componentIDs.y);
componentIDs.width = (*env)->GetFieldID(env, cls, "width", "I");
CHECK_NULL(componentIDs.width);
componentIDs.height = (*env)->GetFieldID(env, cls, "height", "I");
CHECK_NULL(componentIDs.height);
componentIDs.isPacked = (*env)->GetFieldID(env, cls, "isPacked", "Z");
CHECK_NULL(componentIDs.isPacked);
componentIDs.peer =
(*env)->GetFieldID(env, cls, "peer", "Ljava/awt/peer/ComponentPeer;");
CHECK_NULL(componentIDs.peer);
componentIDs.background =
(*env)->GetFieldID(env, cls, "background", "Ljava/awt/Color;");
CHECK_NULL(componentIDs.background);
componentIDs.foreground =
(*env)->GetFieldID(env, cls, "foreground", "Ljava/awt/Color;");
CHECK_NULL(componentIDs.foreground);
componentIDs.graphicsConfig =
(*env)->GetFieldID(env, cls, "graphicsConfig",
"Ljava/awt/GraphicsConfiguration;");
CHECK_NULL(componentIDs.graphicsConfig);
componentIDs.name =
(*env)->GetFieldID(env, cls, "name", "Ljava/lang/String;");
CHECK_NULL(componentIDs.name);
/* Use _NoClientCode() methods for trusted methods, so that we
* know that we are not invoking client code on trusted threads
@ -195,19 +210,20 @@ Java_java_awt_Component_initIDs
componentIDs.getParent =
(*env)->GetMethodID(env, cls, "getParent_NoClientCode",
"()Ljava/awt/Container;");
CHECK_NULL(componentIDs.getParent);
componentIDs.getLocationOnScreen =
(*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock",
"()Ljava/awt/Point;");
CHECK_NULL(componentIDs.getLocationOnScreen);
keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent");
if (JNU_IsNull(env, keyclass)) {
return;
}
CHECK_NULL(keyclass);
componentIDs.isProxyActive =
(*env)->GetFieldID(env, keyclass, "isProxyActive",
"Z");
CHECK_NULL(componentIDs.isProxyActive);
componentIDs.appContext =
(*env)->GetFieldID(env, cls, "appContext",
@ -339,7 +355,7 @@ JNIEXPORT void JNICALL Java_java_awt_Dialog_initIDs (JNIEnv *env, jclass cls)
static void waitForEvents(JNIEnv *, jlong);
static void awt_pipe_init();
static void processOneEvent(XtInputMask iMask);
static void performPoll(JNIEnv *, jlong);
static Boolean performPoll(JNIEnv *, jlong);
static void wakeUp();
static void update_poll_timeout(int timeout_control);
static uint32_t get_poll_timeout(jlong nextTaskTime);
@ -608,11 +624,13 @@ static uint32_t get_poll_timeout(jlong nextTaskTime)
*/
void
waitForEvents(JNIEnv *env, jlong nextTaskTime) {
performPoll(env, nextTaskTime);
if ((awt_next_flush_time > 0) && (awtJNI_TimeMillis() >= awt_next_flush_time)) {
XFlush(awt_display);
awt_last_flush_time = awt_next_flush_time;
awt_next_flush_time = 0LL;
if (performPoll(env, nextTaskTime)
&& (awt_next_flush_time > 0)
&& (awtJNI_TimeMillis() >= awt_next_flush_time)) {
XFlush(awt_display);
awt_last_flush_time = awt_next_flush_time;
awt_next_flush_time = 0LL;
}
} /* waitForEvents() */
@ -646,7 +664,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XToolkit_wakeup_1poll (JNIEnv *env, jcla
*
* The fdAWTPipe will be empty when this returns.
*/
static void
static Boolean
performPoll(JNIEnv *env, jlong nextTaskTime) {
static Bool pollFdsInited = False;
static char read_buf[AWT_POLL_BUFSIZE + 1]; /* dummy buf to empty pipe */
@ -673,7 +691,9 @@ performPoll(JNIEnv *env, jlong nextTaskTime) {
/* ACTUALLY DO THE POLL() */
if (timeout == 0) {
// be sure other threads get a chance
awtJNI_ThreadYield(env);
if (!awtJNI_ThreadYield(env)) {
return FALSE;
}
}
if (tracing) poll_sleep_time = awtJNI_TimeMillis();
@ -701,7 +721,7 @@ performPoll(JNIEnv *env, jlong nextTaskTime) {
update_poll_timeout(TIMEOUT_EVENTS);
PRINT2("performPoll(): TIMEOUT_EVENTS curPollTimeout = %d \n", curPollTimeout);
}
return;
return TRUE;
} /* performPoll() */
@ -856,23 +876,25 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this,
xawt_root_window = get_xawt_root_shell(env);
if ( xawt_root_window == None ) {
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
AWT_UNLOCK();
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
return;
}
command = (char *) JNU_GetStringPlatformChars(env, jcommand, NULL);
c[0] = (char *)command;
status = XmbTextListToTextProperty(awt_display, c, 1,
XStdICCTextStyle, &text_prop);
if (command != NULL) {
c[0] = (char *)command;
status = XmbTextListToTextProperty(awt_display, c, 1,
XStdICCTextStyle, &text_prop);
if (status == Success || status > 0) {
XSetTextProperty(awt_display, xawt_root_window,
&text_prop, XA_WM_COMMAND);
if (text_prop.value != NULL)
XFree(text_prop.value);
if (status == Success || status > 0) {
XSetTextProperty(awt_display, xawt_root_window,
&text_prop, XA_WM_COMMAND);
if (text_prop.value != NULL)
XFree(text_prop.value);
}
JNU_ReleaseStringPlatformChars(env, jcommand, command);
}
JNU_ReleaseStringPlatformChars(env, jcommand, command);
AWT_UNLOCK();
}
@ -886,96 +908,56 @@ Java_sun_awt_motif_XsessionWMcommand(JNIEnv *env, jobject this,
* name. It's not! It's just a plain function.
*/
JNIEXPORT void JNICALL
Java_sun_awt_motif_XsessionWMcommand_New(JNIEnv *env, jobjectArray jargv)
Java_sun_awt_motif_XsessionWMcommand_New(JNIEnv *env, jobjectArray jarray)
{
static const char empty[] = "";
int argc;
const char **cargv;
jsize length;
char ** array;
XTextProperty text_prop;
int status;
int i;
Window xawt_root_window;
AWT_LOCK();
xawt_root_window = get_xawt_root_shell(env);
if (xawt_root_window == None) {
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
AWT_UNLOCK();
JNU_ThrowNullPointerException(env, "AWT root shell is unrealized");
return;
}
argc = (int)(*env)->GetArrayLength(env, jargv);
if (argc == 0) {
AWT_UNLOCK();
return;
}
array = stringArrayToNative(env, jarray, &length);
/* array of C strings */
cargv = (const char **)calloc(argc, sizeof(char *));
if (cargv == NULL) {
JNU_ThrowOutOfMemoryError(env, "Unable to allocate cargv");
AWT_UNLOCK();
return;
}
/* fill C array with platform chars of java strings */
for (i = 0; i < argc; ++i) {
jstring js;
const char *cs;
cs = NULL;
js = (*env)->GetObjectArrayElement(env, jargv, i);
if (js != NULL) {
cs = JNU_GetStringPlatformChars(env, js, NULL);
if (array != NULL) {
status = XmbTextListToTextProperty(awt_display, array, length,
XStdICCTextStyle, &text_prop);
if (status < 0) {
switch (status) {
case XNoMemory:
JNU_ThrowOutOfMemoryError(env,
"XmbTextListToTextProperty: XNoMemory");
break;
case XLocaleNotSupported:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: XLocaleNotSupported");
break;
case XConverterNotFound:
JNU_ThrowNullPointerException(env,
"XmbTextListToTextProperty: XConverterNotFound");
break;
default:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: unknown error");
}
} else {
XSetTextProperty(awt_display, xawt_root_window,
&text_prop, XA_WM_COMMAND);
}
if (cs == NULL) {
cs = empty;
}
cargv[i] = cs;
(*env)->DeleteLocalRef(env, js);
if (text_prop.value != NULL)
XFree(text_prop.value);
freeNativeStringArray(array, length);
}
/* grr, X prototype doesn't declare cargv as const, thought it really is */
status = XmbTextListToTextProperty(awt_display, (char **)cargv, argc,
XStdICCTextStyle, &text_prop);
if (status < 0) {
switch (status) {
case XNoMemory:
JNU_ThrowOutOfMemoryError(env,
"XmbTextListToTextProperty: XNoMemory");
break;
case XLocaleNotSupported:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: XLocaleNotSupported");
break;
case XConverterNotFound:
JNU_ThrowNullPointerException(env,
"XmbTextListToTextProperty: XConverterNotFound");
break;
default:
JNU_ThrowInternalError(env,
"XmbTextListToTextProperty: unknown error");
}
} else {
XSetTextProperty(awt_display, xawt_root_window,
&text_prop, XA_WM_COMMAND);
}
for (i = 0; i < argc; ++i) {
jstring js;
if (cargv[i] == empty)
continue;
js = (*env)->GetObjectArrayElement(env, jargv, i);
JNU_ReleaseStringPlatformChars(env, js, cargv[i]);
(*env)->DeleteLocalRef(env, js);
}
if (text_prop.value != NULL)
XFree(text_prop.value);
AWT_UNLOCK();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2014, 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
@ -1242,9 +1242,13 @@ Java_sun_awt_X11_XWindow_initIDs
{
char *ptr = NULL;
windowID = (*env)->GetFieldID(env, clazz, "window", "J");
CHECK_NULL(windowID);
targetID = (*env)->GetFieldID(env, clazz, "target", "Ljava/awt/Component;");
CHECK_NULL(targetID);
graphicsConfigID = (*env)->GetFieldID(env, clazz, "graphicsConfig", "Lsun/awt/X11GraphicsConfig;");
CHECK_NULL(graphicsConfigID);
drawStateID = (*env)->GetFieldID(env, clazz, "drawState", "I");
CHECK_NULL(drawStateID);
ptr = getenv("_AWT_USE_TYPE4_PATCH");
if( ptr != NULL && ptr[0] != 0 ) {
if( strncmp("true", ptr, 4) == 0 ) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2014, 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
@ -48,6 +48,7 @@
#include "utility/rect.h"
#include <X11/XKBlib.h>
#if defined(DEBUG) || defined(INTERNAL_BUILD)
static jmethodID lockIsHeldMID = NULL;
@ -59,17 +60,94 @@ CheckHaveAWTLock(JNIEnv *env)
lockIsHeldMID =
(*env)->GetStaticMethodID(env, tkClass,
"isAWTLockHeldByCurrentThread", "()Z");
if (lockIsHeldMID == NULL) return;
}
if (!(*env)->CallStaticBooleanMethod(env, tkClass, lockIsHeldMID)) {
JNU_ThrowInternalError(env, "Current thread does not hold AWT_LOCK!");
}
}
#define AWT_CHECK_HAVE_LOCK() CheckHaveAWTLock(env)
#define AWT_CHECK_HAVE_LOCK() \
do { \
CheckHaveAWTLock(env); \
if ((*env)->ExceptionCheck(env)) { \
return; \
} \
} while (0); \
#define AWT_CHECK_HAVE_LOCK_RETURN(ret) \
do { \
CheckHaveAWTLock(env); \
if ((*env)->ExceptionCheck(env)) { \
return (ret); \
} \
} while (0); \
#else
#define AWT_CHECK_HAVE_LOCK()
#define AWT_CHECK_HAVE_LOCK_RETURN(ret)
#endif
void freeNativeStringArray(char **array, jsize length) {
int i;
if (array == NULL) {
return;
}
for (i = 0; i < length; i++) {
free(array[i]);
}
free(array);
}
char** stringArrayToNative(JNIEnv *env, jobjectArray array, jsize * ret_length) {
Bool err = FALSE;
char ** strings;
int index, str_index = 0;
jsize length = (*env)->GetArrayLength(env, array);
if (length == 0) {
return NULL;
}
strings = (char**) calloc(length, sizeof (char*));
if (strings == NULL) {
JNU_ThrowOutOfMemoryError(env, "");
return NULL;
}
for (index = 0; index < length; index++) {
jstring str = (*env)->GetObjectArrayElement(env, array, index);
if (str != NULL) {
const char * str_char = JNU_GetStringPlatformChars(env, str, NULL);
if (str_char != NULL) {
char * dup_str = strdup(str_char);
if (dup_str != NULL) {
strings[str_index++] = dup_str;
} else {
JNU_ThrowOutOfMemoryError(env, "");
err = TRUE;
}
JNU_ReleaseStringPlatformChars(env, str, str_char);
} else {
err = TRUE;
}
(*env)->DeleteLocalRef(env, str);
if (err) {
break;
}
}
}
if (err) {
freeNativeStringArray(strings, str_index);
strings = NULL;
str_index = -1;
}
*ret_length = str_index;
return strings;
}
/*
* Class: XlibWrapper
@ -81,7 +159,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XOpenDisplay
(JNIEnv *env, jclass clazz, jlong display_name)
{
Display *dp;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
dp = XOpenDisplay((char *) jlong_to_ptr(display_name));
return ptr_to_jlong(dp);
@ -97,7 +175,7 @@ Java_sun_awt_X11_XlibWrapper_XCloseDisplay(JNIEnv *env, jclass clazz,
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XDisplayString(JNIEnv *env, jclass clazz,
jlong display) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XDisplayString((Display*) jlong_to_ptr(display)));
}
@ -115,7 +193,7 @@ Java_sun_awt_X11_XlibWrapper_XSetCloseDownMode(JNIEnv *env, jclass clazz,
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DefaultScreen (JNIEnv *env, jclass clazz, jlong display) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) DefaultScreen((Display *) jlong_to_ptr(display));
}
@ -125,7 +203,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DefaultScreen (JNIEnv *env,
* Signature: (JJ)J
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_ScreenOfDisplay(JNIEnv *env, jclass clazz, jlong display, jlong screen_number) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(ScreenOfDisplay((Display *) jlong_to_ptr(display),
screen_number));
}
@ -136,7 +214,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_ScreenOfDisplay(JNIEnv *env
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_DoesBackingStore(JNIEnv *env, jclass clazz, jlong screen) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jint) DoesBackingStore((Screen*) jlong_to_ptr(screen));
}
@ -148,7 +226,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_DoesBackingStore(JNIEnv *env
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidth
(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) DisplayWidth((Display *) jlong_to_ptr(display),screen);
}
@ -160,7 +238,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidth
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidthMM
(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) DisplayWidthMM((Display *) jlong_to_ptr(display),screen);
}
@ -172,7 +250,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidthMM
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeight
(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) DisplayHeight((Display *) jlong_to_ptr(display),screen);
}
/*
@ -182,7 +260,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeight
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeightMM
(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) DisplayHeightMM((Display *) jlong_to_ptr(display),screen);
}
@ -193,7 +271,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeightMM
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_RootWindow
(JNIEnv *env , jclass clazz, jlong display, jlong screen_number) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) RootWindow((Display *) jlong_to_ptr(display), screen_number);
}
@ -203,7 +281,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_RootWindow
*/
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_ScreenCount
(JNIEnv *env , jclass clazz, jlong display) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ScreenCount((Display *) jlong_to_ptr(display));
}
@ -218,7 +296,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateWindow
jint x, jint y, jint w, jint h , jint border_width, jint depth,
jlong wclass, jlong visual, jlong valuemask, jlong attributes)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XCreateWindow((Display *) jlong_to_ptr(display),(Window) window, x, y, w, h,
border_width, depth, wclass, (Visual *) jlong_to_ptr(visual),
valuemask, (XSetWindowAttributes *) jlong_to_ptr(attributes));
@ -360,7 +438,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetInputFocus
Window focusOwner;
int revert_to;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
XGetInputFocus( (Display *)jlong_to_ptr(display), &focusOwner, &revert_to);
return focusOwner;
}
@ -383,7 +461,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer
jint owner_events, jint event_mask, jint pointer_mode,
jint keyboard_mode, jlong confine_to, jlong cursor, jlong time)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XGrabPointer( (Display *)jlong_to_ptr(display), (Window) window,
(Bool) owner_events, (unsigned int) event_mask, (int) pointer_mode,
(int) keyboard_mode, (Window) confine_to, (Cursor) cursor, (Time) time);
@ -401,7 +479,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabKeyboard
jint owner_events, jint pointer_mode,
jint keyboard_mode, jlong time)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XGrabKeyboard( (Display *)jlong_to_ptr(display), (Window) window,
(Bool) owner_events, (int) pointer_mode,
(int) keyboard_mode, (Time) time);
@ -474,7 +552,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
(JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
return XkbQueryExtension( (Display *) jlong_to_ptr(display),
(int *) jlong_to_ptr(opcode_rtrn),
(int *) jlong_to_ptr(event_rtrn),
@ -485,7 +563,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
(JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
*((int *)jlong_to_ptr(lib_major_in_out)) = XkbMajorVersion;
*((int *)jlong_to_ptr(lib_minor_in_out)) = XkbMinorVersion;
return XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out), (int *)jlong_to_ptr(lib_minor_in_out));
@ -494,7 +572,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
(unsigned int) which,
(unsigned int) device_spec);
@ -502,7 +580,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
(unsigned int) which,
(XkbDescPtr) jlong_to_ptr(xkb));
@ -516,6 +594,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
(JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
{
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
Bool b;
b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
(unsigned int *)jlong_to_ptr(mods_rtrn),
@ -578,7 +657,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
(JNIEnv *env, jclass clazz, jlong ptr, jlong window)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
}
@ -590,7 +669,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XSupportsLocale
(JNIEnv *env, jclass clazz)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
return (jboolean)XSupportsLocale();
}
@ -607,9 +686,10 @@ JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_XSetLocaleModifiers
if (!JNU_IsNull(env, jstr)) {
modifier_list = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
CHECK_NULL_RETURN(modifier_list, NULL);
}
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
if (modifier_list) {
ret = XSetLocaleModifiers(modifier_list);
JNU_ReleaseStringPlatformChars(env, jstr, (const char *) modifier_list);
@ -722,7 +802,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
jlong src_x, jlong src_y, jlong dest_x_return, jlong dest_y_return,
jlong child_return)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XTranslateCoordinates( (Display *) jlong_to_ptr(display), src_w, dest_w,
src_x, src_y,
(int *) jlong_to_ptr(dest_x_return),
@ -733,7 +813,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued
(JNIEnv *env, jclass clazz, jlong display, jint mode) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XEventsQueued((Display *) jlong_to_ptr(display), mode);
}
@ -758,6 +838,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_SetProperty
#else
cname = (char *) JNU_GetStringPlatformChars(env, jstr, NULL);
#endif
CHECK_NULL(cname);
} else {
cname = "";
}
@ -814,8 +895,9 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangePropertyS(
jlong type, jint format, jint mode, jstring value)
{
jboolean iscopy;
const char * chars = JNU_GetStringPlatformChars(env, value, &iscopy);
AWT_CHECK_HAVE_LOCK();
const char * chars = JNU_GetStringPlatformChars(env, value, &iscopy);
CHECK_NULL(chars);
XChangeProperty((Display*)jlong_to_ptr(display), window, (Atom)property,
(Atom)type, format, mode, (unsigned char*)chars, strlen(chars));
if (iscopy) {
@ -833,7 +915,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowProperty
jlong long_length, jlong delete, jlong req_type, jlong actual_type,
jlong actual_format, jlong nitems_ptr, jlong bytes_after, jlong data_ptr)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XGetWindowProperty((Display*) jlong_to_ptr(display), window, property, long_offset, long_length,
delete, (Atom) req_type, (Atom*) jlong_to_ptr(actual_type),
(int *) jlong_to_ptr(actual_format), (unsigned long *) jlong_to_ptr(nitems_ptr),
@ -857,23 +939,22 @@ JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_GetProperty
unsigned long nitems;
unsigned long bytes_after;
unsigned char * string;
jstring res;
AWT_CHECK_HAVE_LOCK();
jstring res = NULL;
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
status = XGetWindowProperty((Display*)jlong_to_ptr(display), window,
atom, 0, 0xFFFF, False, XA_STRING,
&actual_type, &actual_format, &nitems, &bytes_after,
&string);
if (status != Success || string == NULL) {
return NULL;
return NULL;
}
if (actual_type != XA_STRING || actual_format != 8) {
if (actual_type == XA_STRING && actual_format == 8) {
res = JNU_NewStringPlatform(env,(char*) string);
}
XFree(string);
return NULL;
}
// Memory leak???
return JNU_NewStringPlatform(env,(char*) string);
return res;
}
/*
@ -887,13 +968,15 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_InternAtom
char *cname;
unsigned long atom;
AWT_CHECK_HAVE_LOCK_RETURN(0);
if (!JNU_IsNull(env, jstr)) {
cname = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
CHECK_NULL_RETURN(cname, 0);
} else {
cname = "";
}
AWT_CHECK_HAVE_LOCK();
atom = XInternAtom((Display *) jlong_to_ptr(display), cname, ife);
if (!JNU_IsNull(env, jstr)) {
@ -906,7 +989,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_InternAtom
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XCreateFontCursor
(JNIEnv *env, jclass clazz, jlong display, jint shape) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XCreateFontCursor((Display *) jlong_to_ptr(display), (int) shape);
}
@ -919,7 +1002,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XCreateFontCursor
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreatePixmapCursor
(JNIEnv *env , jclass clazz, jlong display, jlong source, jlong mask, jlong fore, jlong back, jint x , jint y) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) XCreatePixmapCursor((Display *) jlong_to_ptr(display), (Pixmap) source, (Pixmap) mask,
(XColor *) jlong_to_ptr(fore), (XColor *) jlong_to_ptr(back), x, y);
}
@ -935,7 +1018,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryBestCursor
Status status;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
status = XQueryBestCursor((Display *) jlong_to_ptr(display), (Drawable) drawable, width,height,
(unsigned int *) jlong_to_ptr(width_return), (unsigned int *) jlong_to_ptr(height_return));
@ -966,15 +1049,14 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryPointer
Bool b;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
b = XQueryPointer((Display *) jlong_to_ptr(display),
(Window) w, (Window *) jlong_to_ptr(root_return), (Window *) jlong_to_ptr(child_return),
(int *) jlong_to_ptr(root_x_return), (int *) jlong_to_ptr(root_y_return),
(int *) jlong_to_ptr(win_x_return), (int *) jlong_to_ptr(win_y_return),
(unsigned int *) jlong_to_ptr(mask_return));
if (b == True) return JNI_TRUE;
else return JNI_FALSE;
return b ? JNI_TRUE : JNI_FALSE;
}
/*
@ -1042,7 +1124,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMHints
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetPointerMapping
(JNIEnv *env, jclass clazz, jlong display, jlong map, jint buttonNumber)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XGetPointerMapping((Display*)jlong_to_ptr(display), (unsigned char*) jlong_to_ptr(map), buttonNumber);
}
@ -1061,31 +1143,26 @@ JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_XGetDefault
if (!JNU_IsNull(env, program)) {
c_program = (char *)JNU_GetStringPlatformChars(env, program, NULL);
}
CHECK_NULL_RETURN(c_program, NULL);
if (!JNU_IsNull(env, option)) {
c_option = (char *)JNU_GetStringPlatformChars(env, option, NULL);
}
if (c_program == NULL || c_option == NULL) {
if (!JNU_IsNull(env, program)) {
JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
}
if (!JNU_IsNull(env, option)) {
JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
}
if (c_option == NULL) {
JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
return NULL;
}
AWT_CHECK_HAVE_LOCK();
c_res = XGetDefault((Display*)jlong_to_ptr(display), c_program, c_option);
if (!JNU_IsNull(env, program)) {
JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
}
if (!JNU_IsNull(env, option)) {
JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
}
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
c_res = XGetDefault((Display*)jlong_to_ptr(display), c_program, c_option);
// The strings returned by XGetDefault() are owned by Xlib and
// should not be modified or freed by the client.
JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
if (c_res != NULL) {
// Memory leak???
return JNU_NewStringPlatform(env, c_res);
} else {
return NULL;
@ -1103,7 +1180,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_getScreenOfWindow
{
XWindowAttributes attrs;
memset(&attrs, 0, sizeof(attrs));
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
XGetWindowAttributes((Display *) jlong_to_ptr(display), window, &attrs);
return ptr_to_jlong(attrs.screen);
}
@ -1116,7 +1193,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_getScreenOfWindow
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XScreenNumberOfScreen
(JNIEnv *env, jclass clazz, jlong screen)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(-1);
if(jlong_to_ptr(screen) == NULL) {
return -1;
}
@ -1131,7 +1208,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XScreenNumberOfScreen
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XIconifyWindow
(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong screenNumber)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XIconifyWindow((Display*) jlong_to_ptr(display), window, screenNumber);
}
@ -1158,6 +1235,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_awt_X11_XlibWrapper_getStringBytes
unsigned char * str = (unsigned char*) jlong_to_ptr(str_ptr);
long length = strlen((char*)str);
jbyteArray res = (*env)->NewByteArray(env, length);
CHECK_NULL_RETURN(res, NULL);
void * storage = malloc(length+1);
memcpy(storage, str, length+1);
(*env)->SetByteArrayRegion(env, res, 0, length,
@ -1174,7 +1252,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_awt_X11_XlibWrapper_getStringBytes
JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_ServerVendor
(JNIEnv *env, jclass clazz, jlong display)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
return JNU_NewStringPlatform(env, ServerVendor((Display*)jlong_to_ptr(display)));
}
/*
@ -1185,7 +1263,7 @@ JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_ServerVendor
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_VendorRelease
(JNIEnv *env, jclass clazz, jlong display)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return VendorRelease((Display*)jlong_to_ptr(display));
}
/*
@ -1203,7 +1281,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior
// second, in which place in the keysymarray is XK_KP_7
// using XKeycodeToKeysym.
int kc7;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
kc7 = XKeysymToKeycode((Display*)jlong_to_ptr(display), XK_KP_7);
if( !kc7 ) {
// keycode is not defined. Why, it's a reduced keyboard perhaps:
@ -1226,7 +1304,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard
(JNIEnv *env, jclass clazz, jlong display)
{
int xx;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
xx = XKeysymToKeycode((Display*)jlong_to_ptr(display), SunXK_F37);
return (!xx) ? JNI_FALSE : JNI_TRUE;
}
@ -1242,7 +1320,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKanaKeyboard
int32_t i;
int32_t kanaCount = 0;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
// There's no direct way to determine whether the keyboard has
// a kana lock key. From available keyboard mapping tables, it looks
@ -1289,8 +1367,10 @@ static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_SetToolkitErrorHandler
(JNIEnv *env, jclass clazz)
{
(*env)->GetJavaVM(env, &jvm);
AWT_CHECK_HAVE_LOCK();
if ((*env)->GetJavaVM(env, &jvm) < 0) {
return 0;
}
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XSetErrorHandler(ToolkitErrorHandler));
}
@ -1350,28 +1430,14 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XInternAtoms
(JNIEnv *env, jclass clazz, jlong display, jobjectArray names_arr, jboolean only_if_exists, jlong atoms)
{
int length = (*env)->GetArrayLength(env, names_arr);
char ** names = (char**)malloc(length*sizeof(char*));
jboolean copy;
int index, name_index = 0;
int status;
AWT_CHECK_HAVE_LOCK();
for (index = 0; index < length; index++) {
jstring str = (*env)->GetObjectArrayElement(env, names_arr, index);
if (!JNU_IsNull(env, str)) {
const char * str_char = JNU_GetStringPlatformChars(env, str, NULL);
names[name_index++] = strdup(str_char);
JNU_ReleaseStringPlatformChars(env, str, str_char);
(*env)->DeleteLocalRef(env, str);
}
int status = 0;
AWT_CHECK_HAVE_LOCK_RETURN(0);
jsize length;
char** names = stringArrayToNative(env, names_arr, &length);
if (names) {
status = XInternAtoms((Display*)jlong_to_ptr(display), names, length, only_if_exists, (Atom*) jlong_to_ptr(atoms));
freeNativeStringArray(names, length);
}
status = XInternAtoms((Display*)jlong_to_ptr(display), names, name_index, only_if_exists, (Atom*) jlong_to_ptr(atoms));
for (index = 0; index < length; index++) {
free(names[index]);
}
free(names);
return status;
}
@ -1386,7 +1452,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowAttributes
(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong attr_ptr)
{
jint status;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
memset((XWindowAttributes*) jlong_to_ptr(attr_ptr), 0, sizeof(XWindowAttributes));
status = XGetWindowAttributes((Display*)jlong_to_ptr(display), window, (XWindowAttributes*) jlong_to_ptr(attr_ptr));
return status;
@ -1404,7 +1470,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetGeometry
jlong border_width_return, jlong depth_return)
{
jint status;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
status = XGetGeometry((Display *)jlong_to_ptr(display),
(Drawable)drawable, (Window *)jlong_to_ptr(root_return),
(int *)jlong_to_ptr(x_return), (int *)jlong_to_ptr(y_return),
@ -1423,7 +1489,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetGeometry
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMNormalHints
(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints, jlong supplied_return)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XGetWMNormalHints((Display*) jlong_to_ptr(display),
window,
(XSizeHints*) jlong_to_ptr(hints),
@ -1462,7 +1528,7 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDeleteProperty
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XSendEvent
(JNIEnv *env, jclass clazz, jlong display, jlong window, jboolean propagate, jlong event_mask, jlong event)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XSendEvent((Display*) jlong_to_ptr(display),
window,
propagate==JNI_TRUE?True:False,
@ -1479,7 +1545,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XSendEvent
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XQueryTree
(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong root_return, jlong parent_return, jlong children_return, jlong nchildren_return)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XQueryTree((Display*) jlong_to_ptr(display),
window,
(Window *) jlong_to_ptr(root_return),
@ -1524,7 +1590,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
(JNIEnv *env, jclass clazz, jlong display, jlong vinfo_mask, jlong vinfo_template,
jlong nitems_return)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XGetVisualInfo((Display*) jlong_to_ptr(display),
(long) vinfo_mask,
(XVisualInfo*) jlong_to_ptr(vinfo_template),
@ -1534,7 +1600,7 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XAllocSizeHints
(JNIEnv *env, jclass clazz)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XAllocSizeHints());
}
@ -1560,7 +1626,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XAllocColor
(JNIEnv *env, jclass clazz, jlong display , jlong colormap, jlong xcolor) {
Status status;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
status = XAllocColor((Display *) jlong_to_ptr(display), (Colormap) colormap, (XColor *) jlong_to_ptr(xcolor));
if (status == 0) return JNI_FALSE;
@ -1575,7 +1641,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XAllocColor
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData
(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong data, jint width, jint height) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong) XCreateBitmapFromData((Display *) jlong_to_ptr(display), (Drawable) drawable,
(char *) jlong_to_ptr(data), width, height);
@ -1640,7 +1706,7 @@ Java_sun_awt_X11_XlibWrapper_XSetSelectionOwner(JNIEnv *env, jclass clazz,
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XGetSelectionOwner(JNIEnv *env, jclass clazz,
jlong display, jlong selection) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return (jlong)XGetSelectionOwner((Display*)jlong_to_ptr(display), selection);
}
@ -1655,7 +1721,7 @@ Java_sun_awt_X11_XlibWrapper_XGetAtomName(JNIEnv *env, jclass clazz,
{
jstring string = NULL;
char* name;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
name = (char*) XGetAtomName((Display*)jlong_to_ptr(display), atom);
if (name == NULL) {
@ -1679,21 +1745,21 @@ Java_sun_awt_X11_XlibWrapper_XGetAtomName(JNIEnv *env, jclass clazz,
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XMaxRequestSize(JNIEnv *env, jclass clazz,
jlong display) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XMaxRequestSize((Display*) jlong_to_ptr(display));
}
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XAllocWMHints(JNIEnv *env, jclass clazz)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XAllocWMHints());
}
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XCreatePixmap(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jint depth)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XCreatePixmap((Display*)jlong_to_ptr(display), (Drawable)drawable, width, height, depth);
}
JNIEXPORT jlong JNICALL
@ -1702,7 +1768,7 @@ Java_sun_awt_X11_XlibWrapper_XCreateImage
jint depth, jint format, jint offset, jlong data, jint width,
jint height, jint bitmap_pad, jint bytes_per_line)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XCreateImage((Display*) jlong_to_ptr(display), (Visual*) jlong_to_ptr(visual_ptr),
depth, format, offset, (char*) jlong_to_ptr(data),
width, height, bitmap_pad, bytes_per_line));
@ -1712,7 +1778,7 @@ Java_sun_awt_X11_XlibWrapper_XCreateGC
(JNIEnv *env, jclass clazz, jlong display, jlong drawable,
jlong valuemask, jlong values)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XCreateGC((Display*) jlong_to_ptr(display), (Drawable)drawable, valuemask, (XGCValues*) jlong_to_ptr(values)));
}
@ -1762,7 +1828,7 @@ Java_sun_awt_X11_XlibWrapper_XGetIconSizes(JNIEnv *env, jclass clazz, jlong disp
XIconSize** psize = (XIconSize**) jlong_to_ptr(ret_sizes);
int * pcount = (int *) jlong_to_ptr(ret_count);
Status res;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
res = XGetIconSizes((Display*) jlong_to_ptr(display), (Window)window, psize, pcount);
return res;
}
@ -1771,7 +1837,7 @@ JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeQueryExtension
(JNIEnv *env, jclass clazz, jlong display, jlong major_version_return,
jlong minor_version_return)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeQueryExtension((Display*) jlong_to_ptr(display), (int *) jlong_to_ptr(major_version_return),
(int *) jlong_to_ptr(minor_version_return));
}
@ -1784,11 +1850,12 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryExtension
Boolean bu;
if (!JNU_IsNull(env, jstr)) {
cname = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
CHECK_NULL_RETURN(cname, JNI_FALSE);
} else {
cname = "";
}
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
bu = XQueryExtension((Display*) jlong_to_ptr(display), cname, (int *) jlong_to_ptr(mop_return),
(int *) jlong_to_ptr(feve_return), (int *) jlong_to_ptr(err_return));
if (!JNU_IsNull(env, jstr)) {
@ -1800,7 +1867,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryExtension
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKeypadKey
(JNIEnv *env, jclass clazz, jlong keysym)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
if(IsKeypadKey(keysym)) {
return JNI_TRUE;
}
@ -1810,7 +1877,7 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKeypadKey
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XdbeAllocateBackBufferName
(JNIEnv *env, jclass clazz, jlong display, jlong window, jint swap_action)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeAllocateBackBufferName((Display*) jlong_to_ptr(display), (Window) window,
(XdbeSwapAction) swap_action);
}
@ -1818,28 +1885,28 @@ JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XdbeAllocateBackBufferName
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeDeallocateBackBufferName
(JNIEnv *env, jclass clazz, jlong display, jlong buffer)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeDeallocateBackBufferName((Display*) jlong_to_ptr(display), (XdbeBackBuffer) buffer);
}
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeBeginIdiom
(JNIEnv *env, jclass clazz, jlong display)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeBeginIdiom((Display*) jlong_to_ptr(display));
}
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeEndIdiom
(JNIEnv *env, jclass clazz, jlong display)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeEndIdiom((Display*) jlong_to_ptr(display));
}
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeSwapBuffers
(JNIEnv *env, jclass clazz, jlong display, jlong swap_info, jint num_windows)
{
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XdbeSwapBuffers((Display*) jlong_to_ptr(display), (XdbeSwapInfo *) jlong_to_ptr(swap_info), num_windows);
}
JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XQueryKeymap
@ -1854,7 +1921,7 @@ JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym(JNIEnv *env, jclass clazz,
jlong display, jint keycode,
jint index) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (int)index);
}
@ -1862,7 +1929,7 @@ JNIEXPORT jint JNICALL
Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
jlong display) {
XkbStateRec sr;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
memset(&sr, 0, sizeof(XkbStateRec));
XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
// printf("-------------------------------------VVVV\n");
@ -1887,21 +1954,21 @@ JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
jlong display, jint keycode,
jint group, jint level) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
}
JNIEXPORT jint JNICALL
Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
jlong display, jlong keysym) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return XKeysymToKeycode((Display*) jlong_to_ptr(display), (KeySym)keysym);
}
JNIEXPORT jlong JNICALL
Java_sun_awt_X11_XlibWrapper_XGetModifierMapping(JNIEnv *env, jclass clazz,
jlong display) {
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(0);
return ptr_to_jlong(XGetModifierMapping((Display*) jlong_to_ptr(display)));
}
@ -1958,7 +2025,7 @@ Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
jlong display, jlong ptr) {
uint32_t timeout = 1;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
exitSecondaryLoop = False;
while (!exitSecondaryLoop) {
if (XCheckIfEvent((Display*) jlong_to_ptr(display), (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, NULL)) {
@ -1996,7 +2063,7 @@ Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList(JNIEnv *env,
static jclass stringClass = NULL;
jclass stringClassLocal = NULL;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(NULL);
if (JNU_IsNull(env, stringClass)) {
stringClassLocal = (*env)->FindClass(env, "java/lang/String");
@ -2148,7 +2215,7 @@ Java_sun_awt_X11_XlibWrapper_XShapeQueryExtension
{
jboolean status;
AWT_CHECK_HAVE_LOCK();
AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
status = XShapeQueryExtension((Display *)jlong_to_ptr(display),
(int *)jlong_to_ptr(event_base_return), (int *)jlong_to_ptr(error_base_return));

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2014, 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
@ -23,6 +23,7 @@
* questions.
*/
#include "jni_util.h"
#include "gtk2_interface.h"
#include "gnome_interface.h"
@ -65,6 +66,12 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show
const gchar* url_c;
url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL);
if (url_c == NULL) {
if (!(*env)->ExceptionCheck(env)) {
JNU_ThrowOutOfMemoryError(env, 0);
}
return JNI_FALSE;
}
if (gtk_has_been_loaded) {
fp_gdk_threads_enter();