diff options
author | Ralf Sternberg | 2012-09-17 09:36:10 +0000 |
---|---|---|
committer | Ralf Sternberg | 2012-09-17 09:37:18 +0000 |
commit | 00c77bd7c2c1c3be175a8d3c4dec538d5955a8c3 (patch) | |
tree | 64acf34425c9f914aee25619d05bc3221277b87f | |
parent | 642847b8d08981df77d3a7e82a4b1e503a3067e3 (diff) | |
download | org.eclipse.rap-00c77bd7c2c1c3be175a8d3c4dec538d5955a8c3.tar.gz org.eclipse.rap-00c77bd7c2c1c3be175a8d3c4dec538d5955a8c3.tar.xz org.eclipse.rap-00c77bd7c2c1c3be175a8d3c4dec538d5955a8c3.zip |
Check device when running dispose execs
When Display#dispose is called during disposal (which is illegal), we
run into an exception in the Synchronizer.
We should rather fail fast and throw an SWT exception here.
See bug 389384: Calling Display#dispose() during disposal of the display
should throw SWT exception
https://bugs.eclipse.org/bugs/show_bug.cgi?id=389384
-rw-r--r-- | bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java | 1 | ||||
-rw-r--r-- | tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java | 19 |
2 files changed, 20 insertions, 0 deletions
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java index ad6cbbb4dd..26aa76130a 100644 --- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java @@ -730,6 +730,7 @@ public class Display extends Device implements Adaptable { } private void runDisposeExecs() { + checkDevice(); if( disposeList != null ) { for( int i = 0; i < disposeList.length; i++ ) { if( disposeList[ i ] != null ) { diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java index 7f5e18b46b..7b3dc7855c 100644 --- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java +++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java @@ -1405,6 +1405,25 @@ public class Display_Test extends TestCase { assertNull( display.getActiveShell() ); } + public void testDisposeFailsWhenInDisposal() { + // See bug 389384 + Fixture.fakePhase( PhaseId.PROCESS_ACTION ); + final Display display = new Display(); + Shell shell = new Shell( display ); + shell.addDisposeListener( new DisposeListener() { + public void widgetDisposed( DisposeEvent event ) { + display.dispose(); + } + } ); + + try { + display.dispose(); + fail(); + } catch( SWTException exception ) { + assertEquals( "Device is disposed", exception.getMessage() ); + } + } + private static void setCursorLocation( Display display, int x, int y ) { IDisplayAdapter adapter = display.getAdapter( IDisplayAdapter.class ); adapter.setCursorLocation( x, y ); |