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 } |