src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c
changeset 50350 668463f93ec0
parent 47216 71c04702a3d5
--- a/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c	Tue May 29 11:22:21 2018 -0700
+++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c	Wed May 30 08:19:59 2018 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, 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,31 +23,32 @@
  * questions.
  */
 
+#include "awt.h"
+#include "awt_util.h"
+#include "jni.h"
+#include "jlong.h"
+#include "Region.h"
+#include "sizecalc.h"
+#include "utility/rect.h"
+
 #include "sun_awt_X11_XlibWrapper.h"
-#include <X11/Xlib.h>
-#include <X11/keysym.h>
-#include <X11/Xutil.h>
-#include <X11/Xos.h>
-#include <X11/Xatom.h>
+
+#include <stdlib.h>
+#include <string.h>
 #include <X11/extensions/Xdbe.h>
 #include <X11/extensions/shape.h>
-#include <string.h>
-#include <stdlib.h>
+#include <X11/keysym.h>
 #include <X11/Sunkeysym.h>
-
-#include <jni.h>
-#include <jni_util.h>
-#include <jlong.h>
-#include <sizecalc.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/XKBlib.h>
+#include <X11/Xos.h>
+#include <X11/Xutil.h>
 
-#include <awt.h>
-#include <awt_util.h>
-#include <jvm.h>
-
-#include <Region.h>
-#include "utility/rect.h"
-
-#include <X11/XKBlib.h>
+#if defined(AIX)
+#undef X_HAVE_UTF8_STRING
+extern Bool statusWindowEventHandler(XEvent event);
+#endif
 
 // From XWindow.c
 extern KeySym keycodeToKeysym(Display *display, KeyCode keycode, int index);
@@ -288,7 +289,6 @@
     return ScreenCount((Display *) jlong_to_ptr(display));
 }
 
-
 /*
  * Class:     XlibWrapper
  * Method:    XCreateWindow
@@ -303,7 +303,6 @@
     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));
-
 }
 
 /*
@@ -320,7 +319,6 @@
                          (jlong_to_ptr(keysym_uppercase)));
 }
 
-
 /*
  * Class:     XlibWrapper
  * Method:    XMapWindow
@@ -331,7 +329,6 @@
 {
     AWT_CHECK_HAVE_LOCK();
     XMapWindow( (Display *)jlong_to_ptr(display),(Window) window);
-
 }
 
 /*
@@ -344,7 +341,6 @@
 {
     AWT_CHECK_HAVE_LOCK();
     XMapRaised( (Display *)jlong_to_ptr(display),(Window) window);
-
 }
 
 /*
@@ -355,10 +351,8 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRaiseWindow
 (JNIEnv *env, jclass clazz, jlong display, jlong window)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XRaiseWindow( (Display *)jlong_to_ptr(display),(Window) window);
-
 }
 
 /*
@@ -369,10 +363,8 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XLowerWindow
 (JNIEnv *env, jclass clazz, jlong display, jlong window)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XLowerWindow( (Display *)jlong_to_ptr(display),(Window) window);
-
 }
 
 /*
@@ -383,10 +375,8 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRestackWindows
 (JNIEnv *env, jclass clazz, jlong display, jlong windows, jint length)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XRestackWindows( (Display *) jlong_to_ptr(display), (Window *) jlong_to_ptr(windows), length);
-
 }
 
 /*
@@ -411,11 +401,10 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus
 (JNIEnv *env, jclass clazz, jlong display, jlong window)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, CurrentTime);
+}
 
-}
 /*
  * Class:     XlibWrapper
  * Method:    XSetInputFocus2
@@ -424,10 +413,8 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus2
 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong time)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, time);
-
 }
 
 /*
@@ -438,7 +425,6 @@
 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetInputFocus
 (JNIEnv *env, jclass clazz, jlong display)
 {
-
     Window focusOwner;
     int revert_to;
     AWT_CHECK_HAVE_LOCK_RETURN(0);
@@ -446,7 +432,6 @@
     return focusOwner;
 }
 
-
 /*
  * Class:     XlibWrapper
  * Method:    XDestroyWindow
@@ -525,8 +510,6 @@
 
 }
 
-
-
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSelectInput
 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong mask)
 {
@@ -543,6 +526,7 @@
                    (unsigned long)bits_to_change,
                    (unsigned long)values_for_bits);
 }
+
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
 (JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type,
               jlong bits_to_change, jlong values_for_bits)
@@ -553,6 +537,7 @@
                    (unsigned long)bits_to_change,
                    (unsigned long)values_for_bits);
 }
+
 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)
@@ -567,6 +552,7 @@
                                (int *) jlong_to_ptr(minor_in_out));
     return status ? JNI_TRUE : JNI_FALSE;
 }
+
 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
 (JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
 {
@@ -587,6 +573,7 @@
                               (unsigned int) which,
                               (unsigned int) device_spec);
 }
+
 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
 (JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
 {
@@ -626,8 +613,6 @@
  * Method:    XNextEvent
  * Signature: (JJ)V
  */
-
-
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XNextEvent
 (JNIEnv *env, jclass clazz, jlong display, jlong ptr)
 {
@@ -640,7 +625,6 @@
  * Method:    XMaskEvent
  * Signature: (JJJ)V
  */
-
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMaskEvent
   (JNIEnv *env, jclass clazz, jlong display, jlong event_mask, jlong event_return)
 {
@@ -653,7 +637,6 @@
  * Method:    XWindowEvent
  * Signature: (JJJJ)V
  */
-
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
   (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong event_mask, jlong event_return)
 {
@@ -670,6 +653,11 @@
 (JNIEnv *env, jclass clazz, jlong ptr, jlong window)
 {
     AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
+#if defined(AIX)
+    if (True == statusWindowEventHandler(*((XEvent *)(uintptr_t)ptr))) {
+        return (jboolean)True;
+    }
+#endif
     return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
 }
 
@@ -727,19 +715,15 @@
     XPeekEvent((Display *) jlong_to_ptr(display),jlong_to_ptr(ptr));
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XMoveResizeWindow
  * Signature: (JJIIII)V
  */
-
 JNIEXPORT void JNICALL  Java_sun_awt_X11_XlibWrapper_XMoveResizeWindow
 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x , jint y , jint width, jint height) {
-
     AWT_CHECK_HAVE_LOCK();
     XMoveResizeWindow( (Display *) jlong_to_ptr(display), (Window) window, x, y, width, height);
-
 }
 
 /*
@@ -747,10 +731,8 @@
  * Method:    XResizeWindow
  * Signature: (JJII)V
  */
-
 JNIEXPORT void JNICALL  Java_sun_awt_X11_XlibWrapper_XResizeWindow
-(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
-{
+(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height) {
     AWT_CHECK_HAVE_LOCK();
     XResizeWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
 }
@@ -760,10 +742,8 @@
  * Method:    XMoveWindow
  * Signature: (JJII)V
  */
-
 JNIEXPORT void JNICALL  Java_sun_awt_X11_XlibWrapper_XMoveWindow
-(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
-{
+(JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height) {
     AWT_CHECK_HAVE_LOCK();
     XMoveWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
 }
@@ -774,13 +754,10 @@
  * Method:    XSetWindowBackground
  * Signature: (JJJ)V
  */
-
 JNIEXPORT void JNICALL  Java_sun_awt_X11_XlibWrapper_XSetWindowBackground
 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong background_pixel) {
-
     AWT_CHECK_HAVE_LOCK();
     XSetWindowBackground((Display *) jlong_to_ptr(display),window,background_pixel);
-
 }
 
 
@@ -803,10 +780,8 @@
  */
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSync
 (JNIEnv *env, jclass clazz, jlong display, jint discard) {
-
     AWT_CHECK_HAVE_LOCK();
     XSync((Display *) jlong_to_ptr(display), discard);
-
 }
 
 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
@@ -855,7 +830,6 @@
         cname = "";
     }
 
-
     AWT_CHECK_HAVE_LOCK();
 
 #ifdef X_HAVE_UTF8_STRING
@@ -866,7 +840,6 @@
                                        XStdICCTextStyle, &tp);
 #endif
 
-
     if (status == Success || status > 0) {
         XChangeProperty((Display *)jlong_to_ptr(display), window, atom, tp.encoding, tp.format, PropModeReplace, tp.value, tp.nitems);
         if (tp.value != NULL) {
@@ -1005,7 +978,6 @@
     return XCreateFontCursor((Display *) jlong_to_ptr(display), (int) shape);
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XCreatePixmapCursor
@@ -1019,7 +991,6 @@
                                        (XColor *) jlong_to_ptr(fore), (XColor *) jlong_to_ptr(back), x, y);
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XQueryBestCursor
@@ -1038,7 +1009,6 @@
     else return JNI_TRUE;
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XFreeCursor
@@ -1084,7 +1054,6 @@
                             (XSetWindowAttributes *) jlong_to_ptr(attributes));
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XSetTransientFor
@@ -1181,7 +1150,6 @@
     }
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    getScreenOfWindow
@@ -1253,7 +1221,6 @@
     return res;
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    ServerVendor
@@ -1265,6 +1232,7 @@
     AWT_CHECK_HAVE_LOCK_RETURN(NULL);
     return JNU_NewStringPlatform(env, ServerVendor((Display*)jlong_to_ptr(display)));
 }
+
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    VendorRelease
@@ -1276,6 +1244,7 @@
     AWT_CHECK_HAVE_LOCK_RETURN(0);
     return VendorRelease((Display*)jlong_to_ptr(display));
 }
+
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    IsXsunKPBehavior
@@ -1309,7 +1278,6 @@
     }
 }
 
-
 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard
 (JNIEnv *env, jclass clazz, jlong display)
 {
@@ -1407,7 +1375,6 @@
     return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    PrintXErrorEvent
@@ -1431,7 +1398,6 @@
     }
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XInternAtoms
@@ -1451,8 +1417,6 @@
     return status;
 }
 
-
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XGetWindowAttributes
@@ -1468,7 +1432,6 @@
     return status;
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XGetGeometry
@@ -1490,7 +1453,6 @@
     return status;
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XGetWMNormalHints
@@ -1546,7 +1508,6 @@
                       (XEvent*) jlong_to_ptr(event));
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XQueryTree
@@ -1564,7 +1525,6 @@
                       (unsigned int*) jlong_to_ptr(nchildren_return));
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    memcpy
@@ -1576,7 +1536,6 @@
     memcpy(jlong_to_ptr(dest_ptr), jlong_to_ptr(src_ptr), length);
 }
 
-
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetMinMaxHints
 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x, jint y, jint width, jint height, jlong flags) {
     XSizeHints * hints;
@@ -1595,7 +1554,6 @@
     XFree(hints);
 }
 
-
 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
 (JNIEnv *env, jclass clazz, jlong display, jlong vinfo_mask, jlong vinfo_template,
  jlong nitems_return)
@@ -1626,7 +1584,6 @@
     XBell((Display*)jlong_to_ptr(display), percent);
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XAllocColor
@@ -1643,7 +1600,6 @@
     else return JNI_TRUE;
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XCreateBitmapFromData
@@ -1657,7 +1613,6 @@
                                          (char *) jlong_to_ptr(data), width, height);
 }
 
-
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XFreePixmap
@@ -1772,6 +1727,7 @@
     AWT_CHECK_HAVE_LOCK_RETURN(0);
     return XCreatePixmap((Display*)jlong_to_ptr(display), (Drawable)drawable, width, height, depth);
 }
+
 JNIEXPORT jlong JNICALL
 Java_sun_awt_X11_XlibWrapper_XCreateImage
   (JNIEnv *env, jclass clazz, jlong display, jlong visual_ptr,
@@ -1783,6 +1739,7 @@
                 depth, format, offset, (char*) jlong_to_ptr(data),
                 width, height, bitmap_pad, bytes_per_line));
 }
+
 JNIEXPORT jlong JNICALL
 Java_sun_awt_X11_XlibWrapper_XCreateGC
   (JNIEnv *env, jclass clazz, jlong display, jlong drawable,
@@ -1806,6 +1763,7 @@
     img->data = NULL;
     XDestroyImage(img);
 }
+
 JNIEXPORT void JNICALL
 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)
 {
@@ -1813,18 +1771,21 @@
     XPutImage((Display*)jlong_to_ptr(display), (Drawable)drawable, (GC) jlong_to_ptr(gc), (XImage*) jlong_to_ptr(image), src_x, src_y,
               dest_x, dest_y, width, height);
 }
+
 JNIEXPORT void JNICALL
 Java_sun_awt_X11_XlibWrapper_XFreeGC(JNIEnv *env, jclass clazz, jlong display, jlong gc)
 {
     AWT_CHECK_HAVE_LOCK();
     XFreeGC((Display*) jlong_to_ptr(display), (GC) jlong_to_ptr(gc));
 }
+
 JNIEXPORT void JNICALL
 Java_sun_awt_X11_XlibWrapper_XSetWindowBackgroundPixmap(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong pixmap)
 {
     AWT_CHECK_HAVE_LOCK();
     XSetWindowBackgroundPixmap((Display*) jlong_to_ptr(display), (Window)window, (Pixmap)pixmap);
 }
+
 JNIEXPORT void JNICALL
 Java_sun_awt_X11_XlibWrapper_XClearWindow(JNIEnv *env, jclass clazz, jlong display, jlong window)
 {
@@ -1922,7 +1883,6 @@
 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XQueryKeymap
 (JNIEnv *env, jclass clazz, jlong display, jlong vector)
 {
-
     AWT_CHECK_HAVE_LOCK();
     XQueryKeymap( (Display *) jlong_to_ptr(display), (char *) jlong_to_ptr(vector));
 }
@@ -1961,6 +1921,7 @@
 //    printf("-------------------------------------^^^^\n");
     return (jint)(sr.group);
 }
+
 JNIEXPORT jlong JNICALL
 Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
                                               jlong display, jint keycode,
@@ -1989,6 +1950,7 @@
     AWT_CHECK_HAVE_LOCK();
     XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap));
 }
+
 /*
  * Class:     sun_awt_X11_XlibWrapper
  * Method:    XRefreshKeyboardMapping
@@ -2034,7 +1996,6 @@
             ) ? True : False;
 }
 
-
 JNIEXPORT jboolean JNICALL
 Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
                                                      jlong display, jlong ptr) {
@@ -2062,7 +2023,6 @@
     exitSecondaryLoop = True;
     AWT_NOTIFY_ALL();
 }
-/*******************************************************************************/
 
 JNIEXPORT jobjectArray JNICALL
 Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList(JNIEnv *env,
@@ -2181,7 +2141,6 @@
     return ret;
 }
 
-
 JNIEXPORT void JNICALL
 Java_sun_awt_X11_XlibWrapper_XPutBackEvent(JNIEnv *env,
                                            jclass clazz,