0N/A/*
6139N/A * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A#include "sun_awt_X11_XlibWrapper.h"
0N/A#include <X11/Xlib.h>
0N/A#include <X11/keysym.h>
0N/A#include <X11/Xutil.h>
0N/A#include <X11/Xos.h>
0N/A#include <X11/Xatom.h>
0N/A#include <X11/extensions/Xdbe.h>
0N/A#include <X11/extensions/shape.h>
0N/A#include <string.h>
0N/A#include <stdlib.h>
1975N/A#include <X11/Sunkeysym.h>
0N/A
0N/A#include <jni.h>
0N/A#include <jni_util.h>
0N/A#include <jlong.h>
6295N/A#include <sizecalc.h>
0N/A
0N/A#include <awt.h>
0N/A#include <jvm.h>
0N/A
0N/A#include <Region.h>
1066N/A#include "utility/rect.h"
0N/A
1067N/A#include <X11/XKBlib.h>
0N/A#if defined(DEBUG) || defined(INTERNAL_BUILD)
0N/Astatic jmethodID lockIsHeldMID = NULL;
0N/A
0N/Astatic void
0N/ACheckHaveAWTLock(JNIEnv *env)
0N/A{
0N/A if (lockIsHeldMID == NULL) {
0N/A if (tkClass == NULL) return;
0N/A lockIsHeldMID =
0N/A (*env)->GetStaticMethodID(env, tkClass,
0N/A "isAWTLockHeldByCurrentThread", "()Z");
0N/A }
0N/A if (!(*env)->CallStaticBooleanMethod(env, tkClass, lockIsHeldMID)) {
0N/A JNU_ThrowInternalError(env, "Current thread does not hold AWT_LOCK!");
0N/A }
0N/A}
0N/A
0N/A#define AWT_CHECK_HAVE_LOCK() CheckHaveAWTLock(env)
0N/A#else
0N/A#define AWT_CHECK_HAVE_LOCK()
0N/A#endif
0N/A
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XOpenDisplay
0N/A * Signature: (J)J
0N/A */
0N/A
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XOpenDisplay
0N/A(JNIEnv *env, jclass clazz, jlong display_name)
0N/A{
0N/A Display *dp;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A dp = XOpenDisplay((char *) jlong_to_ptr(display_name));
0N/A
0N/A return ptr_to_jlong(dp);
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XCloseDisplay(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XCloseDisplay((Display*) jlong_to_ptr(display));
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XDisplayString(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XDisplayString((Display*) jlong_to_ptr(display)));
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XSetCloseDownMode(JNIEnv *env, jclass clazz,
0N/A jlong display, jint mode) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetCloseDownMode((Display*) jlong_to_ptr(display), (int)mode);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DefaultScreen
0N/A * Signature: (J)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DefaultScreen (JNIEnv *env, jclass clazz, jlong display) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) DefaultScreen((Display *) jlong_to_ptr(display));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: ScreenOfDisplay
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_ScreenOfDisplay(JNIEnv *env, jclass clazz, jlong display, jlong screen_number) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(ScreenOfDisplay((Display *) jlong_to_ptr(display),
0N/A screen_number));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DoesBackingStore
0N/A * Signature: (J)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_DoesBackingStore(JNIEnv *env, jclass clazz, jlong screen) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jint) DoesBackingStore((Screen*) jlong_to_ptr(screen));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DisplayWidth
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidth
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) DisplayWidth((Display *) jlong_to_ptr(display),screen);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DisplayWidthMM
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayWidthMM
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) DisplayWidthMM((Display *) jlong_to_ptr(display),screen);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DisplayHeight
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeight
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) DisplayHeight((Display *) jlong_to_ptr(display),screen);
0N/A}
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: DisplayHeightMM
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DisplayHeightMM
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong screen) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) DisplayHeightMM((Display *) jlong_to_ptr(display),screen);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: RootWindow
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_RootWindow
0N/A(JNIEnv *env , jclass clazz, jlong display, jlong screen_number) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) RootWindow((Display *) jlong_to_ptr(display), screen_number);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: ScreenCount
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_ScreenCount
0N/A(JNIEnv *env , jclass clazz, jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ScreenCount((Display *) jlong_to_ptr(display));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XCreateWindow
0N/A * Signature: (JJIIIIIIJJJJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateWindow
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong window,
0N/A jint x, jint y, jint w, jint h , jint border_width, jint depth,
0N/A jlong wclass, jlong visual, jlong valuemask, jlong attributes)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XCreateWindow((Display *) jlong_to_ptr(display),(Window) window, x, y, w, h,
0N/A border_width, depth, wclass, (Visual *) jlong_to_ptr(visual),
0N/A valuemask, (XSetWindowAttributes *) jlong_to_ptr(attributes));
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XConvertCase
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConvertCase
0N/A (JNIEnv *env, jclass clazz, jlong keysym,
0N/A jlong keysym_lowercase, jlong keysym_uppercase)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XConvertCase(keysym, (jlong_to_ptr(keysym_lowercase)),
0N/A (jlong_to_ptr(keysym_uppercase)));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XMapWindow
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XMapWindow( (Display *)jlong_to_ptr(display),(Window) window);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XMapRaised
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapRaised
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XMapRaised( (Display *)jlong_to_ptr(display),(Window) window);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XRaiseWindow
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRaiseWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XRaiseWindow( (Display *)jlong_to_ptr(display),(Window) window);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XLowerWindow
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XLowerWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XLowerWindow( (Display *)jlong_to_ptr(display),(Window) window);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XRestackWindows
0N/A * Signature: (JJI)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRestackWindows
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong windows, jint length)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XRestackWindows( (Display *) jlong_to_ptr(display), (Window *) jlong_to_ptr(windows), length);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
1066N/A * Method: XConfigureWindow
1066N/A * Signature: (JJJJ)V
1066N/A */
1066N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow
1066N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask,
1066N/A jlong values)
1066N/A{
1066N/A AWT_CHECK_HAVE_LOCK();
1066N/A XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window,
1066N/A (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values));
1066N/A}
1066N/A
1066N/A/*
1066N/A * Class: XlibWrapper
0N/A * Method: XSetInputFocus
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, CurrentTime);
0N/A
0N/A}
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XSetInputFocus2
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus2
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong time)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, time);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XGetInputFocus
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetInputFocus
0N/A(JNIEnv *env, jclass clazz, jlong display)
0N/A{
0N/A
0N/A Window focusOwner;
0N/A int revert_to;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XGetInputFocus( (Display *)jlong_to_ptr(display), &focusOwner, &revert_to);
0N/A return focusOwner;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XDestroyWindow
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDestroyWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XDestroyWindow( (Display *)jlong_to_ptr(display),(Window) window);
0N/A}
0N/A
210N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window,
0N/A jint owner_events, jint event_mask, jint pointer_mode,
0N/A jint keyboard_mode, jlong confine_to, jlong cursor, jlong time)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XGrabPointer( (Display *)jlong_to_ptr(display), (Window) window,
0N/A (Bool) owner_events, (unsigned int) event_mask, (int) pointer_mode,
0N/A (int) keyboard_mode, (Window) confine_to, (Cursor) cursor, (Time) time);
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUngrabPointer
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong time)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XUngrabPointer( (Display *)jlong_to_ptr(display), (Time) time);
0N/A}
0N/A
210N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabKeyboard
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window,
0N/A jint owner_events, jint pointer_mode,
0N/A jint keyboard_mode, jlong time)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XGrabKeyboard( (Display *)jlong_to_ptr(display), (Window) window,
0N/A (Bool) owner_events, (int) pointer_mode,
0N/A (int) keyboard_mode, (Time) time);
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUngrabKeyboard
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong time)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XUngrabKeyboard( (Display *)jlong_to_ptr(display), (Time) time);
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XGrabServer(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XGrabServer((Display*)jlong_to_ptr(display));
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XUngrabServer(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XUngrabServer((Display*)jlong_to_ptr(display));
0N/A /* Workaround for bug 5039226 */
0N/A XSync((Display*)jlong_to_ptr(display), False);
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: XUnmapWindow
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUnmapWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XUnmapWindow( (Display *)jlong_to_ptr(display),(Window) window);
0N/A
0N/A}
0N/A
0N/A
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSelectInput
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong mask)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask);
0N/A}
0N/A
1067N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents
1067N/A(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change, jlong values_for_bits)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device,
1067N/A (unsigned long)bits_to_change,
1067N/A (unsigned long)values_for_bits);
1067N/A}
1067N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
1067N/A(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type, jlong bits_to_change, jlong values_for_bits)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device,
1067N/A (unsigned int) event_type,
1067N/A (unsigned long)bits_to_change,
1067N/A (unsigned long)values_for_bits);
1067N/A}
1067N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
1067N/A(JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
1067N/A jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A return XkbQueryExtension( (Display *) jlong_to_ptr(display),
1067N/A (int *) jlong_to_ptr(opcode_rtrn),
1067N/A (int *) jlong_to_ptr(event_rtrn),
1067N/A (int *) jlong_to_ptr(error_rtrn),
1067N/A (int *) jlong_to_ptr(major_in_out),
1067N/A (int *) jlong_to_ptr(minor_in_out));
1067N/A}
1067N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
1067N/A(JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
2859N/A *((int *)jlong_to_ptr(lib_major_in_out)) = XkbMajorVersion;
2859N/A *((int *)jlong_to_ptr(lib_minor_in_out)) = XkbMinorVersion;
1067N/A return XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out), (int *)jlong_to_ptr(lib_minor_in_out));
1067N/A}
1067N/A
1067N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
1067N/A(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
1067N/A (unsigned int) which,
1067N/A (unsigned int) device_spec);
1067N/A}
1067N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
1067N/A(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
1067N/A (unsigned int) which,
1067N/A (XkbDescPtr) jlong_to_ptr(xkb));
1067N/A}
1067N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
1067N/A(JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all)
1067N/A{
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all);
1067N/A}
1067N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
1067N/A(JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
1067N/A{
1067N/A Bool b;
1067N/A b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
1067N/A (unsigned int *)jlong_to_ptr(mods_rtrn),
1067N/A (KeySym *)jlong_to_ptr(keysym_rtrn));
1067N/A //printf("native, input: keycode:0x%0X; mods:0x%0X\n", keycode, mods);
1067N/A //printf("native, output: keysym:0x%0X; mods:0x%0X\n", *(unsigned int *)jlong_to_ptr(keysym_rtrn), *(unsigned int *)jlong_to_ptr(mods_rtrn));
1067N/A return b;
1067N/A}
1067N/A
1067N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XNextEvent
0N/A * Signature: (JJ)V
0N/A */
0N/A
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XNextEvent
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong ptr)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XNextEvent( (Display *) jlong_to_ptr(display), jlong_to_ptr(ptr));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XMaskEvent
0N/A * Signature: (JJJ)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMaskEvent
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong event_mask, jlong event_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XMaskEvent( (Display *) jlong_to_ptr(display), event_mask, (XEvent *) jlong_to_ptr(event_return));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XWindowEvent
0N/A * Signature: (JJJJ)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong event_mask, jlong event_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFilterEvent
0N/A * Signature: (JJ)Z
0N/A */
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
0N/A(JNIEnv *env, jclass clazz, jlong ptr, jlong window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSupportsLocale
0N/A * Signature: ()Z
0N/A */
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XSupportsLocale
0N/A(JNIEnv *env, jclass clazz)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jboolean)XSupportsLocale();
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetLocaleModifiers
0N/A * Signature: (Ljava/lang/String;)Ljava/lang/String;
0N/A */
0N/AJNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_XSetLocaleModifiers
0N/A(JNIEnv *env, jclass clazz, jstring jstr)
0N/A{
0N/A char * modifier_list = NULL;
0N/A char * ret = NULL;
0N/A
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A modifier_list = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
0N/A }
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A if (modifier_list) {
0N/A ret = XSetLocaleModifiers(modifier_list);
0N/A JNU_ReleaseStringPlatformChars(env, jstr, (const char *) modifier_list);
0N/A } else {
0N/A ret = XSetLocaleModifiers("");
0N/A }
0N/A
0N/A return (ret != NULL ? JNU_NewStringPlatform(env, ret): NULL);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_wrappers_XlibWrapper
0N/A * Method: XPeekEvent
0N/A * Signature: (JJ)V
0N/A */
0N/A
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XPeekEvent
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong ptr)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XPeekEvent((Display *) jlong_to_ptr(display),jlong_to_ptr(ptr));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XMoveResizeWindow
0N/A * Signature: (JJIIII)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveResizeWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jint x , jint y , jint width, jint height) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XMoveResizeWindow( (Display *) jlong_to_ptr(display), (Window) window, x, y, width, height);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XResizeWindow
0N/A * Signature: (JJII)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XResizeWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XResizeWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XMoveWindow
0N/A * Signature: (JJII)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XMoveWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetWindowBackground
0N/A * Signature: (JJJ)V
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWindowBackground
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong background_pixel) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetWindowBackground((Display *) jlong_to_ptr(display),window,background_pixel);
0N/A
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFlush
0N/A * Signature: (J)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFlush
0N/A(JNIEnv *env, jclass clazz, jlong display) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFlush((Display *)jlong_to_ptr(display));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSync
0N/A * Signature: (JI)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSync
0N/A(JNIEnv *env, jclass clazz, jlong display, jint discard) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSync((Display *) jlong_to_ptr(display), discard);
0N/A
0N/A}
0N/A
210N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong src_w, jlong dest_w,
0N/A jlong src_x, jlong src_y, jlong dest_x_return, jlong dest_y_return,
0N/A jlong child_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XTranslateCoordinates( (Display *) jlong_to_ptr(display), src_w, dest_w,
0N/A src_x, src_y,
0N/A (int *) jlong_to_ptr(dest_x_return),
0N/A (int *) jlong_to_ptr(dest_y_return),
0N/A (Window *) jlong_to_ptr(child_return));
0N/A}
0N/A
210N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued
0N/A(JNIEnv *env, jclass clazz, jlong display, jint mode) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XEventsQueued((Display *) jlong_to_ptr(display), mode);
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: SetProperty
0N/A * Signature: (JJJLjava/lang/String;)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_SetProperty
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong atom, jstring jstr) {
0N/A char *cname;
0N/A XTextProperty tp;
0N/A int32_t status;
0N/A
0N/A /*
0N/A In case there are direct support of UTF-8 declared, use UTF-8 strings.
0N/A */
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A#ifdef X_HAVE_UTF8_STRING
0N/A cname = (char *) (*env)->GetStringUTFChars(env, jstr, JNI_FALSE);
0N/A#else
0N/A cname = (char *) JNU_GetStringPlatformChars(env, jstr, NULL);
0N/A#endif
0N/A } else {
0N/A cname = "";
0N/A }
0N/A
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
0N/A#ifdef X_HAVE_UTF8_STRING
0N/A status = Xutf8TextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
0N/A XStdICCTextStyle, &tp);
0N/A#else
0N/A status = XmbTextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
0N/A XStdICCTextStyle, &tp);
0N/A#endif
0N/A
0N/A
0N/A if (status == Success || status > 0) {
0N/A XChangeProperty((Display *)jlong_to_ptr(display), window, atom, tp.encoding, tp.format, PropModeReplace, tp.value, tp.nitems);
0N/A if (tp.value != NULL) {
0N/A XFree(tp.value);
0N/A }
0N/A }
0N/A
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A#ifdef X_HAVE_UTF8_STRING
0N/A (*env)->ReleaseStringUTFChars(env, jstr, (const char *) cname);
0N/A#else
0N/A JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
0N/A#endif
0N/A }
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XChangeProperty
0N/A * Signature: (JJJJJJJJJJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangePropertyImpl(
0N/A JNIEnv *env, jclass clazz, jlong display, jlong window, jlong property,
0N/A jlong type, jint format, jint mode, jlong data, jint nelements)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XChangeProperty((Display*) jlong_to_ptr(display), (Window) window, (Atom) property,
0N/A (Atom) type, format, mode, (unsigned char*) jlong_to_ptr(data),
0N/A nelements);
0N/A}
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XChangePropertyS
0N/A * Signature: (JJJJJJJJJLjava/lang/String;)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangePropertyS(
0N/A JNIEnv *env, jclass clazz, jlong display, jlong window, jlong property,
0N/A jlong type, jint format, jint mode, jstring value)
0N/A{
0N/A jboolean iscopy;
0N/A const char * chars = JNU_GetStringPlatformChars(env, value, &iscopy);
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XChangeProperty((Display*)jlong_to_ptr(display), window, (Atom)property,
0N/A (Atom)type, format, mode, (unsigned char*)chars, strlen(chars));
0N/A if (iscopy) {
0N/A JNU_ReleaseStringPlatformChars(env, value, chars);
0N/A }
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetWindowProperty
0N/A * Signature: (JJJJJJJJJJJ)J;
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowProperty
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong property, jlong long_offset,
0N/A jlong long_length, jlong delete, jlong req_type, jlong actual_type,
0N/A jlong actual_format, jlong nitems_ptr, jlong bytes_after, jlong data_ptr)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XGetWindowProperty((Display*) jlong_to_ptr(display), window, property, long_offset, long_length,
0N/A delete, (Atom) req_type, (Atom*) jlong_to_ptr(actual_type),
0N/A (int *) jlong_to_ptr(actual_format), (unsigned long *) jlong_to_ptr(nitems_ptr),
0N/A (unsigned long*) jlong_to_ptr(bytes_after), (unsigned char**) jlong_to_ptr(data_ptr));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: GetProperty
0N/A * Signature: (JJJ)Ljava/lang/String;
0N/A */
0N/AJNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_GetProperty
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong atom)
0N/A{
0N/A /* Request status */
0N/A int status;
0N/A
0N/A /* Returns of XGetWindowProperty */
0N/A Atom actual_type;
0N/A int actual_format;
0N/A unsigned long nitems;
0N/A unsigned long bytes_after;
0N/A unsigned char * string;
0N/A jstring res;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A status = XGetWindowProperty((Display*)jlong_to_ptr(display), window,
0N/A atom, 0, 0xFFFF, False, XA_STRING,
0N/A &actual_type, &actual_format, &nitems, &bytes_after,
0N/A &string);
0N/A if (status != Success || string == NULL) {
0N/A return NULL;
0N/A }
0N/A
0N/A if (actual_type != XA_STRING || actual_format != 8) {
0N/A XFree(string);
0N/A return NULL;
0N/A }
0N/A
0N/A // Memory leak???
0N/A return JNU_NewStringPlatform(env,(char*) string);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: InternAtom
0N/A * Signature: (JLjava/lang/String;I)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_InternAtom
0N/A(JNIEnv *env, jclass clazz, jlong display, jstring jstr, jint ife) {
0N/A
0N/A char *cname;
0N/A unsigned long atom;
0N/A
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A cname = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
0N/A } else {
0N/A cname = "";
0N/A }
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A atom = XInternAtom((Display *) jlong_to_ptr(display), cname, ife);
0N/A
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
0N/A }
0N/A
0N/A return (jlong) atom;
0N/A
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XCreateFontCursor
0N/A(JNIEnv *env, jclass clazz, jlong display, jint shape) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XCreateFontCursor((Display *) jlong_to_ptr(display), (int) shape);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XCreatePixmapCursor
0N/A * Signature: (JJJJJII)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreatePixmapCursor
0N/A(JNIEnv *env , jclass clazz, jlong display, jlong source, jlong mask, jlong fore, jlong back, jint x , jint y) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong) XCreatePixmapCursor((Display *) jlong_to_ptr(display), (Pixmap) source, (Pixmap) mask,
0N/A (XColor *) jlong_to_ptr(fore), (XColor *) jlong_to_ptr(back), x, y);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XQueryBestCursor
0N/A * Signature: (JJIIJJ)Z
0N/A */
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryBestCursor
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jlong width_return, jlong height_return) {
0N/A
0N/A Status status;
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A status = XQueryBestCursor((Display *) jlong_to_ptr(display), (Drawable) drawable, width,height,
0N/A (unsigned int *) jlong_to_ptr(width_return), (unsigned int *) jlong_to_ptr(height_return));
0N/A
0N/A if (status == 0) return JNI_FALSE;
0N/A else return JNI_TRUE;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFreeCursor
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreeCursor
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong cursor) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFreeCursor( (Display *) jlong_to_ptr(display), (Cursor) cursor);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XQueryPointer
0N/A * Signature: (JJJJJJJJJ)Z
0N/A */
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryPointer
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong w, jlong root_return, jlong child_return, jlong root_x_return , jlong root_y_return, jlong win_x_return, jlong win_y_return, jlong mask_return) {
0N/A
0N/A Bool b;
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A b = XQueryPointer((Display *) jlong_to_ptr(display),
0N/A (Window) w, (Window *) jlong_to_ptr(root_return), (Window *) jlong_to_ptr(child_return),
0N/A (int *) jlong_to_ptr(root_x_return), (int *) jlong_to_ptr(root_y_return),
0N/A (int *) jlong_to_ptr(win_x_return), (int *) jlong_to_ptr(win_y_return),
0N/A (unsigned int *) jlong_to_ptr(mask_return));
0N/A if (b == True) return JNI_TRUE;
0N/A else return JNI_FALSE;
0N/A
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XChangeWindowAttributes
0N/A * Signature: (JJJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangeWindowAttributes
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong valuemask, jlong attributes) {
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XChangeWindowAttributes((Display *) jlong_to_ptr(display), (Window) window, (unsigned long) valuemask,
0N/A (XSetWindowAttributes *) jlong_to_ptr(attributes));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetTransientFor
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetTransientFor
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong transient_for_window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetTransientForHint((Display *) jlong_to_ptr(display), window, transient_for_window);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetWMHints
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWMHints
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetWMHints((Display *) jlong_to_ptr(display), window, (XWMHints *) jlong_to_ptr(hints));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetWMHints
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMHints
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints)
0N/A{
0N/A XWMHints * get_hints;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A get_hints = XGetWMHints((Display*)jlong_to_ptr(display), window);
0N/A if (get_hints != NULL) {
0N/A memcpy(jlong_to_ptr(hints), get_hints, sizeof(XWMHints));
0N/A XFree(get_hints);
0N/A } else {
0N/A memset(jlong_to_ptr(hints), 0, sizeof(XWMHints));
0N/A }
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetPointerMapping
0N/A * Signature: (JJI)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetPointerMapping
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong map, jint buttonNumber)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XGetPointerMapping((Display*)jlong_to_ptr(display), (unsigned char*) jlong_to_ptr(map), buttonNumber);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetDefault
0N/A * Signature: (JJI)I
0N/A */
0N/AJNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_XGetDefault
0N/A(JNIEnv *env, jclass clazz, jlong display, jstring program, jstring option)
0N/A{
0N/A char * c_program = NULL;
0N/A char * c_option = NULL;
0N/A char * c_res = NULL;
0N/A
0N/A if (!JNU_IsNull(env, program)) {
0N/A c_program = (char *)JNU_GetStringPlatformChars(env, program, NULL);
0N/A }
0N/A if (!JNU_IsNull(env, option)) {
0N/A c_option = (char *)JNU_GetStringPlatformChars(env, option, NULL);
0N/A }
0N/A
0N/A if (c_program == NULL || c_option == NULL) {
0N/A if (!JNU_IsNull(env, program)) {
0N/A JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
0N/A }
0N/A if (!JNU_IsNull(env, option)) {
0N/A JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
0N/A }
0N/A return NULL;
0N/A }
0N/A AWT_CHECK_HAVE_LOCK();
0N/A c_res = XGetDefault((Display*)jlong_to_ptr(display), c_program, c_option);
0N/A
0N/A if (!JNU_IsNull(env, program)) {
0N/A JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
0N/A }
0N/A if (!JNU_IsNull(env, option)) {
0N/A JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
0N/A }
0N/A
0N/A if (c_res != NULL) {
0N/A // Memory leak???
0N/A return JNU_NewStringPlatform(env, c_res);
0N/A } else {
0N/A return NULL;
0N/A }
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: getScreenOfWindow
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_getScreenOfWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A XWindowAttributes attrs;
0N/A memset(&attrs, 0, sizeof(attrs));
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XGetWindowAttributes((Display *) jlong_to_ptr(display), window, &attrs);
0N/A return ptr_to_jlong(attrs.screen);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XScreenNumberOfScreen
0N/A * Signature: (J)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XScreenNumberOfScreen
0N/A(JNIEnv *env, jclass clazz, jlong screen)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A if(jlong_to_ptr(screen) == NULL) {
0N/A return -1;
0N/A }
0N/A return XScreenNumberOfScreen((Screen*) jlong_to_ptr(screen));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XIconifyWindow
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XIconifyWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong screenNumber)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XIconifyWindow((Display*) jlong_to_ptr(display), window, screenNumber);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFree
0N/A * Signature: (J)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFree
0N/A(JNIEnv *env, jclass clazz, jlong ptr)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFree(jlong_to_ptr(ptr));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFree
0N/A * Signature: (J)V
0N/A */
0N/AJNIEXPORT jbyteArray JNICALL Java_sun_awt_X11_XlibWrapper_getStringBytes
0N/A(JNIEnv *env, jclass clazz, jlong str_ptr)
0N/A{
0N/A unsigned char * str = (unsigned char*) jlong_to_ptr(str_ptr);
0N/A long length = strlen((char*)str);
0N/A jbyteArray res = (*env)->NewByteArray(env, length);
0N/A void * storage = malloc(length+1);
0N/A memcpy(storage, str, length+1);
0N/A (*env)->SetByteArrayRegion(env, res, 0, length,
0N/A (const signed char*) storage);
0N/A return res;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: ServerVendor
0N/A * Signature: (J)Ljava/lang/String;
0N/A */
0N/AJNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_ServerVendor
0N/A(JNIEnv *env, jclass clazz, jlong display)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return JNU_NewStringPlatform(env, ServerVendor((Display*)jlong_to_ptr(display)));
0N/A}
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: VendorRelease
0N/A * Signature: (J)I;
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_VendorRelease
0N/A(JNIEnv *env, jclass clazz, jlong display)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return VendorRelease((Display*)jlong_to_ptr(display));
0N/A}
1342N/A/*
1342N/A * Class: sun_awt_X11_XlibWrapper
1342N/A * Method: IsXsunKPBehavior
1342N/A * Signature: (J)Z;
1342N/A */
1342N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior
1342N/A(JNIEnv *env, jclass clazz, jlong display)
1342N/A{
1342N/A // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
1342N/A // Otherwise, it is [1] or sometimes [0].
1342N/A // This sniffer first tries to determine what is a keycode for XK_KP_7
1342N/A // using XKeysymToKeycode;
1342N/A // second, in which place in the keysymarray is XK_KP_7
1342N/A // using XKeycodeToKeysym.
1342N/A int kc7;
1342N/A AWT_CHECK_HAVE_LOCK();
1342N/A kc7 = XKeysymToKeycode((Display*)jlong_to_ptr(display), XK_KP_7);
1342N/A if( !kc7 ) {
1342N/A // keycode is not defined. Why, it's a reduced keyboard perhaps:
1342N/A // report arbitrarily false.
1342N/A return JNI_FALSE;
1342N/A } else {
1342N/A long ks2 = XKeycodeToKeysym((Display*)jlong_to_ptr(display), kc7, 2);
1342N/A if( ks2 == XK_KP_7 ) {
1342N/A //XXX If some Xorg server would put XK_KP_7 in keysymarray[2] as well,
1342N/A //XXX for yet unknown to me reason, the sniffer would lie.
1342N/A return JNI_TRUE;
1342N/A }else{
1342N/A return JNI_FALSE;
1342N/A }
1342N/A }
1342N/A}
0N/A
1975N/A
1975N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard
1975N/A(JNIEnv *env, jclass clazz, jlong display)
1975N/A{
1975N/A int xx;
1975N/A AWT_CHECK_HAVE_LOCK();
1975N/A xx = XKeysymToKeycode((Display*)jlong_to_ptr(display), SunXK_F37);
1975N/A return (!xx) ? JNI_FALSE : JNI_TRUE;
1975N/A}
1975N/A
1975N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKanaKeyboard
1975N/A(JNIEnv *env, jclass clazz, jlong display)
1975N/A{
1975N/A int xx;
1975N/A static jboolean result = JNI_FALSE;
1975N/A
1975N/A int32_t minKeyCode, maxKeyCode, keySymsPerKeyCode;
1975N/A KeySym *keySyms, *keySymsStart, keySym;
1975N/A int32_t i;
1975N/A int32_t kanaCount = 0;
1975N/A
2859N/A AWT_CHECK_HAVE_LOCK();
2859N/A
1975N/A // There's no direct way to determine whether the keyboard has
1975N/A // a kana lock key. From available keyboard mapping tables, it looks
1975N/A // like only keyboards with the kana lock key can produce keysyms
1975N/A // for kana characters. So, as an indirect test, we check for those.
1975N/A XDisplayKeycodes((Display*)jlong_to_ptr(display), &minKeyCode, &maxKeyCode);
1975N/A keySyms = XGetKeyboardMapping((Display*)jlong_to_ptr(display), minKeyCode, maxKeyCode - minKeyCode + 1, &keySymsPerKeyCode);
1975N/A keySymsStart = keySyms;
1975N/A for (i = 0; i < (maxKeyCode - minKeyCode + 1) * keySymsPerKeyCode; i++) {
1975N/A keySym = *keySyms++;
1975N/A if ((keySym & 0xff00) == 0x0400) {
1975N/A kanaCount++;
1975N/A }
1975N/A }
1975N/A XFree(keySymsStart);
1975N/A
1975N/A // use a (somewhat arbitrary) minimum so we don't get confused by a stray function key
1975N/A result = kanaCount > 10;
1975N/A return result ? JNI_TRUE : JNI_FALSE;
1975N/A}
1975N/A
0N/AJavaVM* jvm = NULL;
0N/Astatic int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
5558N/A JNIEnv * env;
0N/A if (jvm != NULL) {
5558N/A env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
5558N/A if (env) {
6447N/A return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil",
6447N/A "globalErrorHandler", "(JJ)I", ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
5558N/A }
0N/A }
5558N/A return 0;
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: SetToolkitErrorHandler
0N/A * Signature: ()J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_SetToolkitErrorHandler
0N/A(JNIEnv *env, jclass clazz)
0N/A{
0N/A (*env)->GetJavaVM(env, &jvm);
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XSetErrorHandler(ToolkitErrorHandler));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetErrorHandler
0N/A * Signature: (J)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetErrorHandler
0N/A(JNIEnv *env, jclass clazz, jlong handler)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetErrorHandler((XErrorHandler) jlong_to_ptr(handler));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: CallErrorHandler
0N/A * Signature: (JJJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_CallErrorHandler
0N/A(JNIEnv *env, jclass clazz, jlong handler, jlong display, jlong event_ptr)
0N/A{
0N/A return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
0N/A}
0N/A
1975N/A
1216N/A/*
1216N/A * Class: sun_awt_X11_XlibWrapper
1216N/A * Method: PrintXErrorEvent
1216N/A * Signature: (JJ)V
1216N/A */
1216N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent
1216N/A(JNIEnv *env, jclass clazz, jlong display, jlong event_ptr)
1216N/A{
1216N/A char msg[128];
1216N/A char buf[128];
1216N/A
1216N/A XErrorEvent* err = (XErrorEvent *)jlong_to_ptr(event_ptr);
1216N/A
1216N/A XGetErrorText((Display *)jlong_to_ptr(display), err->error_code, msg, sizeof(msg));
1216N/A jio_fprintf(stderr, "Xerror %s, XID %x, ser# %d\n", msg, err->resourceid, err->serial);
1216N/A jio_snprintf(buf, sizeof(buf), "%d", err->request_code);
1216N/A XGetErrorDatabaseText((Display *)jlong_to_ptr(display), "XRequest", buf, "Unknown", msg, sizeof(msg));
1216N/A jio_fprintf(stderr, "Major opcode %d (%s)\n", err->request_code, msg);
1216N/A if (err->request_code > 128) {
1216N/A jio_fprintf(stderr, "Minor opcode %d\n", err->minor_code);
1216N/A }
1216N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XInternAtoms
0N/A * Signature: (J[Ljava/lang/String;ZJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XInternAtoms
0N/A(JNIEnv *env, jclass clazz, jlong display, jobjectArray names_arr, jboolean only_if_exists, jlong atoms)
0N/A{
0N/A int length = (*env)->GetArrayLength(env, names_arr);
0N/A char ** names = (char**)malloc(length*sizeof(char*));
0N/A jboolean copy;
0N/A int index, name_index = 0;
0N/A int status;
2859N/A
2859N/A AWT_CHECK_HAVE_LOCK();
2859N/A
0N/A for (index = 0; index < length; index++) {
0N/A jstring str = (*env)->GetObjectArrayElement(env, names_arr, index);
0N/A if (!JNU_IsNull(env, str)) {
0N/A const char * str_char = JNU_GetStringPlatformChars(env, str, NULL);
0N/A names[name_index++] = strdup(str_char);
0N/A JNU_ReleaseStringPlatformChars(env, str, str_char);
0N/A (*env)->DeleteLocalRef(env, str);
0N/A }
0N/A }
0N/A status = XInternAtoms((Display*)jlong_to_ptr(display), names, name_index, only_if_exists, (Atom*) jlong_to_ptr(atoms));
0N/A for (index = 0; index < length; index++) {
0N/A free(names[index]);
0N/A }
0N/A free(names);
0N/A return status;
0N/A}
0N/A
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetWindowAttributes
0N/A * Signature: (JJJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowAttributes
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong attr_ptr)
0N/A{
0N/A jint status;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A memset((XWindowAttributes*) jlong_to_ptr(attr_ptr), 0, sizeof(XWindowAttributes));
0N/A status = XGetWindowAttributes((Display*)jlong_to_ptr(display), window, (XWindowAttributes*) jlong_to_ptr(attr_ptr));
0N/A return status;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetGeometry
0N/A * Signature: (JJJJJJJJJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetGeometry
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong root_return,
0N/A jlong x_return, jlong y_return, jlong width_return, jlong height_return,
0N/A jlong border_width_return, jlong depth_return)
0N/A{
0N/A jint status;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A status = XGetGeometry((Display *)jlong_to_ptr(display),
0N/A (Drawable)drawable, (Window *)jlong_to_ptr(root_return),
0N/A (int *)jlong_to_ptr(x_return), (int *)jlong_to_ptr(y_return),
0N/A (unsigned int *)jlong_to_ptr(width_return), (unsigned int *)jlong_to_ptr(height_return),
0N/A (unsigned int *)jlong_to_ptr(border_width_return),
0N/A (unsigned int *)jlong_to_ptr(depth_return));
0N/A return status;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetWMNormalHints
0N/A * Signature: (JJJJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMNormalHints
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints, jlong supplied_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XGetWMNormalHints((Display*) jlong_to_ptr(display),
0N/A window,
0N/A (XSizeHints*) jlong_to_ptr(hints),
0N/A (long*) jlong_to_ptr(supplied_return));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetWMNormalHints
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWMNormalHints
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetWMNormalHints((Display*) jlong_to_ptr(display), window, (XSizeHints*) jlong_to_ptr(hints));
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XDeleteProperty
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDeleteProperty
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong atom)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XDeleteProperty((Display*) jlong_to_ptr(display), window, (Atom)atom);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSendEvent
0N/A * Signature: (JJZJJ)V
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XSendEvent
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jboolean propagate, jlong event_mask, jlong event)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XSendEvent((Display*) jlong_to_ptr(display),
0N/A window,
0N/A propagate==JNI_TRUE?True:False,
0N/A (long) event_mask,
0N/A (XEvent*) jlong_to_ptr(event));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XQueryTree
0N/A * Signature: (JJJJJJ)I
0N/A */
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XQueryTree
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong root_return, jlong parent_return, jlong children_return, jlong nchildren_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XQueryTree((Display*) jlong_to_ptr(display),
0N/A window,
0N/A (Window *) jlong_to_ptr(root_return),
0N/A (Window*) jlong_to_ptr(parent_return),
0N/A (Window**) jlong_to_ptr(children_return),
0N/A (unsigned int*) jlong_to_ptr(nchildren_return));
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: memcpy
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_memcpy
0N/A(JNIEnv *env, jclass clazz, jlong dest_ptr, jlong src_ptr, jlong length)
0N/A{
0N/A memcpy(jlong_to_ptr(dest_ptr), jlong_to_ptr(src_ptr), length);
0N/A}
0N/A
0N/A
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetMinMaxHints
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jint x, jint y, jint width, jint height, jlong flags) {
0N/A XSizeHints * hints;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A hints = XAllocSizeHints();
0N/A hints->flags = flags;
0N/A hints->width = width;
0N/A hints->min_width = width;
0N/A hints->max_width = width;
0N/A hints->height = height;
0N/A hints->min_height = height;
0N/A hints->max_height = height;
0N/A hints->x = x;
0N/A hints->y = y;
0N/A XSetWMNormalHints((Display*) jlong_to_ptr(display), window, hints);
0N/A XFree(hints);
0N/A}
0N/A
0N/A
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong vinfo_mask, jlong vinfo_template,
0N/A jlong nitems_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XGetVisualInfo((Display*) jlong_to_ptr(display),
0N/A (long) vinfo_mask,
0N/A (XVisualInfo*) jlong_to_ptr(vinfo_template),
0N/A (int*) jlong_to_ptr(nitems_return)));
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XAllocSizeHints
0N/A (JNIEnv *env, jclass clazz)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XAllocSizeHints());
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XIconifyWindow
0N/A * Signature: (JJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XBell
0N/A(JNIEnv *env, jclass clazz, jlong display, jint percent)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XBell((Display*)jlong_to_ptr(display), percent);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XAllocColor
0N/A * Signature: (JJJ)Z
0N/A */
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XAllocColor
0N/A(JNIEnv *env, jclass clazz, jlong display , jlong colormap, jlong xcolor) {
0N/A
0N/A Status status;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A status = XAllocColor((Display *) jlong_to_ptr(display), (Colormap) colormap, (XColor *) jlong_to_ptr(xcolor));
0N/A
0N/A if (status == 0) return JNI_FALSE;
0N/A else return JNI_TRUE;
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XCreateBitmapFromData
0N/A * Signature: (JJJII)J
0N/A */
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong data, jint width, jint height) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
0N/A return (jlong) XCreateBitmapFromData((Display *) jlong_to_ptr(display), (Drawable) drawable,
0N/A (char *) jlong_to_ptr(data), width, height);
0N/A}
0N/A
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XFreePixmap
0N/A * Signature: (JJ)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreePixmap
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong pixmap) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFreePixmap((Display *)jlong_to_ptr(display), (Pixmap) pixmap);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XReparentWindow
0N/A * Signature: (JJJII)V
0N/A */
0N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XReparentWindow
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong parent, jint x, jint y) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XReparentWindow((Display*)jlong_to_ptr(display), window, parent, x, y);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XConvertSelection
0N/A * Signature: (JJJJJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XConvertSelection(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong selection,
0N/A jlong target, jlong property,
0N/A jlong requestor, jlong time) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XConvertSelection((Display*)jlong_to_ptr(display), selection, target, property, requestor,
0N/A time);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XSetSelectionOwner
0N/A * Signature: (JJJJ)V
0N/A */
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XSetSelectionOwner(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong selection,
0N/A jlong owner, jlong time) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetSelectionOwner((Display*)jlong_to_ptr(display), selection, owner, time);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetSelectionOwner
0N/A * Signature: (JJ)J
0N/A */
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XGetSelectionOwner(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong selection) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return (jlong)XGetSelectionOwner((Display*)jlong_to_ptr(display), selection);
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XGetAtomName
0N/A * Signature: (JJ)Ljava/lang/String;
0N/A */
0N/AJNIEXPORT jstring JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XGetAtomName(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong atom)
0N/A{
0N/A jstring string = NULL;
0N/A char* name;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A name = (char*) XGetAtomName((Display*)jlong_to_ptr(display), atom);
0N/A
0N/A if (name == NULL) {
0N/A fprintf(stderr, "Atom was %d\n", (int)atom);
0N/A JNU_ThrowNullPointerException(env, "Failed to retrieve atom name.");
0N/A return NULL;
0N/A }
0N/A
0N/A string = (*env)->NewStringUTF(env, (const char *)name);
0N/A
0N/A XFree(name);
0N/A
0N/A return string;
0N/A}
0N/A
0N/A/*
0N/A * Class: sun_awt_X11_XlibWrapper
0N/A * Method: XMaxRequestSize
0N/A * Signature: (J)J
0N/A */
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XMaxRequestSize(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XMaxRequestSize((Display*) jlong_to_ptr(display));
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XAllocWMHints(JNIEnv *env, jclass clazz)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XAllocWMHints());
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XCreatePixmap(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jint depth)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XCreatePixmap((Display*)jlong_to_ptr(display), (Drawable)drawable, width, height, depth);
0N/A}
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XCreateImage
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong visual_ptr,
0N/A jint depth, jint format, jint offset, jlong data, jint width,
0N/A jint height, jint bitmap_pad, jint bytes_per_line)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XCreateImage((Display*) jlong_to_ptr(display), (Visual*) jlong_to_ptr(visual_ptr),
0N/A depth, format, offset, (char*) jlong_to_ptr(data),
0N/A width, height, bitmap_pad, bytes_per_line));
0N/A}
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XCreateGC
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong drawable,
0N/A jlong valuemask, jlong values)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XCreateGC((Display*) jlong_to_ptr(display), (Drawable)drawable, valuemask, (XGCValues*) jlong_to_ptr(values)));
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XDestroyImage(JNIEnv *env, jclass clazz, jlong image)
0N/A{
0N/A XImage *img = (XImage*) jlong_to_ptr(image);
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
0N/A // Fix for bug 4903671 :
0N/A // We should be careful to not double free the memory pointed to data
0N/A // Since we use unsafe to allocate it, we should use unsafe to free it.
0N/A // So we should NULL the data pointer before calling XDestroyImage so
0N/A // that X does not free the pointer for us.
0N/A img->data = NULL;
0N/A XDestroyImage(img);
0N/A}
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XPutImage(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong gc, jlong image, jint src_x, jint src_y, jint dest_x, jint dest_y, jint width, jint height)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XPutImage((Display*)jlong_to_ptr(display), (Drawable)drawable, (GC) jlong_to_ptr(gc), (XImage*) jlong_to_ptr(image), src_x, src_y,
0N/A dest_x, dest_y, width, height);
0N/A}
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XFreeGC(JNIEnv *env, jclass clazz, jlong display, jlong gc)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFreeGC((Display*) jlong_to_ptr(display), (GC) jlong_to_ptr(gc));
0N/A}
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XSetWindowBackgroundPixmap(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong pixmap)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XSetWindowBackgroundPixmap((Display*) jlong_to_ptr(display), (Window)window, (Pixmap)pixmap);
0N/A}
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XClearWindow(JNIEnv *env, jclass clazz, jlong display, jlong window)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XClearWindow((Display*) jlong_to_ptr(display), (Window)window);
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XGetIconSizes(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong ret_sizes, jlong ret_count)
0N/A{
0N/A XIconSize** psize = (XIconSize**) jlong_to_ptr(ret_sizes);
0N/A int * pcount = (int *) jlong_to_ptr(ret_count);
0N/A Status res;
0N/A AWT_CHECK_HAVE_LOCK();
0N/A res = XGetIconSizes((Display*) jlong_to_ptr(display), (Window)window, psize, pcount);
0N/A return res;
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeQueryExtension
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong major_version_return,
0N/A jlong minor_version_return)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeQueryExtension((Display*) jlong_to_ptr(display), (int *) jlong_to_ptr(major_version_return),
0N/A (int *) jlong_to_ptr(minor_version_return));
0N/A}
0N/A
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryExtension
0N/A (JNIEnv *env, jclass clazz, jlong display, jstring jstr, jlong mop_return,
0N/A jlong feve_return, jlong err_return)
0N/A{
0N/A char *cname;
0N/A Boolean bu;
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A cname = (char *)JNU_GetStringPlatformChars(env, jstr, NULL);
0N/A } else {
0N/A cname = "";
0N/A }
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A bu = XQueryExtension((Display*) jlong_to_ptr(display), cname, (int *) jlong_to_ptr(mop_return),
0N/A (int *) jlong_to_ptr(feve_return), (int *) jlong_to_ptr(err_return));
0N/A if (!JNU_IsNull(env, jstr)) {
0N/A JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
0N/A }
0N/A return bu ? JNI_TRUE : JNI_FALSE;
0N/A}
0N/A
0N/AJNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKeypadKey
0N/A (JNIEnv *env, jclass clazz, jlong keysym)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A if(IsKeypadKey(keysym)) {
0N/A return JNI_TRUE;
0N/A }
0N/A return JNI_FALSE;
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XdbeAllocateBackBufferName
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong window, jint swap_action)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeAllocateBackBufferName((Display*) jlong_to_ptr(display), (Window) window,
0N/A (XdbeSwapAction) swap_action);
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeDeallocateBackBufferName
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong buffer)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeDeallocateBackBufferName((Display*) jlong_to_ptr(display), (XdbeBackBuffer) buffer);
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeBeginIdiom
0N/A (JNIEnv *env, jclass clazz, jlong display)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeBeginIdiom((Display*) jlong_to_ptr(display));
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeEndIdiom
0N/A (JNIEnv *env, jclass clazz, jlong display)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeEndIdiom((Display*) jlong_to_ptr(display));
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeSwapBuffers
0N/A (JNIEnv *env, jclass clazz, jlong display, jlong swap_info, jint num_windows)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XdbeSwapBuffers((Display*) jlong_to_ptr(display), (XdbeSwapInfo *) jlong_to_ptr(swap_info), num_windows);
0N/A}
874N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XQueryKeymap
874N/A(JNIEnv *env, jclass clazz, jlong display, jlong vector)
874N/A{
874N/A
874N/A AWT_CHECK_HAVE_LOCK();
874N/A XQueryKeymap( (Display *) jlong_to_ptr(display), (char *) jlong_to_ptr(vector));
874N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XKeycodeToKeysym(JNIEnv *env, jclass clazz,
0N/A jlong display, jint keycode,
0N/A jint index) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (int)index);
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL
1067N/AJava_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
1067N/A jlong display) {
1067N/A XkbStateRec sr;
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A memset(&sr, 0, sizeof(XkbStateRec));
1067N/A XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
1067N/A// printf("-------------------------------------VVVV\n");
1067N/A// printf(" group:0x%0X\n",sr.group);
1067N/A// printf(" base_group:0x%0X\n",sr.base_group);
1067N/A// printf(" latched_group:0x%0X\n",sr.latched_group);
1067N/A// printf(" locked_group:0x%0X\n",sr.locked_group);
1067N/A// printf(" mods:0x%0X\n",sr.mods);
1067N/A// printf(" base_mods:0x%0X\n",sr.base_mods);
1067N/A// printf(" latched_mods:0x%0X\n",sr.latched_mods);
1067N/A// printf(" locked_mods:0x%0X\n",sr.locked_mods);
1067N/A// printf(" compat_state:0x%0X\n",sr.compat_state);
1067N/A// printf(" grab_mods:0x%0X\n",sr.grab_mods);
1067N/A// printf(" compat_grab_mods:0x%0X\n",sr.compat_grab_mods);
1067N/A// printf(" lookup_mods:0x%0X\n",sr.lookup_mods);
1067N/A// printf(" compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods);
1067N/A// printf(" ptr_buttons:0x%0X\n",sr.ptr_buttons);
1067N/A// printf("-------------------------------------^^^^\n");
1067N/A return (jint)(sr.group);
1067N/A}
1067N/AJNIEXPORT jlong JNICALL
1067N/AJava_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
1067N/A jlong display, jint keycode,
1067N/A jint group, jint level) {
1067N/A AWT_CHECK_HAVE_LOCK();
1067N/A return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
1067N/A}
1067N/A
1067N/AJNIEXPORT jint JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong keysym) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return XKeysymToKeycode((Display*) jlong_to_ptr(display), (KeySym)keysym);
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XGetModifierMapping(JNIEnv *env, jclass clazz,
0N/A jlong display) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A return ptr_to_jlong(XGetModifierMapping((Display*) jlong_to_ptr(display)));
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XFreeModifiermap(JNIEnv *env, jclass clazz,
0N/A jlong keymap) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap));
0N/A}
1975N/A/*
1975N/A * Class: sun_awt_X11_XlibWrapper
1975N/A * Method: XRefreshKeyboardMapping
1975N/A * Signature: (J)V
1975N/A */
1975N/AJNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping
1975N/A(JNIEnv *env, jclass clazz, jlong event_ptr)
1975N/A{
1975N/A AWT_CHECK_HAVE_LOCK();
1975N/A XRefreshKeyboardMapping((XMappingEvent*) jlong_to_ptr(event_ptr));
1975N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab(JNIEnv *env, jclass clazz,
0N/A jlong display, jint mask,
0N/A jlong cursor, jlong time) {
0N/A AWT_CHECK_HAVE_LOCK();
0N/A XChangeActivePointerGrab((Display*)jlong_to_ptr(display), (unsigned int)mask,
0N/A (Cursor)cursor, (Time)time);
0N/A}
0N/A
0N/A/******************* Secondary loop support ************************************/
0N/A#define AWT_SECONDARY_LOOP_TIMEOUT 250
0N/A
0N/Astatic Bool exitSecondaryLoop = True;
0N/A
0N/A/*
0N/A * This predicate procedure allows the Toolkit thread to process specific events
0N/A * while it is blocked waiting for the event dispatch thread to process
0N/A * a SunDropTargetEvent. We need this to prevent deadlock when the client code
0N/A * processing SunDropTargetEvent sets or gets the contents of the system
0N/A * clipboard/selection. In this case the event dispatch thread waits for the
0N/A * Toolkit thread to process PropertyNotify or SelectionNotify events.
0N/A */
0N/Astatic Bool
0N/Asecondary_loop_event(Display* dpy, XEvent* event, char* arg) {
0N/A return (event->type == SelectionNotify ||
0N/A event->type == SelectionClear ||
0N/A event->type == PropertyNotify) ? True : False;
0N/A}
0N/A
0N/A
0N/AJNIEXPORT jboolean JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
0N/A jlong display, jlong ptr) {
6139N/A uint32_t timeout = 1;
6139N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A exitSecondaryLoop = False;
0N/A while (!exitSecondaryLoop) {
0N/A if (XCheckIfEvent((Display*) jlong_to_ptr(display), (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, NULL)) {
0N/A return JNI_TRUE;
0N/A }
6139N/A timeout = (timeout < AWT_SECONDARY_LOOP_TIMEOUT) ? (timeout << 1) : AWT_SECONDARY_LOOP_TIMEOUT;
6139N/A AWT_WAIT(timeout);
0N/A }
0N/A return JNI_FALSE;
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_ExitSecondaryLoop(JNIEnv *env, jclass clazz) {
0N/A DASSERT(!exitSecondaryLoop);
0N/A AWT_CHECK_HAVE_LOCK();
0N/A exitSecondaryLoop = True;
0N/A AWT_NOTIFY_ALL();
0N/A}
0N/A/*******************************************************************************/
0N/A
0N/AJNIEXPORT jobjectArray JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XTextPropertyToStringList(JNIEnv *env,
0N/A jclass clazz,
0N/A jbyteArray bytes,
0N/A jlong encodingAtom) {
0N/A XTextProperty tp;
0N/A jbyte *value;
0N/A
0N/A char** strings = (char **)NULL;
0N/A int32_t nstrings = 0;
0N/A jobjectArray ret = NULL;
0N/A int32_t i;
0N/A jsize len;
0N/A jboolean isCopy = JNI_FALSE;
0N/A static jclass stringClass = NULL;
0N/A jclass stringClassLocal = NULL;
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
0N/A if (JNU_IsNull(env, stringClass)) {
0N/A stringClassLocal = (*env)->FindClass(env, "java/lang/String");
0N/A
0N/A if ((*env)->ExceptionCheck(env)) {
0N/A (*env)->ExceptionDescribe(env);
0N/A (*env)->ExceptionClear(env);
0N/A DASSERT(False);
0N/A }
0N/A
0N/A if (JNU_IsNull(env, stringClassLocal)) {
0N/A return NULL;
0N/A }
0N/A
0N/A stringClass = (*env)->NewGlobalRef(env, stringClassLocal); /* never freed! */
0N/A (*env)->DeleteLocalRef(env, stringClassLocal);
0N/A
0N/A if (JNU_IsNull(env, stringClass)) {
0N/A JNU_ThrowOutOfMemoryError(env, "");
0N/A return NULL;
0N/A }
0N/A }
0N/A
0N/A /*
0N/A * If the length of the byte array is 0 just return a null
0N/A */
0N/A len = (*env)->GetArrayLength(env, bytes);
0N/A if (len == 0) {
0N/A return (*env)->NewObjectArray(env, 0, stringClass, NULL);
0N/A }
0N/A
0N/A value = (*env)->GetByteArrayElements(env, bytes, &isCopy);
0N/A if (JNU_IsNull(env, value)) {
0N/A return NULL;
0N/A }
0N/A
0N/A tp.encoding = encodingAtom;
0N/A tp.value = (unsigned char *)value;
0N/A tp.nitems = len;
0N/A tp.format = 8;
0N/A
0N/A /*
0N/A * Convert the byte stream into a list of X11 strings
0N/A */
0N/A if (XTextPropertyToStringList(&tp, &strings, &nstrings) == 0) {
0N/A (*env)->ReleaseByteArrayElements(env, bytes, value, JNI_ABORT);
0N/A return NULL;
0N/A }
0N/A
0N/A (*env)->ReleaseByteArrayElements(env, bytes, value, JNI_ABORT);
0N/A
0N/A if (nstrings == 0) {
0N/A return (*env)->NewObjectArray(env, 0, stringClass, NULL);
0N/A }
0N/A
0N/A ret = (*env)->NewObjectArray(env, nstrings, stringClass, NULL);
0N/A
0N/A if ((*env)->ExceptionCheck(env)) {
0N/A (*env)->ExceptionDescribe(env);
0N/A (*env)->ExceptionClear(env);
0N/A goto wayout;
0N/A }
0N/A
0N/A if (JNU_IsNull(env, ret)) {
0N/A goto wayout;
0N/A }
0N/A
0N/A for (i = 0; i < nstrings; i++) {
0N/A jstring string = (*env)->NewStringUTF(env,
0N/A (const char *)strings[i]);
0N/A if ((*env)->ExceptionCheck(env)) {
0N/A (*env)->ExceptionDescribe(env);
0N/A (*env)->ExceptionClear(env);
0N/A goto wayout;
0N/A }
0N/A
0N/A if (JNU_IsNull(env, string)) {
0N/A goto wayout;
0N/A }
0N/A
0N/A (*env)->SetObjectArrayElement(env, ret, i, string);
0N/A
0N/A if ((*env)->ExceptionCheck(env)) {
0N/A (*env)->ExceptionDescribe(env);
0N/A (*env)->ExceptionClear(env);
0N/A goto wayout;
0N/A }
0N/A
0N/A (*env)->DeleteLocalRef(env, string);
0N/A }
0N/A
0N/A wayout:
0N/A /*
0N/A * Clean up and return
0N/A */
0N/A XFreeStringList(strings);
0N/A return ret;
0N/A}
0N/A
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XPutBackEvent(JNIEnv *env,
0N/A jclass clazz,
0N/A jlong display,
0N/A jlong event) {
0N/A XPutBackEvent((Display*)jlong_to_ptr(display), (XEvent*) jlong_to_ptr(event));
0N/A}
0N/A
0N/AJNIEXPORT jlong JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_getAddress(JNIEnv *env,
0N/A jclass clazz,
0N/A jobject o) {
0N/A return ptr_to_jlong(o);
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_copyIntArray(JNIEnv *env,
0N/A jclass clazz,
0N/A jlong dest, jobject array, jint size) {
0N/A jboolean isCopy = JNI_FALSE;
0N/A jint * ints = (*env)->GetIntArrayElements(env, array, &isCopy);
0N/A memcpy(jlong_to_ptr(dest), ints, size);
0N/A if (isCopy) {
0N/A (*env)->ReleaseIntArrayElements(env, array, ints, JNI_ABORT);
0N/A }
0N/A}
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_copyLongArray(JNIEnv *env,
0N/A jclass clazz,
0N/A jlong dest, jobject array, jint size) {
0N/A jboolean isCopy = JNI_FALSE;
0N/A jlong * longs = (*env)->GetLongArrayElements(env, array, &isCopy);
0N/A memcpy(jlong_to_ptr(dest), longs, size);
0N/A if (isCopy) {
0N/A (*env)->ReleaseLongArrayElements(env, array, longs, JNI_ABORT);
0N/A }
0N/A}
0N/A
0N/AJNIEXPORT jint JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XSynchronize(JNIEnv *env, jclass clazz, jlong display, jboolean onoff)
0N/A{
0N/A return (jint) XSynchronize((Display*)jlong_to_ptr(display), (onoff == JNI_TRUE ? True : False));
0N/A}
0N/A
0N/AJNIEXPORT jboolean JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_XShapeQueryExtension
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong event_base_return, jlong error_base_return)
0N/A{
0N/A jboolean status;
0N/A
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
0N/A status = XShapeQueryExtension((Display *)jlong_to_ptr(display),
0N/A (int *)jlong_to_ptr(event_base_return), (int *)jlong_to_ptr(error_base_return));
0N/A return status;
0N/A}
0N/A
0N/A/*
0N/A * Class: XlibWrapper
0N/A * Method: SetRectangularShape
0N/A */
0N/A
0N/AJNIEXPORT void JNICALL
0N/AJava_sun_awt_X11_XlibWrapper_SetRectangularShape
0N/A(JNIEnv *env, jclass clazz, jlong display, jlong window,
0N/A jint x1, jint y1, jint x2, jint y2,
0N/A jobject region)
0N/A{
0N/A AWT_CHECK_HAVE_LOCK();
0N/A
886N/A // If all the params are zeros, the shape must be simply reset.
886N/A // Otherwise, the shape may be not rectangular.
886N/A if (region || x1 || x2 || y1 || y2) {
886N/A XRectangle rects[256];
886N/A XRectangle *pRect = rects;
0N/A
886N/A int numrects = RegionToYXBandedRectangles(env, x1, y1, x2, y2, region,
886N/A &pRect, 256);
886N/A
886N/A XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
886N/A ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded);
886N/A XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
0N/A ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded);
0N/A
886N/A if (pRect != rects) {
886N/A free(pRect);
886N/A }
886N/A } else {
886N/A // Reset the shape to a rectangular form.
886N/A XShapeCombineMask((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
886N/A ShapeClip, 0, 0, None, ShapeSet);
886N/A XShapeCombineMask((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
886N/A ShapeBounding, 0, 0, None, ShapeSet);
0N/A }
0N/A}
1056N/A
1056N/A/*
1056N/A * Class: XlibWrapper
1056N/A * Method: SetZOrder
1056N/A */
1056N/A
1056N/AJNIEXPORT void JNICALL
1056N/AJava_sun_awt_X11_XlibWrapper_SetZOrder
1056N/A(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong above)
1056N/A{
2859N/A unsigned int value_mask = CWStackMode;
1056N/A
1056N/A XWindowChanges wc;
1056N/A wc.sibling = (Window)jlong_to_ptr(above);
1056N/A
2859N/A AWT_CHECK_HAVE_LOCK();
1056N/A
1056N/A if (above == 0) {
1056N/A wc.stack_mode = Above;
1056N/A } else {
1056N/A wc.stack_mode = Below;
1056N/A value_mask |= CWSibling;
1056N/A }
1056N/A
1056N/A XConfigureWindow((Display *)jlong_to_ptr(display),
1056N/A (Window)jlong_to_ptr(window),
1056N/A value_mask, &wc );
1056N/A}
1066N/A
1066N/A/*
1066N/A * Class: XlibWrapper
1066N/A * Method: SetBitmapShape
1066N/A */
1066N/AJNIEXPORT void JNICALL
1066N/AJava_sun_awt_X11_XlibWrapper_SetBitmapShape
1066N/A(JNIEnv *env, jclass clazz, jlong display, jlong window,
1066N/A jint width, jint height, jintArray bitmap)
1066N/A{
1066N/A jsize len;
1066N/A jint *values;
1066N/A jboolean isCopy = JNI_FALSE;
1066N/A size_t worstBufferSize = (size_t)((width / 2 + 1) * height);
1066N/A RECT_T * pRect;
2859N/A int numrects;
1066N/A
6295N/A if (!IS_SAFE_SIZE_MUL(width / 2 + 1, height)) {
6295N/A return;
6295N/A }
6295N/A
1066N/A AWT_CHECK_HAVE_LOCK();
1066N/A
1066N/A len = (*env)->GetArrayLength(env, bitmap);
1066N/A if (len == 0 || len < width * height) {
1066N/A return;
1066N/A }
1066N/A
1066N/A values = (*env)->GetIntArrayElements(env, bitmap, &isCopy);
1066N/A if (JNU_IsNull(env, values)) {
1066N/A return;
1066N/A }
1066N/A
6295N/A pRect = (RECT_T *)SAFE_SIZE_ARRAY_ALLOC(malloc, worstBufferSize, sizeof(RECT_T));
6295N/A if (!pRect) {
6295N/A return;
6295N/A }
1066N/A
1066N/A /* Note: the values[0] and values[1] are supposed to contain the width
1066N/A * and height (see XIconInfo.getIntData() for details). So, we do +2.
1066N/A */
2859N/A numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height,
1066N/A (unsigned char *)(values + 2), pRect);
1066N/A
1066N/A XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
1066N/A ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded);
1066N/A XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
1066N/A ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded);
1066N/A
1066N/A free(pRect);
1066N/A
1066N/A (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT);
1066N/A}
1066N/A