Bug 58985 [Dialogs] WizardDialog.getButton( IDialogConstants.CANCLE_ID ) always returns null
Here's a test case for this bug. Watch the stdout of the program. --WizardDialogBug import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class WizardDialogBug { public static void main(String[] args) { WizardDialogBug wizardDialogBug = new WizardDialogBug(); wizardDialogBug.run(); } public void run() { Display display = new Display(); Shell shell = new Shell( display, SWT.NONE ); TestWizard wizard = new TestWizard(); TestWizardDialog dialog = new TestWizardDialog( shell, wizard ); dialog.setBlockOnOpen( false ); dialog.open(); while( !shell.isDisposed() ) if( !display.readAndDispatch() ) display.sleep(); display.dispose(); } // test WizardPage public class TestWizardPage extends WizardPage { public TestWizardPage() { super( "TestWizardPage" ); } public void createControl(Composite parent) { Button b = new Button( parent, SWT.PUSH ); b.setText( "Button" ); setControl( b ); } } // test Wizard public class TestWizard extends Wizard { public TestWizard() { super(); setWindowTitle( "TestWizard" ); } public void addPages() { addPage( new TestWizardPage() ); } public boolean performFinish() { return false; } } // test WizardDialog public class TestWizardDialog extends WizardDialog { public TestWizardDialog( Shell shell, IWizard wizard ) { super( shell, wizard ); } public int open() { int rc = super.open(); // by now, all controls should have been created; System.out.println( getButton( IDialogConstants.FINISH_ID ) ); System.out.println( getButton( IDialogConstants.CANCEL_ID ) ); return rc; } } }
bundles/org.eclipse.jface/src/org/eclipse/jface/wizard/WizardDialog.java
marginHeight = mh;
			minimumWidth = minW;
			minimumHeight = minH;
		}
		/* (non-Javadoc)
		 * Method declared on Layout.
		 */
		public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
			if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
				return new Point(wHint, hHint);
			Point result = null;
			Control[] children = composite.getChildren();
			if (children.length > 0) {
				result = new Point(0, 0);
				for (int i = 0; i < children.length; i++) {
					Point cp = children[i].computeSize(wHint, hHint, force);
					result.x = Math.max(result.x, cp.x);
					result.y = Math.max(result.y, cp.y);
				}
				result.x = result.x + 2 * marginWidth;
				result.y = result.y + 2 * marginHeight;
			} else {
				Rectangle rect = composite.getClientArea();
				result = new Point(rect.width, rect.height);
			}
			result.x = Math.max(result.x, minimumWidth);
			result.y = Math.max(result.y, minimumHeight);
			if (wHint != SWT.DEFAULT)
				result.x = wHint;
			if (hHint != SWT.DEFAULT)