src/solaris/classes/sun/awt/X11/XErrorHandler.java

Print this page


   1 /*
   2  * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package sun.awt.X11;
  26 
  27 public abstract class XErrorHandler {
  28 
  29     /*
  30      * Called under AWT lock
  31      */
  32     public abstract int handleError(long display, XErrorEvent err);
  33 
  34     /*
  35      * Forwards all the errors to saved error handler (which was
  36      * set before XToolkit had been initialized).
  37      */
  38     public static class XBaseErrorHandler extends XErrorHandler {
  39         @Override
  40         public int handleError(long display, XErrorEvent err) {
  41             return XToolkit.SAVED_ERROR_HANDLER(display, err);























  42         }
  43     }
  44 
  45     /*
  46      * Instead of validating window id, we simply call XGetWindowProperty,
  47      * but temporary install this function as the error handler to ignore
  48      * BadWindow error.
  49      */
  50     public static class IgnoreBadWindowHandler extends XBaseErrorHandler {
  51         @Override
  52         public int handleError(long display, XErrorEvent err) {
  53             if (err.get_error_code() == XConstants.BadWindow) {
  54                 return 0;
  55             }
  56             return super.handleError(display, err);
  57         }
  58         // Shared instance
  59         private static IgnoreBadWindowHandler theInstance = new IgnoreBadWindowHandler();
  60         public static IgnoreBadWindowHandler getInstance() {
  61             return theInstance;
  62         }
  63     }
  64 
  65     public static class VerifyChangePropertyHandler extends XBaseErrorHandler {
  66         @Override
  67         public int handleError(long display, XErrorEvent err) {
  68             if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) {
  69                 return 0;
  70             }
  71             return super.handleError(display, err);
  72         }
  73         // Shared instance
  74         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
  75         public static VerifyChangePropertyHandler getInstance() {







































































  76             return theInstance;
  77         }
  78     }
  79 }
   1 /*
   2  * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 package sun.awt.X11;
  26 
  27 public abstract class XErrorHandler {
  28 
  29     /*
  30      * Called under AWT lock
  31      */
  32     public abstract int handleError(long display, XErrorEvent err);
  33 
  34     /*
  35      * Forwards all the errors to saved error handler (which was
  36      * set before XToolkit had been initialized).
  37      */
  38     public static class XBaseErrorHandler extends XErrorHandler {
  39         @Override
  40         public int handleError(long display, XErrorEvent err) {
  41             return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err);
  42         }
  43     }
  44 
  45     /**
  46      * This is a base synthetic error handler containing a boolean flag which allows
  47      * to show that an error is handled or not.
  48      */
  49     public static class XErrorHandlerWithFlag extends XBaseErrorHandler {
  50         private volatile boolean errorOccurred = false;
  51 
  52         public boolean getErrorOccurredFlag() {
  53             return errorOccurred;
  54         }
  55 
  56         /**
  57          * Sets an internal boolean flag to a particular value. Should be always called with
  58          * <code>false</code> value of the parameter <code>errorOccurred</code> before this
  59          * error handler is set as current.
  60          * @param errorOccurred <code>true</code> to indicate that an error was handled,
  61          *     <code>false</code> to reset the internal boolean flag
  62          */
  63         public void setErrorOccurredFlag(boolean errorOccurred) {
  64             this.errorOccurred = errorOccurred;
  65         }
  66     }
  67 
  68     /*
  69      * Instead of validating window id, we simply call XGetWindowProperty,
  70      * but temporary install this function as the error handler to ignore
  71      * BadWindow error.
  72      */
  73     public static class IgnoreBadWindowHandler extends XBaseErrorHandler {
  74         @Override
  75         public int handleError(long display, XErrorEvent err) {
  76             if (err.get_error_code() == XConstants.BadWindow) {
  77                 return 0;
  78             }
  79             return super.handleError(display, err);
  80         }
  81         // Shared instance
  82         private static IgnoreBadWindowHandler theInstance = new IgnoreBadWindowHandler();
  83         public static IgnoreBadWindowHandler getInstance() {
  84             return theInstance;
  85         }
  86     }
  87 
  88     public static class VerifyChangePropertyHandler extends XBaseErrorHandler {
  89         @Override
  90         public int handleError(long display, XErrorEvent err) {
  91             if (err.get_request_code() == XProtocolConstants.X_ChangeProperty) {
  92                 return 0;
  93             }
  94             return super.handleError(display, err);
  95         }
  96         // Shared instance
  97         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
  98         public static VerifyChangePropertyHandler getInstance() {
  99             return theInstance;
 100         }
 101     }
 102 
 103     /**
 104      * This is a synthetic error handler for errors generated by the native function
 105      * <code>XShmAttach</code>. If an error is handled, an internal boolean flag of the
 106      * handler is set to <code>true</code>.
 107      */
 108     public static final class XShmAttachHandler extends XErrorHandlerWithFlag {
 109         private XShmAttachHandler() {}
 110 
 111         @Override
 112         public int handleError(long display, XErrorEvent err) {
 113             if (err.get_minor_code() == XConstants.X_ShmAttach) {
 114                 setErrorOccurredFlag(true);
 115                 return 0;
 116             }
 117             return super.handleError(display, err);
 118         }
 119 
 120         // Shared instance
 121         private static XShmAttachHandler theInstance = new XShmAttachHandler();
 122         public static XShmAttachHandler getInstance() {
 123             return theInstance;
 124         }
 125     }
 126 
 127     /**
 128      * This is a synthetic error handler for <code>BadAlloc</code> errors generated by the
 129      * native <code>glX*</code> functions. Its internal boolean flag is set to <code>true</code>,
 130      * if an error is handled.
 131      */
 132     public static final class GLXBadAllocHandler extends XErrorHandlerWithFlag {
 133         private GLXBadAllocHandler() {}
 134 
 135         @Override
 136         public int handleError(long display, XErrorEvent err) {
 137             if (err.get_error_code() == XConstants.BadAlloc) {
 138                 setErrorOccurredFlag(true);
 139                 return 0;
 140             }
 141             return super.handleError(display, err);
 142         }
 143 
 144         private static GLXBadAllocHandler theInstance = new GLXBadAllocHandler();
 145         public static GLXBadAllocHandler getInstance() {
 146             return theInstance;
 147         }
 148     }
 149 
 150     /**
 151      * This is a synthetic error handler for errors generated by the native function
 152      * <code>XChangeWindowAttributes</code>. If an error is handled, an internal boolean
 153      * flag of the handler is set to <code>true</code>.
 154      */
 155     public static final class XChangeWindowAttributesHandler extends XErrorHandlerWithFlag {
 156         private XChangeWindowAttributesHandler() {}
 157 
 158         @Override
 159         public int handleError(long display, XErrorEvent err) {
 160             if ((err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes) &&
 161                 (err.get_error_code() == XConstants.BadAccess)) {
 162                 setErrorOccurredFlag(true);
 163                 return 0;
 164             }
 165             return super.handleError(display, err);
 166         }
 167 
 168         private static XChangeWindowAttributesHandler theInstance = new XChangeWindowAttributesHandler();
 169         public static XChangeWindowAttributesHandler getInstance() {
 170             return theInstance;
 171         }
 172     }
 173 }