diff --git a/make/mapfiles/libawt_xawt/mapfile-vers b/make/mapfiles/libawt_xawt/mapfile-vers index 101c288e0f3d40c179946cd63c981b2ef9a083d6..cb476d075b772bd5dc9032182d1775138b8e7414 100644 --- a/make/mapfiles/libawt_xawt/mapfile-vers +++ b/make/mapfiles/libawt_xawt/mapfile-vers @@ -158,6 +158,7 @@ SUNWprivate_1.1 { Java_sun_awt_X11_XRobotPeer_mouseReleaseImpl; Java_sun_awt_X11_XRobotPeer_mouseWheelImpl; Java_sun_awt_X11_XRobotPeer_setup; + Java_sun_awt_X11_XRobotPeer_loadNativeLibraries; Java_sun_awt_X11_XToolkit_getNumberOfButtonsImpl; Java_java_awt_Component_initIDs; Java_java_awt_Container_initIDs; diff --git a/src/share/classes/java/security/IdentityScope.java b/src/share/classes/java/security/IdentityScope.java index 64c4a6343746d0c22d738274f9cffe1ca743ab8a..7b18387a353c1c9979c9857e0bb5aa7f5f066d2b 100644 --- a/src/share/classes/java/security/IdentityScope.java +++ b/src/share/classes/java/security/IdentityScope.java @@ -88,8 +88,8 @@ class IdentityScope extends Identity { try { Class.forName(classname); } catch (ClassNotFoundException e) { - //Security.error("unable to establish a system scope from " + - // classname); + System.err.println("unable to establish a system scope from " + + classname); e.printStackTrace(); } } diff --git a/src/share/classes/java/security/Signature.java b/src/share/classes/java/security/Signature.java index 1a34f0f2a26e2581c542931aac6b09c5b619a331..5232b9c469869344567ae6b5c8b52c8c8c0ccfa2 100644 --- a/src/share/classes/java/security/Signature.java +++ b/src/share/classes/java/security/Signature.java @@ -1051,7 +1051,7 @@ public abstract class Signature extends SignatureSpi { debug.println("Further warnings of this type will " + "be suppressed"); } - new Exception("Call trace").printStackTrace(); + new Exception("Debug call trace").printStackTrace(); } } Exception lastException = null; diff --git a/src/share/classes/sun/security/jca/ProviderList.java b/src/share/classes/sun/security/jca/ProviderList.java index 66c8262418f2ed46c719db28f4e553c10386e1ab..f800f1d235b991bc9093fd9d1878ac9f0544f09f 100644 --- a/src/share/classes/sun/security/jca/ProviderList.java +++ b/src/share/classes/sun/security/jca/ProviderList.java @@ -275,7 +275,7 @@ public final class ProviderList { } if (debug != null) { debug.println("Loading all providers"); - new Exception("Call trace").printStackTrace(); + new Exception("Debug Info. Call trace:").printStackTrace(); } int n = 0; for (int i = 0; i < configs.length; i++) { diff --git a/src/share/classes/sun/security/pkcs/PKCS8Key.java b/src/share/classes/sun/security/pkcs/PKCS8Key.java index 6f47c9ccc4e8d23448acedcc7bbf6b0fbffc1448..1a56865dac2efd0a76010afa9d222c6d7d3d8df9 100644 --- a/src/share/classes/sun/security/pkcs/PKCS8Key.java +++ b/src/share/classes/sun/security/pkcs/PKCS8Key.java @@ -347,7 +347,6 @@ public class PKCS8Key implements PrivateKey { } } catch (IOException e) { - // e.printStackTrace (); throw new InvalidKeyException("IOException : " + e.getMessage()); } diff --git a/src/share/classes/sun/security/provider/AuthPolicyFile.java b/src/share/classes/sun/security/provider/AuthPolicyFile.java index a13cee5831cab0bb8ba20a83018253ff02aa44a5..821ef8b6f456348e200f18b3959e1e817a537f0f 100644 --- a/src/share/classes/sun/security/provider/AuthPolicyFile.java +++ b/src/share/classes/sun/security/provider/AuthPolicyFile.java @@ -186,6 +186,7 @@ public class AuthPolicyFile extends javax.security.auth.Policy { } catch (Exception e) { // ignore, treat it like we have no keystore if (debug != null) { + debug.println("Debug info only. No keystore."); e.printStackTrace(); } return null; @@ -260,7 +261,7 @@ public class AuthPolicyFile extends javax.security.auth.Policy { loaded_one = true; } catch (Exception e) { if (debug != null) { - debug.println("error reading policy " + e); + debug.println("Debug info only. Error reading policy " + e); e.printStackTrace(); } // ignore that policy diff --git a/src/share/classes/sun/security/provider/DSA.java b/src/share/classes/sun/security/provider/DSA.java index 665e1626e00c683b69df29455ac6ec406a5b4d60..98e2de9781d6ad886f5f0b7dabafd9accb45241b 100644 --- a/src/share/classes/sun/security/provider/DSA.java +++ b/src/share/classes/sun/security/provider/DSA.java @@ -434,18 +434,6 @@ abstract class DSA extends SignatureSpi { return printable; } - private static void debug(Exception e) { - if (debug) { - e.printStackTrace(); - } - } - - private static void debug(String s) { - if (debug) { - System.err.println(s); - } - } - /** * Standard SHA224withDSA implementation as defined in FIPS186-3. */ diff --git a/src/share/classes/sun/security/provider/PolicyFile.java b/src/share/classes/sun/security/provider/PolicyFile.java index 9ff02c51e7a672e6f30dc2da3664e236ed776eb0..5ed375c48703db2f4b400db1e03bb2979662f6ba 100644 --- a/src/share/classes/sun/security/provider/PolicyFile.java +++ b/src/share/classes/sun/security/provider/PolicyFile.java @@ -563,7 +563,8 @@ public class PolicyFile extends java.security.Policy { loaded_policy = true; } catch (Exception e) { if (debug != null) { - debug.println("error reading policy "+e); + debug.println( + "Debug info only. Error reading policy " +e); e.printStackTrace(); } // ignore that policy @@ -616,6 +617,7 @@ public class PolicyFile extends java.security.Policy { } catch (Exception e) { // ignore, treat it like we have no keystore if (debug != null) { + debug.println("Debug info only. Ignoring exception."); e.printStackTrace(); } } diff --git a/src/share/classes/sun/security/util/AnchorCertificates.java b/src/share/classes/sun/security/util/AnchorCertificates.java index e260dd44ac047ad641f6da509b49100f5cabaac7..af77f8fda57407b89546a3f4f9426670fb0a73a9 100644 --- a/src/share/classes/sun/security/util/AnchorCertificates.java +++ b/src/share/classes/sun/security/util/AnchorCertificates.java @@ -75,8 +75,8 @@ public class AnchorCertificates { } catch (Exception e) { if (debug != null) { debug.println("Error parsing cacerts"); + e.printStackTrace(); } - e.printStackTrace(); } return null; } diff --git a/src/share/classes/sun/security/util/SignatureFileVerifier.java b/src/share/classes/sun/security/util/SignatureFileVerifier.java index 0663f0573ae35823427a3abbc503151bb292a354..6c9d892ee51275401cae9dfa911733f47d88ce60 100644 --- a/src/share/classes/sun/security/util/SignatureFileVerifier.java +++ b/src/share/classes/sun/security/util/SignatureFileVerifier.java @@ -380,8 +380,9 @@ public class SignatureFileVerifier { if (e.getMessage() != null) { debug.println(key + ": " + e.getMessage()); } else { - debug.println(key + ": " + algorithm + - " was disabled, no exception msg given."); + debug.println("Debug info only. " + key + ": " + + algorithm + + " was disabled, no exception msg given."); e.printStackTrace(); } } diff --git a/src/share/classes/sun/security/x509/CertificateExtensions.java b/src/share/classes/sun/security/x509/CertificateExtensions.java index 75d5ae35b0e8f0af809d4d8cb09ee07c3978cacc..e93714eaadf8ef089b3b856556b2c323e2f979ea 100644 --- a/src/share/classes/sun/security/x509/CertificateExtensions.java +++ b/src/share/classes/sun/security/x509/CertificateExtensions.java @@ -124,7 +124,8 @@ public class CertificateExtensions implements CertAttrSet { unparseableExtensions.put(ext.getExtensionId().toString(), new UnparseableExtension(ext, e)); if (debug != null) { - debug.println("Error parsing extension: " + ext); + debug.println("Debug info only." + + " Error parsing extension: " + ext); e.printStackTrace(); HexDumpEncoder h = new HexDumpEncoder(); System.err.println(h.encodeBuffer(ext.getExtensionValue())); diff --git a/src/share/classes/sun/security/x509/X509Key.java b/src/share/classes/sun/security/x509/X509Key.java index 789b7b8dca70899930852f52637eff9b7a5a9d7d..c7621d839fd4971ce0708e452e6f4bb3d89d84b6 100644 --- a/src/share/classes/sun/security/x509/X509Key.java +++ b/src/share/classes/sun/security/x509/X509Key.java @@ -393,7 +393,6 @@ public class X509Key implements PublicKey { throw new InvalidKeyException ("excess key data"); } catch (IOException e) { - // e.printStackTrace (); throw new InvalidKeyException("IOException: " + e.getMessage()); } diff --git a/src/solaris/classes/sun/awt/X11/XRobotPeer.java b/src/solaris/classes/sun/awt/X11/XRobotPeer.java index 340c80bee5f4ff8f238da48c31bd1a9005c287c6..8eef29431aa5dcf817d4ad1d68add8005c2a00ad 100644 --- a/src/solaris/classes/sun/awt/X11/XRobotPeer.java +++ b/src/solaris/classes/sun/awt/X11/XRobotPeer.java @@ -34,6 +34,10 @@ import sun.awt.X11GraphicsConfig; class XRobotPeer implements RobotPeer { + static { + loadNativeLibraries(); + } + private X11GraphicsConfig xgc = null; /* * native implementation uses some static shared data (pipes, processes) @@ -98,4 +102,5 @@ class XRobotPeer implements RobotPeer { private static native synchronized void keyReleaseImpl(int keycode); private static native synchronized void getRGBPixelsImpl(X11GraphicsConfig xgc, int x, int y, int width, int height, int pixelArray[]); + private static native void loadNativeLibraries(); } diff --git a/src/solaris/native/sun/awt/awt_Robot.c b/src/solaris/native/sun/awt/awt_Robot.c index b8f1b759b9c0247e9c2e4581df3a896439a8fbf6..819b491ad1f45fc5deedb93ca93e9ac7ff67a168 100644 --- a/src/solaris/native/sun/awt/awt_Robot.c +++ b/src/solaris/native/sun/awt/awt_Robot.c @@ -27,6 +27,9 @@ #error This file should not be included in headless library #endif +#include "jvm_md.h" +#include + #include "awt_p.h" #include "awt_GraphicsEnv.h" #define XK_MISCELLANY @@ -49,11 +52,46 @@ #include #endif +static Bool (*compositeQueryExtension) (Display*, int*, int*); +static Status (*compositeQueryVersion) (Display*, int*, int*); +static Window (*compositeGetOverlayWindow) (Display *, Window); + extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs; static jint * masks; static jint num_buttons; +static void *xCompositeHandle; + +static const char* XCOMPOSITE = JNI_LIB_NAME("Xcomposite"); +static const char* XCOMPOSITE_VERSIONED = VERSIONED_JNI_LIB_NAME("Xcomposite", "1"); + +static Bool checkXCompositeFunctions(void) { + return (compositeQueryExtension != NULL && + compositeQueryVersion != NULL && + compositeGetOverlayWindow != NULL); +} + +static void initXCompositeFunctions(void) { + + if (xCompositeHandle == NULL) { + xCompositeHandle = dlopen(XCOMPOSITE, RTLD_LAZY | RTLD_GLOBAL); + if (xCompositeHandle == NULL) { + xCompositeHandle = dlopen(XCOMPOSITE_VERSIONED, RTLD_LAZY | RTLD_GLOBAL); + } + } + //*(void **)(&asyncGetCallTraceFunction) + if (xCompositeHandle != NULL) { + *(void **)(&compositeQueryExtension) = dlsym(xCompositeHandle, "XCompositeQueryExtension"); + *(void **)(&compositeQueryVersion) = dlsym(xCompositeHandle, "XCompositeQueryVersion"); + *(void **)(&compositeGetOverlayWindow) = dlsym(xCompositeHandle, "XCompositeGetOverlayWindow"); + } + + if (xCompositeHandle && !checkXCompositeFunctions()) { + dlclose(xCompositeHandle); + } +} + static int32_t isXTestAvailable() { int32_t major_opcode, first_event, first_error; int32_t event_basep, error_basep, majorp, minorp; @@ -88,6 +126,35 @@ static int32_t isXTestAvailable() { return isXTestAvailable; } +static Bool hasXCompositeOverlayExtension(Display *display) { + + int xoverlay = False; + int eventBase, errorBase; + if (checkXCompositeFunctions() && + compositeQueryExtension(display, &eventBase, &errorBase)) + { + int major = 0; + int minor = 0; + + compositeQueryVersion(display, &major, &minor); + if (major > 0 || minor >= 3) { + xoverlay = True; + } + } + + return xoverlay; +} + +static jboolean isXCompositeDisplay(Display *display, int screenNumber) { + + char NET_WM_CM_Sn[25]; + snprintf(NET_WM_CM_Sn, sizeof(NET_WM_CM_Sn), "_NET_WM_CM_S%d\0", screenNumber); + + Atom managerSelection = XInternAtom(display, NET_WM_CM_Sn, 0); + Window owner = XGetSelectionOwner(display, managerSelection); + + return owner != 0; +} static XImage *getWindowImage(Display * display, Window window, int32_t x, int32_t y, @@ -232,6 +299,12 @@ Java_sun_awt_X11_XRobotPeer_getRGBPixelsImpl( JNIEnv *env, DASSERT(adata != NULL); rootWindow = XRootWindow(awt_display, adata->awt_visInfo.screen); + if (hasXCompositeOverlayExtension(awt_display) && + isXCompositeDisplay(awt_display, adata->awt_visInfo.screen)) + { + rootWindow = compositeGetOverlayWindow(awt_display, rootWindow); + } + image = getWindowImage(awt_display, rootWindow, x, y, width, height); /* Array to use to crunch around the pixel values */ @@ -412,3 +485,8 @@ Java_sun_awt_X11_XRobotPeer_mouseWheelImpl (JNIEnv *env, AWT_UNLOCK(); } + +JNIEXPORT void JNICALL +Java_sun_awt_X11_XRobotPeer_loadNativeLibraries (JNIEnv *env, jclass cls) { + initXCompositeFunctions(); +}