jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java
changeset 21939 5169fd314636
parent 17679 a81555868357
equal deleted inserted replaced
21938:3a235a461503 21939:5169fd314636
    40         public int handleError(long display, XErrorEvent err) {
    40         public int handleError(long display, XErrorEvent err) {
    41             return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err);
    41             return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err);
    42         }
    42         }
    43     }
    43     }
    44 
    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     /*
    45     /*
    69      * Instead of validating window id, we simply call XGetWindowProperty,
    46      * Instead of validating window id, we simply call XGetWindowProperty,
    70      * but temporary install this function as the error handler to ignore
    47      * but temporary install this function as the error handler to ignore
    71      * BadWindow error.
    48      * BadWindow error.
    72      */
    49      */
    97         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
    74         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
    98         public static VerifyChangePropertyHandler getInstance() {
    75         public static VerifyChangePropertyHandler getInstance() {
    99             return theInstance;
    76             return theInstance;
   100         }
    77         }
   101     }
    78     }
   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 }
    79 }