diff options
Diffstat (limited to 'src/newt/classes')
-rw-r--r-- | src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java | 22 | ||||
-rw-r--r-- | src/newt/classes/jogamp/newt/swt/event/SWTNewtEventFactory.java | 15 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java b/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java index ae740bfaa..8ce1eaf2c 100644 --- a/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java +++ b/src/newt/classes/com/jogamp/newt/swt/NewtCanvasSWT.java @@ -51,6 +51,7 @@ import jogamp.newt.Debug; import jogamp.newt.swt.SWTEDTUtil; import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Canvas; @@ -436,9 +437,16 @@ public class NewtCanvasSWT extends Canvas implements NativeWindowHolder, WindowC * <li> Remove reference to the NEWT Child</li> * </ul> * @see Window#destroy() + * @throws SWTException If this method is not called + * {@link SWTAccessor#isOnSWTThread(org.eclipse.swt.widgets.Display) from the SWT thread}, + * an {@link SWTException} is thrown for compliance across platforms. + * User may utilize {@link SWTAccessor#invokeOnSWTThread(org.eclipse.swt.widgets.Display, boolean, Runnable)}. */ @Override - public void dispose() { + public void dispose() throws SWTException { + if( !SWTAccessor.isOnSWTThread( getDisplay() ) ) { + throw new SWTException("Invalid thread access"); + } removeListener (SWT.Paint, swtListener); removeListener (SWT.Move, swtListener); removeListener (SWT.Show, swtListener); @@ -514,8 +522,18 @@ public class NewtCanvasSWT extends Canvas implements NativeWindowHolder, WindowC * via {@link Display#setEDTUtil(EDTUtil)}. * </p> * @return the previous attached newt child. + * + * @throws SWTException If this method is not called + * {@link SWTAccessor#isOnSWTThread(org.eclipse.swt.widgets.Display) from the SWT thread}, + * an {@link SWTException} is thrown for compliance across platforms. + * User may utilize {@link SWTAccessor#invokeOnSWTThread(org.eclipse.swt.widgets.Display, boolean, Runnable)}. */ - public Window setNEWTChild(final Window newChild) { + public Window setNEWTChild(final Window newChild) throws SWTException { + if( !SWTAccessor.isOnSWTThread( getDisplay() ) ) { + throw new SWTException("Invalid thread access"); + } + + // if( org.eclipse.swt.widgets.Display.s) final Window prevChild = newtChild; if(DEBUG) { System.err.println(shortName()+".setNEWTChild.0: win "+newtWinHandleToHexString(prevChild)+" -> "+newtWinHandleToHexString(newChild)); diff --git a/src/newt/classes/jogamp/newt/swt/event/SWTNewtEventFactory.java b/src/newt/classes/jogamp/newt/swt/event/SWTNewtEventFactory.java index bb0b8c1aa..c3fb7d665 100644 --- a/src/newt/classes/jogamp/newt/swt/event/SWTNewtEventFactory.java +++ b/src/newt/classes/jogamp/newt/swt/event/SWTNewtEventFactory.java @@ -30,8 +30,10 @@ package jogamp.newt.swt.event; import com.jogamp.nativewindow.NativeSurface; import com.jogamp.nativewindow.NativeSurfaceHolder; +import com.jogamp.nativewindow.swt.SWTAccessor; import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; @@ -359,15 +361,26 @@ public class SWTNewtEventFactory { return false; } + /** + * @throws SWTException If this method is not called + * {@link SWTAccessor#isOnSWTThread(org.eclipse.swt.widgets.Display) from the SWT thread}, + * an {@link SWTException} is thrown for compliance across platforms. + * User may utilize {@link SWTAccessor#invokeOnSWTThread(org.eclipse.swt.widgets.Display, boolean, Runnable)}. + */ public final void attachDispatchListener(final org.eclipse.swt.widgets.Control ctrl, final NativeSurfaceHolder sourceHolder, final com.jogamp.newt.event.MouseListener ml, - final com.jogamp.newt.event.KeyListener kl) { + final com.jogamp.newt.event.KeyListener kl) + throws SWTException + { if(null==ctrl) { throw new IllegalArgumentException("Argument ctrl is null"); } if(null==sourceHolder) { throw new IllegalArgumentException("Argument source is null"); } + if( !SWTAccessor.isOnSWTThread( ctrl.getDisplay() ) ) { + throw new SWTException("Invalid thread access"); + } if( null != ml ) { final Listener listener = new Listener () { |