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

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 36,46 **** * set before XToolkit had been initialized). */ public static class XBaseErrorHandler extends XErrorHandler { @Override public int handleError(long display, XErrorEvent err) { ! return XToolkit.SAVED_ERROR_HANDLER(display, err); } } /* * Instead of validating window id, we simply call XGetWindowProperty, --- 36,69 ---- * set before XToolkit had been initialized). */ public static class XBaseErrorHandler extends XErrorHandler { @Override public int handleError(long display, XErrorEvent err) { ! return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err); ! } ! } ! ! /** ! * This is a base synthetic error handler containing a boolean flag which allows ! * to show that an error is handled or not. ! */ ! public static class XErrorHandlerWithFlag extends XBaseErrorHandler { ! private volatile boolean errorOccurred = false; ! ! public boolean getErrorOccurredFlag() { ! return errorOccurred; ! } ! ! /** ! * Sets an internal boolean flag to a particular value. Should be always called with ! * <code>false</code> value of the parameter <code>errorOccurred</code> before this ! * error handler is set as current. ! * @param errorOccurred <code>true</code> to indicate that an error was handled, ! * <code>false</code> to reset the internal boolean flag ! */ ! public void setErrorOccurredFlag(boolean errorOccurred) { ! this.errorOccurred = errorOccurred; } } /* * Instead of validating window id, we simply call XGetWindowProperty,
*** 74,79 **** --- 97,149 ---- private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler(); public static VerifyChangePropertyHandler getInstance() { return theInstance; } } + + /** + * This is a synthetic error handler for errors generated by the native function + * <code>XShmAttach</code>. If an error is handled, an internal boolean flag of the + * handler is set to <code>true</code>. + */ + public static final class XShmAttachHandler extends XErrorHandlerWithFlag { + private XShmAttachHandler() {} + + @Override + public int handleError(long display, XErrorEvent err) { + if (err.get_minor_code() == XConstants.X_ShmAttach) { + setErrorOccurredFlag(true); + return 0; + } + return super.handleError(display, err); + } + + // Shared instance + private static XShmAttachHandler theInstance = new XShmAttachHandler(); + public static XShmAttachHandler getInstance() { + return theInstance; + } + } + + /** + * This is a synthetic error handler for <code>BadAlloc</code> errors generated by the + * native <code>glX*</code> functions. Its internal boolean flag is set to <code>true</code>, + * if an error is handled. + */ + public static final class GLXBadAllocHandler extends XErrorHandlerWithFlag { + private GLXBadAllocHandler() {} + + @Override + public int handleError(long display, XErrorEvent err) { + if (err.get_error_code() == XConstants.BadAlloc) { + setErrorOccurredFlag(true); + return 0; + } + return super.handleError(display, err); + } + + private static GLXBadAllocHandler theInstance = new GLXBadAllocHandler(); + public static GLXBadAllocHandler getInstance() { + return theInstance; + } + } }