XlibWrapper.c revision 886
/*
* Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
#include "sun_awt_X11_XlibWrapper.h"
#include <string.h>
#include <stdlib.h>
#include <jni.h>
#include <jni_util.h>
#include <jlong.h>
#include <awt.h>
#include <jvm.h>
#include <Region.h>
#if defined(DEBUG) || defined(INTERNAL_BUILD)
static void
{
if (lockIsHeldMID == NULL) {
"isAWTLockHeldByCurrentThread", "()Z");
}
}
}
#else
#define AWT_CHECK_HAVE_LOCK()
#endif
/*
* Class: XlibWrapper
* Method: XOpenDisplay
* Signature: (J)J
*/
{
return ptr_to_jlong(dp);
}
}
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DefaultScreen
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_DefaultScreen (JNIEnv *env, jclass clazz, jlong display) {
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: ScreenOfDisplay
* Signature: (JJ)J
*/
JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_ScreenOfDisplay(JNIEnv *env, jclass clazz, jlong display, jlong screen_number) {
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DoesBackingStore
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_DoesBackingStore(JNIEnv *env, jclass clazz, jlong screen) {
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DisplayWidth
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DisplayWidthMM
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DisplayHeight
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: DisplayHeightMM
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: RootWindow
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: ScreenCount
*/
}
/*
* Class: XlibWrapper
* Method: XCreateWindow
* Signature: (JJIIIIIIJJJJ)J
*/
{
}
/*
* Class: XlibWrapper
* Method: XConvertCase
* Signature: (JJJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XMapWindow
* Signature: (JJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XMapRaised
* Signature: (JJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XRaiseWindow
* Signature: (JJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XLowerWindow
* Signature: (JJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XRestackWindows
* Signature: (JJI)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XSetInputFocus
* Signature: (JJ)V
*/
{
XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, CurrentTime);
}
/*
* Class: XlibWrapper
* Method: XSetInputFocus2
* Signature: (JJJ)V
*/
{
}
/*
* Class: XlibWrapper
* Method: XGetInputFocus
* Signature: (JJ)V
*/
{
int revert_to;
return focusOwner;
}
/*
* Class: XlibWrapper
* Method: XDestroyWindow
* Signature: (JJ)V
*/
{
}
{
}
{
}
{
}
{
}
}
/* Workaround for bug 5039226 */
}
/*
* Class: XlibWrapper
* Method: XUnmapWindow
* Signature: (JJ)V
*/
{
}
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XNextEvent
* Signature: (JJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XMaskEvent
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XWindowEvent
* Signature: (JJJJ)V
*/
{
XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFilterEvent
* Signature: (JJ)Z
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSupportsLocale
* Signature: ()Z
*/
{
return (jboolean)XSupportsLocale();
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetLocaleModifiers
*/
{
char * modifier_list = NULL;
}
if (modifier_list) {
} else {
}
}
/*
* Class: sun_awt_X11_wrappers_XlibWrapper
* Method: XPeekEvent
* Signature: (JJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XMoveResizeWindow
* Signature: (JJIIII)V
*/
(JNIEnv *env, jclass clazz, jlong display, jlong window, jint x , jint y , jint width, jint height) {
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XResizeWindow
* Signature: (JJII)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XMoveWindow
* Signature: (JJII)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetWindowBackground
* Signature: (JJJ)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFlush
* Signature: (J)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSync
* Signature: (JI)V
*/
}
{
(int *) jlong_to_ptr(dest_x_return),
(int *) jlong_to_ptr(dest_y_return),
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: SetProperty
*/
char *cname;
/*
In case there are direct support of UTF-8 declared, use UTF-8 strings.
*/
#ifdef X_HAVE_UTF8_STRING
#else
#endif
} else {
cname = "";
}
#ifdef X_HAVE_UTF8_STRING
XStdICCTextStyle, &tp);
#else
XStdICCTextStyle, &tp);
#endif
XChangeProperty((Display *)jlong_to_ptr(display), window, atom, tp.encoding, tp.format, PropModeReplace, tp.value, tp.nitems);
}
}
#ifdef X_HAVE_UTF8_STRING
#else
#endif
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XChangeProperty
* Signature: (JJJJJJJJJJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XChangePropertyS
* Signature: (JJJJJJJJJLjava/lang/String;)V
*/
{
if (iscopy) {
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetWindowProperty
* Signature: (JJJJJJJJJJJ)J;
*/
{
return XGetWindowProperty((Display*) jlong_to_ptr(display), window, property, long_offset, long_length,
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: GetProperty
*/
{
/* Request status */
int status;
/* Returns of XGetWindowProperty */
int actual_format;
unsigned long nitems;
unsigned long bytes_after;
unsigned char * string;
&string);
return NULL;
}
return NULL;
}
// Memory leak???
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: InternAtom
*/
char *cname;
unsigned long atom;
} else {
cname = "";
}
}
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XCreatePixmapCursor
* Signature: (JJJJJII)J
*/
(JNIEnv *env , jclass clazz, jlong display, jlong source, jlong mask, jlong fore, jlong back, jint x , jint y) {
return (jlong) XCreatePixmapCursor((Display *) jlong_to_ptr(display), (Pixmap) source, (Pixmap) mask,
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XQueryBestCursor
* Signature: (JJIIJJ)Z
*/
(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jlong width_return, jlong height_return) {
else return JNI_TRUE;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFreeCursor
* Signature: (JJ)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XQueryPointer
* Signature: (JJJJJJJJJ)Z
*/
(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) {
Bool b;
(unsigned int *) jlong_to_ptr(mask_return));
else return JNI_FALSE;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XChangeWindowAttributes
* Signature: (JJJJ)V
*/
XChangeWindowAttributes((Display *) jlong_to_ptr(display), (Window) window, (unsigned long) valuemask,
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetTransientFor
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetWMHints
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetWMHints
* Signature: (JJJ)V
*/
{
} else {
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetPointerMapping
* Signature: (JJI)I
*/
{
return XGetPointerMapping((Display*)jlong_to_ptr(display), (unsigned char*) jlong_to_ptr(map), buttonNumber);
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetDefault
* Signature: (JJI)I
*/
{
}
}
}
}
return NULL;
}
}
}
// Memory leak???
} else {
return NULL;
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: getScreenOfWindow
* Signature: (JJ)J
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XScreenNumberOfScreen
* Signature: (J)J
*/
{
return -1;
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XIconifyWindow
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFree
* Signature: (J)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFree
* Signature: (J)V
*/
{
(const signed char*) storage);
return res;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: ServerVendor
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: VendorRelease
* Signature: (J)I;
*/
{
}
} else {
return 0;
}
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: SetToolkitErrorHandler
* Signature: ()J
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetErrorHandler
* Signature: (J)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: CallErrorHandler
* Signature: (JJJ)I
*/
{
return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XInternAtoms
*/
(JNIEnv *env, jclass clazz, jlong display, jobjectArray names_arr, jboolean only_if_exists, jlong atoms)
{
int index, name_index = 0;
int status;
}
}
status = XInternAtoms((Display*)jlong_to_ptr(display), names, name_index, only_if_exists, (Atom*) jlong_to_ptr(atoms));
}
return status;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetWindowAttributes
* Signature: (JJJ)I
*/
{
status = XGetWindowAttributes((Display*)jlong_to_ptr(display), window, (XWindowAttributes*) jlong_to_ptr(attr_ptr));
return status;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetGeometry
* Signature: (JJJJJJJJJ)I
*/
{
(unsigned int *)jlong_to_ptr(border_width_return),
(unsigned int *)jlong_to_ptr(depth_return));
return status;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetWMNormalHints
* Signature: (JJJJ)I
*/
{
(long*) jlong_to_ptr(supplied_return));
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetWMNormalHints
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XDeleteProperty
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSendEvent
* Signature: (JJZJJ)V
*/
(JNIEnv *env, jclass clazz, jlong display, jlong window, jboolean propagate, jlong event_mask, jlong event)
{
(long) event_mask,
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XQueryTree
* Signature: (JJJJJJ)I
*/
(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong root_return, jlong parent_return, jlong children_return, jlong nchildren_return)
{
(unsigned int*) jlong_to_ptr(nchildren_return));
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: memcpy
* Signature: (JJJ)V
*/
{
}
(JNIEnv *env, jclass clazz, jlong display, jlong window, jint x, jint y, jint width, jint height, jlong flags) {
XSizeHints * hints;
hints = XAllocSizeHints();
hints->x = x;
hints->y = y;
}
{
(long) vinfo_mask,
(int*) jlong_to_ptr(nitems_return)));
}
{
return ptr_to_jlong(XAllocSizeHints());
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XIconifyWindow
* Signature: (JJJ)V
*/
{
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XAllocColor
* Signature: (JJJ)Z
*/
status = XAllocColor((Display *) jlong_to_ptr(display), (Colormap) colormap, (XColor *) jlong_to_ptr(xcolor));
else return JNI_TRUE;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XCreateBitmapFromData
* Signature: (JJJII)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XFreePixmap
* Signature: (JJ)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XReparentWindow
* Signature: (JJJII)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XConvertSelection
* Signature: (JJJJJJ)V
*/
time);
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XSetSelectionOwner
* Signature: (JJJJ)V
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetSelectionOwner
* Signature: (JJ)J
*/
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XGetAtomName
*/
{
char* name;
return NULL;
}
return string;
}
/*
* Class: sun_awt_X11_XlibWrapper
* Method: XMaxRequestSize
* Signature: (J)J
*/
}
{
return ptr_to_jlong(XAllocWMHints());
}
Java_sun_awt_X11_XlibWrapper_XCreatePixmap(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jint depth)
{
}
{
return ptr_to_jlong(XCreateImage((Display*) jlong_to_ptr(display), (Visual*) jlong_to_ptr(visual_ptr),
}
{
return ptr_to_jlong(XCreateGC((Display*) jlong_to_ptr(display), (Drawable)drawable, valuemask, (XGCValues*) jlong_to_ptr(values)));
}
{
// Fix for bug 4903671 :
// We should be careful to not double free the memory pointed to data
// Since we use unsafe to allocate it, we should use unsafe to free it.
// So we should NULL the data pointer before calling XDestroyImage so
// that X does not free the pointer for us.
}
Java_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)
{
XPutImage((Display*)jlong_to_ptr(display), (Drawable)drawable, (GC) jlong_to_ptr(gc), (XImage*) jlong_to_ptr(image), src_x, src_y,
}
{
}
Java_sun_awt_X11_XlibWrapper_XSetWindowBackgroundPixmap(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong pixmap)
{
}
{
}
Java_sun_awt_X11_XlibWrapper_XGetIconSizes(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong ret_sizes, jlong ret_count)
{
return res;
}
{
return XdbeQueryExtension((Display*) jlong_to_ptr(display), (int *) jlong_to_ptr(major_version_return),
(int *) jlong_to_ptr(minor_version_return));
}
{
char *cname;
} else {
cname = "";
}
}
}
{
if(IsKeypadKey(keysym)) {
return JNI_TRUE;
}
return JNI_FALSE;
}
{
}
{
}
{
}
{
}
{
return XdbeSwapBuffers((Display*) jlong_to_ptr(display), (XdbeSwapInfo *) jlong_to_ptr(swap_info), num_windows);
}
{
}
}
}
}
}
}
/******************* Secondary loop support ************************************/
#define AWT_SECONDARY_LOOP_TIMEOUT 250
/*
* This predicate procedure allows the Toolkit thread to process specific events
* while it is blocked waiting for the event dispatch thread to process
* a SunDropTargetEvent. We need this to prevent deadlock when the client code
* processing SunDropTargetEvent sets or gets the contents of the system
* Toolkit thread to process PropertyNotify or SelectionNotify events.
*/
static Bool
}
while (!exitSecondaryLoop) {
if (XCheckIfEvent((Display*) jlong_to_ptr(display), (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, NULL)) {
return JNI_TRUE;
}
}
return JNI_FALSE;
}
}
/*******************************************************************************/
int32_t i;
}
return NULL;
}
return NULL;
}
}
/*
* If the length of the byte array is 0 just return a null
*/
if (len == 0) {
}
return NULL;
}
/*
* Convert the byte stream into a list of X11 strings
*/
return NULL;
}
if (nstrings == 0) {
}
goto wayout;
}
goto wayout;
}
for (i = 0; i < nstrings; i++) {
(const char *)strings[i]);
goto wayout;
}
goto wayout;
}
goto wayout;
}
}
/*
* Clean up and return
*/
return ret;
}
}
jobject o) {
return ptr_to_jlong(o);
}
if (isCopy) {
}
}
if (isCopy) {
}
}
{
}
{
return status;
}
/*
* Class: XlibWrapper
* Method: SetRectangularShape
*/
{
// If all the params are zeros, the shape must be simply reset.
// Otherwise, the shape may be not rectangular.
&pRect, 256);
}
} else {
// Reset the shape to a rectangular form.
}
}