Bug 45811 [Dialogs] Problematic behavior of WorkbenchPreferenceDialog.setShellSize()
I20031023 MacOS X 10.3 - in Panther open Window > Preferences > Ant > Editor Observe: all hell breaks loose... I had to restart my machine and lost work! Two problems here: - a width of 12902 and a height of 16909 is passed to WorkbenchPreferenceDialog.setShellSize() (why this is the case needs further investigation) - however, JavaDoc of setShellSize states: "Changes the shell size to the given size, ensuring that it is no larger than the display bounds" the implementation is: private void setShellSize(int width, int height) { getShell().setSize(width, height); constrainShellSize(); } I think it doesn't make much sense to first set the Shell's size to a bogus value and then constrain its size to something sensible.
bundles/org.eclipse.jface/src/org/eclipse/jface/preference/PreferenceDialog.java
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
/**
 * A preference dialog is a hierarchical presentation of preference
 * pages.  Each page is represented by a node in the tree shown
 * on the left hand side of the dialog; when a node is selected, the
 * corresponding page is shown on the right hand side.
 */
public class PreferenceDialog extends Dialog implements IPreferencePageContainer {
	/**
	 * Layout for the page container.
	 *
	 */
	private class PageLayout extends Layout {
		public Point computeSize(Composite composite, int wHint, int hHint, boolean force) {
			if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
				return new Point(wHint, hHint);
			int x = minimumPageSize.x;
			int y = minimumPageSize.y;
			Control[] children = composite.getChildren();
			for (int i = 0; i < children.length; i++) {
				Point size = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, force);
				x = Math.max(x, size.x);