jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java
changeset 17679 a81555868357
parent 5506 202f599c92aa
child 21939 5169fd314636
equal deleted inserted replaced
17678:ec24ad8455ec 17679:a81555868357
     1 /*
     1 /*
     2  * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
     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.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     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
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     7  * published by the Free Software Foundation.  Oracle designates this
    36      * set before XToolkit had been initialized).
    36      * set before XToolkit had been initialized).
    37      */
    37      */
    38     public static class XBaseErrorHandler extends XErrorHandler {
    38     public static class XBaseErrorHandler extends XErrorHandler {
    39         @Override
    39         @Override
    40         public int handleError(long display, XErrorEvent err) {
    40         public int handleError(long display, XErrorEvent err) {
    41             return XToolkit.SAVED_ERROR_HANDLER(display, 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;
    42         }
    65         }
    43     }
    66     }
    44 
    67 
    45     /*
    68     /*
    46      * Instead of validating window id, we simply call XGetWindowProperty,
    69      * Instead of validating window id, we simply call XGetWindowProperty,
    74         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
    97         private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
    75         public static VerifyChangePropertyHandler getInstance() {
    98         public static VerifyChangePropertyHandler getInstance() {
    76             return theInstance;
    99             return theInstance;
    77         }
   100         }
    78     }
   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     }
    79 }
   149 }