1.1 --- a/make/sun/xawt/mapfile-vers Wed May 06 20:06:23 2009 +0400
1.2 +++ b/make/sun/xawt/mapfile-vers Fri May 15 15:40:35 2009 +0400
1.3 @@ -128,6 +128,7 @@
1.4 Java_sun_awt_X11_XlibWrapper_SetToolkitErrorHandler;
1.5 Java_sun_awt_X11_XlibWrapper_XSetErrorHandler;
1.6 Java_sun_awt_X11_XlibWrapper_CallErrorHandler;
1.7 + Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent;
1.8 Java_sun_awt_X11_XlibWrapper_XInternAtoms;
1.9 Java_sun_awt_X11_XlibWrapper_XChangeWindowAttributes;
1.10 Java_sun_awt_X11_XlibWrapper_XDeleteProperty;
1.11 @@ -276,7 +277,6 @@
1.12 Java_sun_awt_X11_XToolkit_getDefaultXColormap;
1.13 Java_sun_awt_X11_XToolkit_getDefaultScreenData;
1.14 Java_sun_awt_X11_XToolkit_getEnv;
1.15 - Java_sun_awt_X11_XToolkit_setNoisyXErrorHandler;
1.16 Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData;
1.17 Java_sun_awt_X11_XlibWrapper_XFreePixmap;
1.18 Java_sun_awt_X11_XlibWrapper_XAllocColor;
2.1 --- a/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java Wed May 06 20:06:23 2009 +0400
2.2 +++ b/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java Fri May 15 15:40:35 2009 +0400
2.3 @@ -120,7 +120,7 @@
2.4 false,
2.5 XConstants.AnyPropertyType);
2.6 try {
2.7 - int status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
2.8 + int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
2.9
2.10 if (status == XConstants.Success &&
2.11 wpg.getData() != 0 &&
2.12 @@ -190,7 +190,7 @@
2.13 try {
2.14 Native.putLong(data, motifWindow);
2.15
2.16 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
2.17 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
2.18 XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
2.19 defaultRootWindow,
2.20 XA_MOTIF_DRAG_WINDOW.getAtom(),
2.21 @@ -280,7 +280,7 @@
2.22 false,
2.23 XA_MOTIF_DRAG_TARGETS.getAtom());
2.24 try {
2.25 - int status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
2.26 + int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
2.27
2.28 if (status != XConstants.Success
2.29 || wpg.getActualType() != XA_MOTIF_DRAG_TARGETS.getAtom()
2.30 @@ -394,7 +394,7 @@
2.31 }
2.32 }
2.33
2.34 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
2.35 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
2.36 XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
2.37 motifWindow,
2.38 XA_MOTIF_DRAG_TARGETS.getAtom(),
2.39 @@ -410,7 +410,7 @@
2.40 // Create a new motif window and retry.
2.41 motifWindow = createMotifWindow();
2.42
2.43 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
2.44 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
2.45 XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
2.46 motifWindow,
2.47 XA_MOTIF_DRAG_TARGETS.getAtom(),
2.48 @@ -534,7 +534,7 @@
2.49 // CARD32 icc_handle
2.50 unsafe.putInt(structData + 4, (int)XA_MOTIF_ATOM_0.getAtom());
2.51
2.52 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
2.53 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
2.54 XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window,
2.55 XA_MOTIF_ATOM_0.getAtom(),
2.56 XA_MOTIF_DRAG_INITIATOR_INFO.getAtom(),
2.57 @@ -567,7 +567,7 @@
2.58 unsafe.putShort(data + 10, (short)0); /* pad */
2.59 unsafe.putInt(data + 12, dataSize);
2.60
2.61 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
2.62 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
2.63 XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window,
2.64 XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
2.65 XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
3.1 --- a/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java Wed May 06 20:06:23 2009 +0400
3.2 +++ b/src/solaris/classes/sun/awt/X11/MotifDnDDragSourceProtocol.java Fri May 15 15:40:35 2009 +0400
3.3 @@ -184,7 +184,7 @@
3.4 XConstants.AnyPropertyType);
3.5
3.6 try {
3.7 - int status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
3.8 + int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
3.9
3.10 /*
3.11 * DragICCI.h:
4.1 --- a/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java Wed May 06 20:06:23 2009 +0400
4.2 +++ b/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java Fri May 15 15:40:35 2009 +0400
4.3 @@ -102,7 +102,7 @@
4.4 XConstants.AnyPropertyType);
4.5
4.6 try {
4.7 - status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
4.8 + status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.9
4.10 /*
4.11 * DragICCI.h:
4.12 @@ -162,7 +162,7 @@
4.13 unsafe.putInt(data + 12, dataSize);
4.14 }
4.15
4.16 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
4.17 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
4.18 XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder,
4.19 MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
4.20 MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
4.21 @@ -204,7 +204,7 @@
4.22 XConstants.AnyPropertyType);
4.23
4.24 try {
4.25 - status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
4.26 + status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.27
4.28 /*
4.29 * DragICCI.h:
4.30 @@ -236,7 +236,7 @@
4.31
4.32 unsafe.putInt(data + 4, tproxy);
4.33
4.34 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
4.35 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
4.36 XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder,
4.37 MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
4.38 MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
4.39 @@ -276,7 +276,7 @@
4.40 XConstants.AnyPropertyType);
4.41
4.42 try {
4.43 - status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
4.44 + status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.45
4.46 /*
4.47 * DragICCI.h:
4.48 @@ -325,7 +325,7 @@
4.49 XConstants.AnyPropertyType);
4.50
4.51 try {
4.52 - int status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
4.53 + int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.54
4.55 if (status == (int)XConstants.Success && wpg.getData() != 0 &&
4.56 wpg.getActualType() != 0 && wpg.getActualFormat() == 8 &&
4.57 @@ -375,7 +375,7 @@
4.58 MotifDnDConstants.XA_MOTIF_DRAG_INITIATOR_INFO.getAtom());
4.59
4.60 try {
4.61 - int status = wpg.execute(XToolkit.IgnoreBadWindowHandler);
4.62 + int status = wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.63
4.64 if (status == XConstants.Success && wpg.getData() != 0 &&
4.65 wpg.getActualType() ==
4.66 @@ -412,7 +412,7 @@
4.67 */
4.68 XWindowAttributes wattr = new XWindowAttributes();
4.69 try {
4.70 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
4.71 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.72 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
4.73 source_win, wattr.pData);
4.74
4.75 @@ -429,7 +429,7 @@
4.76 wattr.dispose();
4.77 }
4.78
4.79 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
4.80 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.81 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
4.82 source_win_mask |
4.83 XConstants.StructureNotifyMask);
4.84 @@ -1020,7 +1020,7 @@
4.85 if (sourceWindow != 0) {
4.86 XToolkit.awtLock();
4.87 try {
4.88 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
4.89 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
4.90 XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
4.91 sourceWindowMask);
4.92 XToolkit.RESTORE_XERROR_HANDLER();
5.1 --- a/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java Wed May 06 20:06:23 2009 +0400
5.2 +++ b/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java Fri May 15 15:40:35 2009 +0400
5.3 @@ -75,7 +75,7 @@
5.4 public int execute() {
5.5 return execute(null);
5.6 }
5.7 - public int execute(XToolkit.XErrorHandler errorHandler) {
5.8 + public int execute(XErrorHandler errorHandler) {
5.9
5.10 XToolkit.awtLock();
5.11 try {
5.12 @@ -94,7 +94,7 @@
5.13
5.14 // Fix for performance problem - IgnodeBadWindowHandler is
5.15 // used too much without reason, just ignore it
5.16 - if (errorHandler == XToolkit.IgnoreBadWindowHandler) {
5.17 + if (errorHandler instanceof XErrorHandler.IgnoreBadWindowHandler) {
5.18 errorHandler = null;
5.19 }
5.20
6.1 --- a/src/solaris/classes/sun/awt/X11/XAWTXSettings.java Wed May 06 20:06:23 2009 +0400
6.2 +++ b/src/solaris/classes/sun/awt/X11/XAWTXSettings.java Fri May 15 15:40:35 2009 +0400
6.3 @@ -126,7 +126,7 @@
6.4 new WindowPropertyGetter(owner, xSettingsPropertyAtom, 0, MAX_LENGTH,
6.5 false, xSettingsPropertyAtom.getAtom() );
6.6 try {
6.7 - int status = getter.execute(XToolkit.IgnoreBadWindowHandler);
6.8 + int status = getter.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
6.9
6.10 if (status != XConstants.Success || getter.getData() == 0) {
6.11 if (log.isLoggable(Level.FINE)) log.fine("OH OH : getter failed status = " + status );
7.1 --- a/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Wed May 06 20:06:23 2009 +0400
7.2 +++ b/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Fri May 15 15:40:35 2009 +0400
7.3 @@ -1100,7 +1100,8 @@
7.4 }
7.5
7.6 boolean isOverrideRedirect() {
7.7 - return false;
7.8 +// return false;
7.9 + return ((XToolkit)Toolkit.getDefaultToolkit()).isOverrideRedirect((Window)target);
7.10 }
7.11
7.12 public boolean requestWindowFocus(long time, boolean timeProvided) {
8.1 --- a/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java Wed May 06 20:06:23 2009 +0400
8.2 +++ b/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java Fri May 15 15:40:35 2009 +0400
8.3 @@ -96,7 +96,7 @@
8.4 action_count++;
8.5 }
8.6
8.7 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
8.8 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
8.9 XDnDConstants.XA_XdndActionList.setAtomData(window,
8.10 XAtom.XA_ATOM,
8.11 data, action_count);
8.12 @@ -117,7 +117,7 @@
8.13 try {
8.14 Native.put(data, formats);
8.15
8.16 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
8.17 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
8.18 XDnDConstants.XA_XdndTypeList.setAtomData(window,
8.19 XAtom.XA_ATOM,
8.20 data, formats.length);
8.21 @@ -195,7 +195,7 @@
8.22 new WindowPropertyGetter(window, XDnDConstants.XA_XdndAware, 0, 1,
8.23 false, XConstants.AnyPropertyType);
8.24
8.25 - int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler);
8.26 + int status = wpg1.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
8.27
8.28 if (status == XConstants.Success &&
8.29 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) {
8.30 @@ -215,7 +215,7 @@
8.31 0, 1, false, XAtom.XA_WINDOW);
8.32
8.33 try {
8.34 - status = wpg2.execute(XToolkit.IgnoreBadWindowHandler);
8.35 + status = wpg2.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
8.36
8.37 if (status == XConstants.Success &&
8.38 wpg2.getData() != 0 &&
8.39 @@ -233,7 +233,7 @@
8.40 0, 1, false, XAtom.XA_WINDOW);
8.41
8.42 try {
8.43 - status = wpg3.execute(XToolkit.IgnoreBadWindowHandler);
8.44 + status = wpg3.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
8.45
8.46 if (status != XConstants.Success ||
8.47 wpg3.getData() == 0 ||
8.48 @@ -249,7 +249,7 @@
8.49 XConstants.AnyPropertyType);
8.50
8.51 try {
8.52 - status = wpg4.execute(XToolkit.IgnoreBadWindowHandler);
8.53 + status = wpg4.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
8.54
8.55 if (status != XConstants.Success ||
8.56 wpg4.getData() == 0 ||
9.1 --- a/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java Wed May 06 20:06:23 2009 +0400
9.2 +++ b/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java Fri May 15 15:40:35 2009 +0400
9.3 @@ -88,7 +88,7 @@
9.4 try {
9.5 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
9.6
9.7 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.8 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.9 XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1);
9.10 XToolkit.RESTORE_XERROR_HANDLER();
9.11
9.12 @@ -122,7 +122,7 @@
9.13 false, XConstants.AnyPropertyType);
9.14
9.15 try {
9.16 - status = wpg1.execute(XToolkit.IgnoreBadWindowHandler);
9.17 + status = wpg1.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.18
9.19 if (status == XConstants.Success &&
9.20 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) {
9.21 @@ -141,7 +141,7 @@
9.22 0, 1, false, XAtom.XA_WINDOW);
9.23
9.24 try {
9.25 - status = wpg2.execute(XToolkit.IgnoreBadWindowHandler);
9.26 + status = wpg2.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.27
9.28 if (status == XConstants.Success &&
9.29 wpg2.getData() != 0 &&
9.30 @@ -159,7 +159,7 @@
9.31 0, 1, false, XAtom.XA_WINDOW);
9.32
9.33 try {
9.34 - status = wpg3.execute(XToolkit.IgnoreBadWindowHandler);
9.35 + status = wpg3.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.36
9.37 if (status != XConstants.Success ||
9.38 wpg3.getData() == 0 ||
9.39 @@ -175,7 +175,7 @@
9.40 XConstants.AnyPropertyType);
9.41
9.42 try {
9.43 - status = wpg4.execute(XToolkit.IgnoreBadWindowHandler);
9.44 + status = wpg4.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.45
9.46 if (status != XConstants.Success ||
9.47 wpg4.getData() == 0 ||
9.48 @@ -205,7 +205,7 @@
9.49
9.50 /* The proxy window must have the XdndAware set, as XDnD protocol
9.51 prescribes to check the proxy window for XdndAware. */
9.52 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.53 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.54 XDnDConstants.XA_XdndAware.setAtomData(newProxy, XAtom.XA_ATOM,
9.55 data, 1);
9.56 XToolkit.RESTORE_XERROR_HANDLER();
9.57 @@ -219,7 +219,7 @@
9.58 Native.putLong(data, 0, newProxy);
9.59
9.60 /* The proxy window must have the XdndProxy set to point to itself.*/
9.61 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.62 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.63 XDnDConstants.XA_XdndProxy.setAtomData(newProxy, XAtom.XA_WINDOW,
9.64 data, 1);
9.65 XToolkit.RESTORE_XERROR_HANDLER();
9.66 @@ -232,7 +232,7 @@
9.67
9.68 Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
9.69
9.70 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.71 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.72 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
9.73 data, 1);
9.74 XToolkit.RESTORE_XERROR_HANDLER();
9.75 @@ -245,7 +245,7 @@
9.76
9.77 Native.putLong(data, 0, newProxy);
9.78
9.79 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.80 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.81 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
9.82 data, 1);
9.83 XToolkit.RESTORE_XERROR_HANDLER();
9.84 @@ -278,7 +278,7 @@
9.85 try {
9.86 Native.putLong(data, 0, entry.getVersion());
9.87
9.88 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.89 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.90 XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
9.91 data, 1);
9.92 XToolkit.RESTORE_XERROR_HANDLER();
9.93 @@ -291,7 +291,7 @@
9.94
9.95 Native.putLong(data, 0, (int)entry.getProxy());
9.96
9.97 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.98 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.99 XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
9.100 data, 1);
9.101 XToolkit.RESTORE_XERROR_HANDLER();
9.102 @@ -329,7 +329,7 @@
9.103 false, XConstants.AnyPropertyType);
9.104
9.105 try {
9.106 - status = wpg1.execute(XToolkit.IgnoreBadWindowHandler);
9.107 + status = wpg1.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.108
9.109 if (status == XConstants.Success &&
9.110 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) {
9.111 @@ -348,7 +348,7 @@
9.112 0, 1, false, XAtom.XA_WINDOW);
9.113
9.114 try {
9.115 - status = wpg2.execute(XToolkit.IgnoreBadWindowHandler);
9.116 + status = wpg2.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.117
9.118 if (status == XConstants.Success &&
9.119 wpg2.getData() != 0 &&
9.120 @@ -366,7 +366,7 @@
9.121 0, 1, false, XAtom.XA_WINDOW);
9.122
9.123 try {
9.124 - status = wpg3.execute(XToolkit.IgnoreBadWindowHandler);
9.125 + status = wpg3.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.126
9.127 if (status != XConstants.Success ||
9.128 wpg3.getData() == 0 ||
9.129 @@ -382,7 +382,7 @@
9.130 XConstants.AnyPropertyType);
9.131
9.132 try {
9.133 - status = wpg4.execute(XToolkit.IgnoreBadWindowHandler);
9.134 + status = wpg4.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.135
9.136 if (status != XConstants.Success ||
9.137 wpg4.getData() == 0 ||
9.138 @@ -411,7 +411,7 @@
9.139 false, XConstants.AnyPropertyType);
9.140
9.141 try {
9.142 - int status = wpg1.execute(XToolkit.IgnoreBadWindowHandler);
9.143 + int status = wpg1.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.144
9.145 if (status == XConstants.Success &&
9.146 wpg1.getData() != 0 && wpg1.getActualType() == XAtom.XA_ATOM) {
9.147 @@ -473,7 +473,7 @@
9.148 0, 0xFFFF, false,
9.149 XAtom.XA_ATOM);
9.150 try {
9.151 - wpg.execute(XToolkit.IgnoreBadWindowHandler);
9.152 + wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.153
9.154 if (wpg.getActualType() == XAtom.XA_ATOM &&
9.155 wpg.getActualFormat() == 32) {
9.156 @@ -505,7 +505,7 @@
9.157 0, 0xFFFF, false,
9.158 XAtom.XA_ATOM);
9.159 try {
9.160 - wpg.execute(XToolkit.IgnoreBadWindowHandler);
9.161 + wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.162
9.163 if (wpg.getActualType() == XAtom.XA_ATOM &&
9.164 wpg.getActualFormat() == 32) {
9.165 @@ -541,7 +541,7 @@
9.166 */
9.167 XWindowAttributes wattr = new XWindowAttributes();
9.168 try {
9.169 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
9.170 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.171 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
9.172 source_win, wattr.pData);
9.173
9.174 @@ -558,7 +558,7 @@
9.175 wattr.dispose();
9.176 }
9.177
9.178 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
9.179 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.180 XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
9.181 source_win_mask |
9.182 XConstants.StructureNotifyMask);
9.183 @@ -963,7 +963,7 @@
9.184 if (sourceWindow != 0) {
9.185 XToolkit.awtLock();
9.186 try {
9.187 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
9.188 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.189 XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
9.190 sourceWindowMask);
9.191 XToolkit.RESTORE_XERROR_HANDLER();
9.192 @@ -1104,14 +1104,14 @@
9.193 0, 0xFFFF, false,
9.194 XAtom.XA_ATOM);
9.195 try {
9.196 - wpg.execute(XToolkit.IgnoreBadWindowHandler);
9.197 + wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
9.198
9.199 if (wpg.getActualType() == XAtom.XA_ATOM &&
9.200 wpg.getActualFormat() == 32) {
9.201
9.202 XToolkit.awtLock();
9.203 try {
9.204 - XToolkit.WITH_XERROR_HANDLER(XWM.VerifyChangePropertyHandler);
9.205 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
9.206 XDnDConstants.XA_XdndTypeList.setAtomData(xclient.get_window(),
9.207 XAtom.XA_ATOM,
9.208 wpg.getData(),
10.1 --- a/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java Wed May 06 20:06:23 2009 +0400
10.2 +++ b/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java Fri May 15 15:40:35 2009 +0400
10.3 @@ -181,7 +181,7 @@
10.4 long time) {
10.5 XWindowAttributes wattr = new XWindowAttributes();
10.6 try {
10.7 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
10.8 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
10.9 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
10.10 targetWindow, wattr.pData);
10.11
10.12 @@ -198,7 +198,7 @@
10.13 wattr.dispose();
10.14 }
10.15
10.16 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
10.17 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
10.18 XlibWrapper.XSelectInput(XToolkit.getDisplay(), targetWindow,
10.19 targetWindowMask |
10.20 XConstants.StructureNotifyMask);
10.21 @@ -214,7 +214,7 @@
10.22 }
10.23
10.24 protected final void finalizeDrop() {
10.25 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
10.26 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
10.27 XlibWrapper.XSelectInput(XToolkit.getDisplay(), targetWindow,
10.28 targetWindowMask);
10.29 XToolkit.RESTORE_XERROR_HANDLER();
11.1 --- a/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java Wed May 06 20:06:23 2009 +0400
11.2 +++ b/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java Fri May 15 15:40:35 2009 +0400
11.3 @@ -168,7 +168,7 @@
11.4 if (dest_x >= 0 && dest_y >= 0) {
11.5 XWindowAttributes wattr = new XWindowAttributes();
11.6 try {
11.7 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
11.8 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
11.9 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
11.10 window, wattr.pData);
11.11 XToolkit.RESTORE_XERROR_HANDLER();
11.12 @@ -222,7 +222,7 @@
11.13 long event_mask = 0;
11.14 XWindowAttributes wattr = new XWindowAttributes();
11.15 try {
11.16 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
11.17 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
11.18 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
11.19 embedder, wattr.pData);
11.20 XToolkit.RESTORE_XERROR_HANDLER();
11.21 @@ -240,7 +240,7 @@
11.22 }
11.23
11.24 if ((event_mask & XConstants.PropertyChangeMask) == 0) {
11.25 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
11.26 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
11.27 XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder,
11.28 event_mask | XConstants.PropertyChangeMask);
11.29 XToolkit.RESTORE_XERROR_HANDLER();
11.30 @@ -394,7 +394,7 @@
11.31
11.32 /* Restore the original event mask for the embedder. */
11.33 if ((event_mask & XConstants.PropertyChangeMask) == 0) {
11.34 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
11.35 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
11.36 XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder,
11.37 event_mask);
11.38 XToolkit.RESTORE_XERROR_HANDLER();
12.1 --- a/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java Wed May 06 20:06:23 2009 +0400
12.2 +++ b/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java Fri May 15 15:40:35 2009 +0400
12.3 @@ -301,7 +301,7 @@
12.4 try {
12.5 XWindowAttributes wattr = new XWindowAttributes();
12.6 try {
12.7 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
12.8 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
12.9 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
12.10 xembed.handle, wattr.pData);
12.11
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/src/solaris/classes/sun/awt/X11/XErrorHandler.java Fri May 15 15:40:35 2009 +0400
13.3 @@ -0,0 +1,79 @@
13.4 +/*
13.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
13.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
13.7 + *
13.8 + * This code is free software; you can redistribute it and/or modify it
13.9 + * under the terms of the GNU General Public License version 2 only, as
13.10 + * published by the Free Software Foundation. Sun designates this
13.11 + * particular file as subject to the "Classpath" exception as provided
13.12 + * by Sun in the LICENSE file that accompanied this code.
13.13 + *
13.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
13.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13.17 + * version 2 for more details (a copy is included in the LICENSE file that
13.18 + * accompanied this code).
13.19 + *
13.20 + * You should have received a copy of the GNU General Public License version
13.21 + * 2 along with this work; if not, write to the Free Software Foundation,
13.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
13.23 + *
13.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
13.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
13.26 + * have any questions.
13.27 + */
13.28 +package sun.awt.X11;
13.29 +
13.30 +public abstract class XErrorHandler {
13.31 +
13.32 + /*
13.33 + * Called under AWT lock
13.34 + */
13.35 + public abstract int handleError(long display, XErrorEvent err);
13.36 +
13.37 + /*
13.38 + * Forwards all the errors to saved error handler (which was
13.39 + * set before XToolkit had been initialized).
13.40 + */
13.41 + public static class XBaseErrorHandler extends XErrorHandler {
13.42 + @Override
13.43 + public int handleError(long display, XErrorEvent err) {
13.44 + return XToolkit.SAVED_ERROR_HANDLER(display, err);
13.45 + }
13.46 + }
13.47 +
13.48 + /*
13.49 + * Instead of validating window id, we simply call XGetWindowProperty,
13.50 + * but temporary install this function as the error handler to ignore
13.51 + * BadWindow error.
13.52 + */
13.53 + public static class IgnoreBadWindowHandler extends XBaseErrorHandler {
13.54 + @Override
13.55 + public int handleError(long display, XErrorEvent err) {
13.56 + if (err.get_error_code() == XConstants.BadWindow) {
13.57 + return 0;
13.58 + }
13.59 + return super.handleError(display, err);
13.60 + }
13.61 + // Shared instance
13.62 + private static IgnoreBadWindowHandler theInstance = new IgnoreBadWindowHandler();
13.63 + public static IgnoreBadWindowHandler getInstance() {
13.64 + return theInstance;
13.65 + }
13.66 + }
13.67 +
13.68 + public static class VerifyChangePropertyHandler extends XBaseErrorHandler {
13.69 + @Override
13.70 + public int handleError(long display, XErrorEvent err) {
13.71 + if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) {
13.72 + return 0;
13.73 + }
13.74 + return super.handleError(display, err);
13.75 + }
13.76 + // Shared instance
13.77 + private static IgnoreBadWindowHandler theInstance = new IgnoreBadWindowHandler();
13.78 + public static IgnoreBadWindowHandler getInstance() {
13.79 + return theInstance;
13.80 + }
13.81 + }
13.82 +}
14.1 --- a/src/solaris/classes/sun/awt/X11/XProtocol.java Wed May 06 20:06:23 2009 +0400
14.2 +++ b/src/solaris/classes/sun/awt/X11/XProtocol.java Fri May 15 15:40:35 2009 +0400
14.3 @@ -35,20 +35,6 @@
14.4 private Map<XAtom, XAtomList> atomToList = new HashMap<XAtom, XAtomList>();
14.5 private Map<XAtom, Long> atomToAnchor = new HashMap<XAtom, Long>();
14.6
14.7 - /*
14.8 - * Temporary error handler that ensures that we know if
14.9 - * XChangeProperty succeeded or not.
14.10 - */
14.11 - static XToolkit.XErrorHandler VerifyChangePropertyHandler = new XToolkit.XErrorHandler() {
14.12 - public int handleError(long display, XErrorEvent err) {
14.13 - XToolkit.XERROR_SAVE(err);
14.14 - if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) {
14.15 - return 0;
14.16 - } else {
14.17 - return XToolkit.SAVED_ERROR_HANDLER(display, err);
14.18 - }
14.19 - }
14.20 - };
14.21 volatile boolean firstCheck = true;
14.22 /*
14.23 * Check that that the list of protocols specified by WM in property
15.1 --- a/src/solaris/classes/sun/awt/X11/XQueryTree.java Wed May 06 20:06:23 2009 +0400
15.2 +++ b/src/solaris/classes/sun/awt/X11/XQueryTree.java Fri May 15 15:40:35 2009 +0400
15.3 @@ -52,7 +52,7 @@
15.4 public int execute() {
15.5 return execute(null);
15.6 }
15.7 - public int execute(XToolkit.XErrorHandler errorHandler) {
15.8 + public int execute(XErrorHandler errorHandler) {
15.9 XToolkit.awtLock();
15.10 try {
15.11 if (isDisposed()) {
16.1 --- a/src/solaris/classes/sun/awt/X11/XToolkit.java Wed May 06 20:06:23 2009 +0400
16.2 +++ b/src/solaris/classes/sun/awt/X11/XToolkit.java Fri May 15 15:40:35 2009 +0400
16.3 @@ -149,63 +149,78 @@
16.4 setBackingStoreType();
16.5 }
16.6 m_removeSourceEvents = SunToolkit.getMethod(EventQueue.class, "removeSourceEvents", new Class[] {Object.class, Boolean.TYPE}) ;
16.7 +
16.8 + noisyAwtHandler = AccessController.doPrivileged(new GetBooleanAction("sun.awt.noisyerrorhandler"));
16.9 }
16.10
16.11 - // Error handler stuff
16.12 - static XErrorEvent saved_error;
16.13 - static long saved_error_handler;
16.14 - static XErrorHandler curErrorHandler;
16.15 - // Should be called under LOCK, before releasing LOCK RESTORE_XERROR_HANDLER should be called
16.16 - static void WITH_XERROR_HANDLER(XErrorHandler handler) {
16.17 + //---- ERROR HANDLER CODE ----//
16.18 +
16.19 + /*
16.20 + * Error handler at the moment of XToolkit initialization
16.21 + */
16.22 + private static long saved_error_handler;
16.23 +
16.24 + /*
16.25 + * XErrorEvent being handled
16.26 + */
16.27 + static volatile XErrorEvent saved_error;
16.28 +
16.29 + /*
16.30 + * Current error handler or null if no error handler is set
16.31 + */
16.32 + private static XErrorHandler current_error_handler;
16.33 +
16.34 + /*
16.35 + * Value of sun.awt.noisyerrorhandler system property
16.36 + */
16.37 + private static boolean noisyAwtHandler;
16.38 +
16.39 + public static void WITH_XERROR_HANDLER(XErrorHandler handler) {
16.40 saved_error = null;
16.41 - curErrorHandler = handler;
16.42 - XSync();
16.43 - saved_error_handler = XlibWrapper.SetToolkitErrorHandler();
16.44 + current_error_handler = handler;
16.45 }
16.46 - static void XERROR_SAVE(XErrorEvent event) {
16.47 +
16.48 + public static void RESTORE_XERROR_HANDLER() {
16.49 + current_error_handler = null;
16.50 + }
16.51 +
16.52 + // Should be called under LOCK
16.53 + public static int SAVED_ERROR_HANDLER(long display, XErrorEvent error) {
16.54 + if (saved_error_handler != 0) {
16.55 + // Default XErrorHandler may just terminate the process. Don't call it.
16.56 + // return XlibWrapper.CallErrorHandler(saved_error_handler, display, error.pData);
16.57 + }
16.58 + if (log.isLoggable(Level.FINE)) {
16.59 + log.log(Level.FINE, "Unhandled XErrorEvent: " +
16.60 + "id=" + error.get_resourceid() + ", " +
16.61 + "serial=" + error.get_serial() + ", " +
16.62 + "ec=" + error.get_error_code() + ", " +
16.63 + "rc=" + error.get_request_code() + ", " +
16.64 + "mc=" + error.get_minor_code());
16.65 + }
16.66 + return 0;
16.67 + }
16.68 +
16.69 + // Called from the native code when an error occurs
16.70 + private static int globalErrorHandler(long display, long event_ptr) {
16.71 + if (noisyAwtHandler) {
16.72 + XlibWrapper.PrintXErrorEvent(display, event_ptr);
16.73 + }
16.74 + XErrorEvent event = new XErrorEvent(event_ptr);
16.75 saved_error = event;
16.76 - }
16.77 - // Should be called under LOCK
16.78 - static void RESTORE_XERROR_HANDLER() {
16.79 - XSync();
16.80 - XlibWrapper.XSetErrorHandler(saved_error_handler);
16.81 - curErrorHandler = null;
16.82 - }
16.83 - // Should be called under LOCK
16.84 - static int SAVED_ERROR_HANDLER(long display, XErrorEvent error) {
16.85 - return XlibWrapper.CallErrorHandler(saved_error_handler, display, error.pData);
16.86 - }
16.87 - interface XErrorHandler {
16.88 - int handleError(long display, XErrorEvent err);
16.89 - }
16.90 - static int GlobalErrorHandler(long display, long event_ptr) {
16.91 - XErrorEvent event = new XErrorEvent(event_ptr);
16.92 try {
16.93 - if (curErrorHandler != null) {
16.94 - return curErrorHandler.handleError(display, event);
16.95 + if (current_error_handler != null) {
16.96 + return current_error_handler.handleError(display, event);
16.97 } else {
16.98 return SAVED_ERROR_HANDLER(display, event);
16.99 }
16.100 - } finally {
16.101 + } catch (Throwable z) {
16.102 + log.log(Level.FINE, "Error in GlobalErrorHandler", z);
16.103 }
16.104 + return 0;
16.105 }
16.106
16.107 -/*
16.108 - * Instead of validating window id, we simply call XGetWindowProperty,
16.109 - * but temporary install this function as the error handler to ignore
16.110 - * BadWindow error.
16.111 - */
16.112 - static XErrorHandler IgnoreBadWindowHandler = new XErrorHandler() {
16.113 - public int handleError(long display, XErrorEvent err) {
16.114 - XERROR_SAVE(err);
16.115 - if (err.get_error_code() == XConstants.BadWindow) {
16.116 - return 0;
16.117 - } else {
16.118 - return SAVED_ERROR_HANDLER(display, err);
16.119 - }
16.120 - }
16.121 - };
16.122 -
16.123 + //---- END OF ERROR HANDLER CODE ----//
16.124
16.125 private native static void initIDs();
16.126 native static void waitForEvents(long nextTaskTime);
16.127 @@ -302,25 +317,34 @@
16.128 areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true"));
16.129 //set system property if not yet assigned
16.130 System.setProperty("sun.awt.enableExtraMouseButtons", ""+areExtraMouseButtonsEnabled);
16.131 +
16.132 + saved_error_handler = XlibWrapper.SetToolkitErrorHandler();
16.133 } finally {
16.134 awtUnlock();
16.135 }
16.136
16.137 Runtime.getRuntime().addShutdownHook(new Thread() {
16.138 - public void run() {
16.139 - XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
16.140 - if (peer != null) {
16.141 - peer.dispose();
16.142 - }
16.143 - if (xs != null) {
16.144 - ((XAWTXSettings)xs).dispose();
16.145 - }
16.146 - freeXKB();
16.147 - if (log.isLoggable(Level.FINE)) {
16.148 - dumpPeers();
16.149 - }
16.150 + public void run() {
16.151 + XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
16.152 + if (peer != null) {
16.153 + peer.dispose();
16.154 }
16.155 - });
16.156 + if (xs != null) {
16.157 + ((XAWTXSettings)xs).dispose();
16.158 + }
16.159 + freeXKB();
16.160 + if (log.isLoggable(Level.FINE)) {
16.161 + dumpPeers();
16.162 + }
16.163 +
16.164 + awtLock();
16.165 + try {
16.166 + XlibWrapper.XSetErrorHandler(saved_error_handler);
16.167 + } finally {
16.168 + awtUnlock();
16.169 + }
16.170 + }
16.171 + });
16.172 }
16.173
16.174 static String getCorrectXIDString(String val) {
16.175 @@ -2409,8 +2433,6 @@
16.176 return new XDesktopPeer();
16.177 }
16.178
16.179 - public static native void setNoisyXErrorHandler();
16.180 -
16.181 public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
16.182 return areExtraMouseButtonsEnabled;
16.183 }
17.1 --- a/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java Wed May 06 20:06:23 2009 +0400
17.2 +++ b/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java Fri May 15 15:40:35 2009 +0400
17.3 @@ -57,7 +57,7 @@
17.4 public int execute() {
17.5 return execute(null);
17.6 }
17.7 - public int execute(XToolkit.XErrorHandler errorHandler) {
17.8 + public int execute(XErrorHandler errorHandler) {
17.9 XToolkit.awtLock();
17.10 try {
17.11 if (isDisposed()) {
18.1 --- a/src/solaris/classes/sun/awt/X11/XWM.java Wed May 06 20:06:23 2009 +0400
18.2 +++ b/src/solaris/classes/sun/awt/X11/XWM.java Fri May 15 15:40:35 2009 +0400
18.3 @@ -276,7 +276,7 @@
18.4 winmgr_running = false;
18.5 substruct.set_event_mask(XConstants.SubstructureRedirectMask);
18.6
18.7 - XToolkit.WITH_XERROR_HANDLER(DetectWMHandler);
18.8 + XToolkit.WITH_XERROR_HANDLER(detectWMHandler);
18.9 XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
18.10 XToolkit.getDefaultRootWindow(),
18.11 XConstants.CWEventMask,
18.12 @@ -321,7 +321,7 @@
18.13 new WindowPropertyGetter(window, XA_ENLIGHTENMENT_COMMS, 0, 14, false,
18.14 XAtom.XA_STRING);
18.15 try {
18.16 - int status = getter.execute(XToolkit.IgnoreBadWindowHandler);
18.17 + int status = getter.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
18.18 if (status != XConstants.Success || getter.getData() == 0) {
18.19 return 0;
18.20 }
18.21 @@ -439,7 +439,7 @@
18.22 new WindowPropertyGetter(wmwin, XA_DT_SM_STATE_INFO, 0, 1,
18.23 false, XA_DT_SM_STATE_INFO);
18.24 try {
18.25 - status = getter2.execute(XToolkit.IgnoreBadWindowHandler);
18.26 + status = getter2.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
18.27
18.28
18.29 if (status != XConstants.Success || getter2.getData() == 0) {
18.30 @@ -571,21 +571,6 @@
18.31 }
18.32
18.33 /*
18.34 - * Temporary error handler that ensures that we know if
18.35 - * XChangeProperty succeeded or not.
18.36 - */
18.37 - static XToolkit.XErrorHandler VerifyChangePropertyHandler = new XToolkit.XErrorHandler() {
18.38 - public int handleError(long display, XErrorEvent err) {
18.39 - XToolkit.XERROR_SAVE(err);
18.40 - if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) {
18.41 - return 0;
18.42 - } else {
18.43 - return XToolkit.SAVED_ERROR_HANDLER(display, err);
18.44 - }
18.45 - }
18.46 - };
18.47 -
18.48 - /*
18.49 * Prepare IceWM check.
18.50 *
18.51 * The only way to detect IceWM, seems to be by setting
18.52 @@ -617,7 +602,7 @@
18.53
18.54 XToolkit.awtLock();
18.55 try {
18.56 - XToolkit.WITH_XERROR_HANDLER(VerifyChangePropertyHandler);
18.57 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
18.58 XlibWrapper.XChangePropertyS(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(),
18.59 XA_ICEWM_WINOPTHINT.getAtom(),
18.60 XA_ICEWM_WINOPTHINT.getAtom(),
18.61 @@ -682,20 +667,19 @@
18.62 * Temporary error handler that checks if selecting for
18.63 * SubstructureRedirect failed.
18.64 */
18.65 - static boolean winmgr_running = false;
18.66 - static XToolkit.XErrorHandler DetectWMHandler = new XToolkit.XErrorHandler() {
18.67 - public int handleError(long display, XErrorEvent err) {
18.68 - XToolkit.XERROR_SAVE(err);
18.69 - if (err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes
18.70 - && err.get_error_code() == XConstants.BadAccess)
18.71 - {
18.72 - winmgr_running = true;
18.73 - return 0;
18.74 - } else {
18.75 - return XToolkit.SAVED_ERROR_HANDLER(display, err);
18.76 - }
18.77 + private static boolean winmgr_running = false;
18.78 + private static XErrorHandler detectWMHandler = new XErrorHandler.XBaseErrorHandler() {
18.79 + @Override
18.80 + public int handleError(long display, XErrorEvent err) {
18.81 + if ((err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes) &&
18.82 + (err.get_error_code() == XConstants.BadAccess))
18.83 + {
18.84 + winmgr_running = true;
18.85 + return 0;
18.86 }
18.87 - };
18.88 + return super.handleError(display, err);
18.89 + }
18.90 + };
18.91
18.92 /*
18.93 * Make an educated guess about running window manager.
19.1 --- a/src/solaris/classes/sun/awt/X11/XlibUtil.java Wed May 06 20:06:23 2009 +0400
19.2 +++ b/src/solaris/classes/sun/awt/X11/XlibUtil.java Fri May 15 15:40:35 2009 +0400
19.3 @@ -149,7 +149,7 @@
19.4 new XTranslateCoordinates(src, dst, p.x, p.y);
19.5 try
19.6 {
19.7 - int status = xtc.execute(XToolkit.IgnoreBadWindowHandler);
19.8 + int status = xtc.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
19.9 if ((status != 0) &&
19.10 ((XToolkit.saved_error == null) ||
19.11 (XToolkit.saved_error.get_error_code() == XConstants.Success)))
19.12 @@ -306,7 +306,7 @@
19.13 XWM.XA_WM_STATE);
19.14 try
19.15 {
19.16 - wpg.execute(XToolkit.IgnoreBadWindowHandler);
19.17 + wpg.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
19.18 if (wpg.getActualType() == XWM.XA_WM_STATE.getAtom())
19.19 {
19.20 return true;
19.21 @@ -345,7 +345,7 @@
19.22 XWindowAttributes wattr = new XWindowAttributes();
19.23 try
19.24 {
19.25 - XToolkit.WITH_XERROR_HANDLER(XToolkit.IgnoreBadWindowHandler);
19.26 + XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
19.27 int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
19.28 window, wattr.pData);
19.29 XToolkit.RESTORE_XERROR_HANDLER();
20.1 --- a/src/solaris/classes/sun/awt/X11/XlibWrapper.java Wed May 06 20:06:23 2009 +0400
20.2 +++ b/src/solaris/classes/sun/awt/X11/XlibWrapper.java Fri May 15 15:40:35 2009 +0400
20.3 @@ -646,4 +646,6 @@
20.4 String javaVersion = XToolkit.getSystemProperty("java.version");
20.5 return javaVersion != null && javaVersion.contains("internal");
20.6 }
20.7 +
20.8 + static native void PrintXErrorEvent(long display, long event_ptr);
20.9 }
21.1 --- a/src/solaris/native/sun/awt/awt_GraphicsEnv.c Wed May 06 20:06:23 2009 +0400
21.2 +++ b/src/solaris/native/sun/awt/awt_GraphicsEnv.c Fri May 15 15:40:35 2009 +0400
21.3 @@ -175,42 +175,11 @@
21.4 }
21.5
21.6 #ifndef HEADLESS
21.7 +
21.8 /*
21.9 - * error handlers
21.10 + * XIOErrorHandler
21.11 */
21.12 -
21.13 -int
21.14 -xerror_handler(Display * disp, XErrorEvent * err)
21.15 -{
21.16 -/* #ifdef DEBUG */
21.17 - char msg[128];
21.18 - char buf[128];
21.19 - char *ev = getenv("NOISY_AWT");
21.20 -
21.21 - if (!ev || !ev[0])
21.22 - return 0;
21.23 - XGetErrorText(disp, err->error_code, msg, sizeof(msg));
21.24 - jio_fprintf(stderr, "Xerror %s, XID %x, ser# %d\n", msg, err->resourceid, err->serial);
21.25 - jio_snprintf(buf, sizeof(buf), "%d", err->request_code);
21.26 - XGetErrorDatabaseText(disp, "XRequest", buf, "Unknown", msg, sizeof(msg));
21.27 - jio_fprintf(stderr, "Major opcode %d (%s)\n", err->request_code, msg);
21.28 - if (err->request_code > 128) {
21.29 - jio_fprintf(stderr, "Minor opcode %d\n", err->minor_code);
21.30 - }
21.31 - if (awtLockInited) {
21.32 - /*SignalError(lockedee->lastpc, lockedee, "fp/ade/gui/GUIException", msg); */
21.33 - }
21.34 - if (strcasecmp(ev, "abort") == 0) {
21.35 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
21.36 -
21.37 - (*env)->FatalError(env, "xerror_handler abort");
21.38 - }
21.39 -/* #endif */
21.40 - return 0;
21.41 -}
21.42 -
21.43 -static int
21.44 -xioerror_handler(Display * disp)
21.45 +static int xioerror_handler(Display *disp)
21.46 {
21.47 if (awtLockInited) {
21.48 if (errno == EPIPE) {
21.49 @@ -886,7 +855,6 @@
21.50 return NULL;
21.51 }
21.52
21.53 - XSetErrorHandler(xerror_handler);
21.54 XSetIOErrorHandler(xioerror_handler);
21.55
21.56 /* set awt_numScreens, and whether or not we're using Xinerama */
22.1 --- a/src/solaris/native/sun/awt/awt_InputMethod.c Wed May 06 20:06:23 2009 +0400
22.2 +++ b/src/solaris/native/sun/awt/awt_InputMethod.c Fri May 15 15:40:35 2009 +0400
22.3 @@ -1458,7 +1458,6 @@
22.4 }
22.5
22.6 static void OpenXIMCallback(Display *display, XPointer client_data, XPointer call_data) {
22.7 - extern int xerror_handler();
22.8 XIMCallback ximCallback;
22.9
22.10 X11im = XOpenIM(display, NULL, NULL, NULL);
22.11 @@ -1469,13 +1468,6 @@
22.12 ximCallback.callback = (XIMProc)DestroyXIMCallback;
22.13 ximCallback.client_data = NULL;
22.14 XSetIMValues(X11im, XNDestroyCallback, &ximCallback, NULL);
22.15 -
22.16 - /* Workaround for Solaris 2.6 bug 4097754. We're affected by this problem
22.17 - * because Motif also calls XOpenIM for us. Re-registering the error handler
22.18 - * that MToolkit has registered already after calling XOpenIM avoids the
22.19 - * problem.
22.20 - */
22.21 - XSetErrorHandler(xerror_handler);
22.22 }
22.23
22.24 static void DestroyXIMCallback(XIM im, XPointer client_data, XPointer call_data) {
23.1 --- a/src/solaris/native/sun/awt/awt_MToolkit.c Wed May 06 20:06:23 2009 +0400
23.2 +++ b/src/solaris/native/sun/awt/awt_MToolkit.c Fri May 15 15:40:35 2009 +0400
23.3 @@ -1926,26 +1926,6 @@
23.4 XtAppProcessEvent(awt_appContext, iMask & ~XtIMXEvent);
23.5 }
23.6
23.7 - /*
23.8 - ** Bug #4361799: Forte4J sometimes crashes on Solaris:
23.9 - ** There is an underlying bug in Selection.c in Xt lib.
23.10 - ** The routine HandleSelectionEvents, can call EndProtectedSection()
23.11 - ** more than StartProtectedSection(), and then EndProtectedSection
23.12 - ** will restore the default XError handler. As a result awt's
23.13 - ** XError handler gets removed and we later crash on an XError.
23.14 - **
23.15 - ** This happens when we call XtAppProcessEvent with event type 1e
23.16 - ** (SelectionRequest) when running two copies of Forte
23.17 - **
23.18 - ** XSetErrorHandler can safely be called repeatedly, so we are
23.19 - ** fixing this with the sledgehammer, and resetting our XError
23.20 - ** handler every time through the loop:
23.21 - */
23.22 - {
23.23 - extern int32_t xerror_handler();
23.24 - XSetErrorHandler(xerror_handler);
23.25 - }
23.26 -
23.27 } /* processOneEvent() */
23.28
23.29 /*
24.1 --- a/src/solaris/native/sun/xawt/XToolkit.c Wed May 06 20:06:23 2009 +0400
24.2 +++ b/src/solaris/native/sun/xawt/XToolkit.c Fri May 15 15:40:35 2009 +0400
24.3 @@ -575,7 +575,6 @@
24.4 pollFds[1].revents = 0;
24.5 }
24.6
24.7 -
24.8 AWT_NOFLUSH_UNLOCK();
24.9
24.10 /* ACTUALLY DO THE POLL() */
24.11 @@ -684,8 +683,6 @@
24.12 return ret;
24.13 }
24.14
24.15 -static XErrorHandler saved_error_handler = NULL;
24.16 -
24.17 #ifdef __linux__
24.18 void print_stack(void)
24.19 {
24.20 @@ -706,38 +703,6 @@
24.21 }
24.22 #endif
24.23
24.24 -static int NoisyXErrorHandler(Display * dpy, XErrorEvent * event) {
24.25 - fprintf(stderr, "id=%x, serial=%x, ec=%d, rc=%d, mc=%d\n",
24.26 - event->resourceid, event->serial, event->error_code,
24.27 - event->request_code, event->minor_code);
24.28 - /*
24.29 - #ifdef __linux__
24.30 - print_stack();
24.31 - #endif
24.32 - */
24.33 - if (jvm != NULL) {
24.34 - JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
24.35 - JNU_CallStaticMethodByName(env, NULL, "java/lang/Thread", "dumpStack", "()V");
24.36 - }
24.37 - if (!saved_error_handler) {
24.38 - return saved_error_handler(dpy, event);
24.39 - }
24.40 - return 0;
24.41 -}
24.42 -
24.43 -/*
24.44 - * Class: sun_awt_X11_XToolkit
24.45 - * Method: setNoisyXErrorHandler
24.46 - * Signature: ()V
24.47 - */
24.48 -JNIEXPORT void JNICALL Java_sun_awt_X11_XToolkit_setNoisyXErrorHandler
24.49 -(JNIEnv *env , jclass clazz)
24.50 -{
24.51 - (*env)->GetJavaVM(env, &jvm);
24.52 - saved_error_handler = XSetErrorHandler(NoisyXErrorHandler);
24.53 -}
24.54 -
24.55 -
24.56 Window get_xawt_root_shell(JNIEnv *env) {
24.57 static jclass classXRootWindow = NULL;
24.58 static jmethodID methodGetXRootWindow = NULL;
25.1 --- a/src/solaris/native/sun/xawt/XlibWrapper.c Wed May 06 20:06:23 2009 +0400
25.2 +++ b/src/solaris/native/sun/xawt/XlibWrapper.c Fri May 15 15:40:35 2009 +0400
25.3 @@ -1186,7 +1186,7 @@
25.4 static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
25.5 if (jvm != NULL) {
25.6 JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
25.7 - return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "GlobalErrorHandler", "(JJ)I",
25.8 + return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I",
25.9 ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
25.10 } else {
25.11 return 0;
25.12 @@ -1229,6 +1229,28 @@
25.13 return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
25.14 }
25.15
25.16 +/*
25.17 + * Class: sun_awt_X11_XlibWrapper
25.18 + * Method: PrintXErrorEvent
25.19 + * Signature: (JJ)V
25.20 + */
25.21 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent
25.22 +(JNIEnv *env, jclass clazz, jlong display, jlong event_ptr)
25.23 +{
25.24 + char msg[128];
25.25 + char buf[128];
25.26 +
25.27 + XErrorEvent* err = (XErrorEvent *)jlong_to_ptr(event_ptr);
25.28 +
25.29 + XGetErrorText((Display *)jlong_to_ptr(display), err->error_code, msg, sizeof(msg));
25.30 + jio_fprintf(stderr, "Xerror %s, XID %x, ser# %d\n", msg, err->resourceid, err->serial);
25.31 + jio_snprintf(buf, sizeof(buf), "%d", err->request_code);
25.32 + XGetErrorDatabaseText((Display *)jlong_to_ptr(display), "XRequest", buf, "Unknown", msg, sizeof(msg));
25.33 + jio_fprintf(stderr, "Major opcode %d (%s)\n", err->request_code, msg);
25.34 + if (err->request_code > 128) {
25.35 + jio_fprintf(stderr, "Minor opcode %d\n", err->minor_code);
25.36 + }
25.37 +}
25.38
25.39
25.40 /*