1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-30 21:55:31 +02:00

Cleanup handling of editor preference changes

This commit is contained in:
Anton Leherbauer 2006-10-10 09:05:06 +00:00
parent c3fbed60b8
commit ad88076d70
5 changed files with 214 additions and 89 deletions

View file

@ -8,17 +8,16 @@
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.compare;
import org.eclipse.cdt.internal.ui.text.*;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.text.*;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
@ -27,6 +26,12 @@ import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.texteditor.AbstractTextEditor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
import org.eclipse.cdt.internal.ui.text.CTextTools;
import org.eclipse.cdt.internal.ui.text.ICColorConstants;
public class CMergeViewer extends TextMergeViewer {
private static final String TITLE= "CMergeViewer.title"; //$NON-NLS-1$
@ -38,26 +43,32 @@ public class CMergeViewer extends TextMergeViewer {
public CMergeViewer(Composite parent, int styles, CompareConfiguration mp) {
super(parent, styles, mp);
fPreferenceStore= CUIPlugin.getDefault().getCombinedPreferenceStore();
if (fPreferenceStore != null) {
fPreferenceChangeListener= new IPropertyChangeListener() {
IPreferenceStore store = getPreferenceStore();
fUseSystemColors= store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
if (! fUseSystemColors) {
RGB bg= createColor(store, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
setBackgroundColor(bg);
RGB fg= createColor(store, ICColorConstants.C_DEFAULT);
setForegroundColor(fg);
}
}
private IPreferenceStore getPreferenceStore() {
if (fPreferenceStore == null) {
fPreferenceStore= CUIPlugin.getDefault().getCombinedPreferenceStore();
fPreferenceChangeListener= new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
handlePropertyChange(event);
}
};
fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);
}
fUseSystemColors= fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
if (! fUseSystemColors) {
RGB bg= createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
setBackgroundColor(bg);
RGB fg= createColor(fPreferenceStore, ICColorConstants.C_DEFAULT);
setForegroundColor(fg);
}
return fPreferenceStore;
}
protected void handleDispose(DisposeEvent event) {
if (fPreferenceChangeListener != null) {
fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);
@ -97,8 +108,8 @@ public class CMergeViewer extends TextMergeViewer {
}
}
if (getSourceViewerConfiguration().affectsBehavior(event)) {
getSourceViewerConfiguration().adaptToPreferenceChange(event);
if (fSourceViewerConfiguration != null && fSourceViewerConfiguration.affectsTextPresentation(event)) {
getSourceViewerConfiguration().handlePropertyChangeEvent(event);
invalidateTextPresentation();
}
}
@ -118,12 +129,8 @@ public class CMergeViewer extends TextMergeViewer {
private CSourceViewerConfiguration getSourceViewerConfiguration() {
if (fSourceViewerConfiguration == null) {
CTextTools tools= CUIPlugin.getDefault().getTextTools();
fSourceViewerConfiguration = new CSourceViewerConfiguration(tools, null) {
public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
return IDocumentExtension3.DEFAULT_PARTITIONING;
}
};
IPreferenceStore store = getPreferenceStore();
fSourceViewerConfiguration = new CSourceViewerConfiguration(tools.getColorManager(), store, null, null);
}
return fSourceViewerConfiguration;
}

View file

@ -131,6 +131,7 @@ import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.ui.part.IShowInSource;
import org.eclipse.ui.part.IShowInTargetList;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
import org.eclipse.ui.texteditor.ContentAssistAction;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.IEditorStatusLine;
@ -217,7 +218,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
private boolean fIgnoreTextConverters= false;
public AdaptedSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler,
boolean showAnnotationsOverview, int styles) {
boolean showAnnotationsOverview, int styles, IPreferenceStore store) {
super(parent, verticalRuler, overviewRuler, showAnnotationsOverview, styles);
}
@ -305,11 +306,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
if (prefixes != null && prefixes.length > 0)
setIndentPrefixes(prefixes, types[i]);
}
StyledText textWidget= getTextWidget();
int tabWidth= configuration.getTabWidth(this);
if (textWidget.getTabs() != tabWidth)
textWidget.setTabs(tabWidth);
}
/*
@ -1601,15 +1597,16 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
* @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#initializeEditor()
*/
protected void initializeEditor() {
IPreferenceStore store= CUIPlugin.getDefault().getCombinedPreferenceStore();
setPreferenceStore(store);
CTextTools textTools = CUIPlugin.getDefault().getTextTools();
setSourceViewerConfiguration(new CSourceViewerConfiguration(textTools, this));
setSourceViewerConfiguration(new CSourceViewerConfiguration(textTools.getColorManager(), store, this, textTools.getDocumentPartitioning()));
setDocumentProvider(CUIPlugin.getDefault().getDocumentProvider());
setEditorContextMenuId("#CEditorContext"); //$NON-NLS-1$
setRulerContextMenuId("#CEditorRulerContext"); //$NON-NLS-1$
setOutlinerContextMenuId("#CEditorOutlinerContext"); //$NON-NLS-1$
setPreferenceStore(CUIPlugin.getDefault().getCombinedPreferenceStore());
fCEditorErrorTickUpdater = new CEditorErrorTickUpdater(this);
}
@ -1731,11 +1728,21 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
* @param event the property change event
*/
protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
String property = event.getProperty();
if (AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH.equals(property)) {
/*
* Ignore tab setting since we rely on the formatter preferences.
* We do this outside the try-finally block to avoid that EDITOR_TAB_WIDTH
* is handled by the sub-class (AbstractDecoratedTextEditor).
*/
return;
}
try {
AdaptedSourceViewer asv = (AdaptedSourceViewer) getSourceViewer();
if (asv != null) {
String property = event.getProperty();
if (CLOSE_BRACKETS.equals(property)) {
fBracketInserter.setCloseBracketsEnabled(getPreferenceStore().getBoolean(property));
@ -1753,11 +1760,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
}
if (SPACES_FOR_TABS.equals(property)) {
SourceViewerConfiguration configuration = getSourceViewerConfiguration();
String[] types = configuration.getConfiguredContentTypes(asv);
for (int i = 0; i < types.length; i++) {
asv.setIndentPrefixes(configuration.getIndentPrefixes(asv, types[i]), types[i]);
}
if (isTabConversionEnabled())
startTabConversion();
else
@ -1768,9 +1770,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
if (PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIERS.equals(property))
updateHoverBehavior();
((CSourceViewerConfiguration)getSourceViewerConfiguration()).handlePropertyChangeEvent(event);
if (PreferenceConstants.EDITOR_SMART_TAB.equals(property)) {
if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SMART_TAB)) {
if (getPreferenceStore().getBoolean(property)) {
setActionActivationCode("IndentOnTab", '\t', -1, SWT.NONE); //$NON-NLS-1$
} else {
removeActionActivationCode("IndentOnTab"); //$NON-NLS-1$
@ -1802,6 +1805,16 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
return;
}
if (DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE.equals(property)
|| DefaultCodeFormatterConstants.FORMATTER_INDENTATION_SIZE.equals(property)
|| DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR.equals(property)) {
StyledText textWidget= asv.getTextWidget();
int tabWidth= getSourceViewerConfiguration().getTabWidth(asv);
if (textWidget.getTabs() != tabWidth)
textWidget.setTabs(tabWidth);
return;
}
if (SemanticHighlightings.affectsEnablement(getPreferenceStore(), event)) {
if (isSemanticHighlightingEnabled()) {
installSemanticHighlighting();
@ -2344,29 +2357,11 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
}
};
fInformationPresenter = new InformationPresenter(
informationControlCreator);
fInformationPresenter = new InformationPresenter(informationControlCreator);
fInformationPresenter.setSizeConstraints(60, 10, true, true);
fInformationPresenter.install(getSourceViewer());
fInformationPresenter
.setDocumentPartitioning(ICPartitions.C_PARTITIONING);
fInformationPresenter.setDocumentPartitioning(ICPartitions.C_PARTITIONING);
ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.search.results"); //$NON-NLS-1$
fProjectionSupport.install();
fProjectionModelUpdater = CUIPlugin.getDefault().getFoldingStructureProviderRegistry().getCurrentFoldingProvider();
if (fProjectionModelUpdater != null)
fProjectionModelUpdater.install(this, projectionViewer);
if (isFoldingEnabled())
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICHelpContextIds.CEDITOR_VIEW);
fEditorSelectionChangedListener = new EditorSelectionChangedListener();
@ -2657,11 +2652,44 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
* @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, org.eclipse.jface.text.source.IVerticalRuler, int)
*/
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
IPreferenceStore store= getPreferenceStore();
ISourceViewer sourceViewer =
new AdaptedSourceViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles);
new AdaptedSourceViewer(parent, ruler, getOverviewRuler(), isOverviewRulerVisible(), styles, store);
CUIHelp.setHelp(this, sourceViewer.getTextWidget(), ICHelpContextIds.CEDITOR_VIEW);
CSourceViewer cSourceViewer= null;
if (sourceViewer instanceof CSourceViewer) {
cSourceViewer= (CSourceViewer) sourceViewer;
}
/*
* This is a performance optimization to reduce the computation of
* the text presentation triggered by {@link #setVisibleDocument(IDocument)}
*/
if (cSourceViewer != null && isFoldingEnabled() && (store == null || !store.getBoolean(PreferenceConstants.EDITOR_SHOW_SEGMENTS)))
cSourceViewer.prepareDelayedProjection();
ProjectionViewer projectionViewer = (ProjectionViewer) sourceViewer;
fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
fProjectionSupport.addSummarizableAnnotationType("org.eclipse.search.results"); //$NON-NLS-1$
fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
public IInformationControl createInformationControl(Shell shell) {
return new SourceViewerInformationControl(shell, SWT.TOOL | SWT.NO_TRIM | getOrientation(), SWT.NONE);
}
});
fProjectionSupport.install();
fProjectionModelUpdater = CUIPlugin.getDefault().getFoldingStructureProviderRegistry().getCurrentFoldingProvider();
if (fProjectionModelUpdater != null)
fProjectionModelUpdater.install(this, projectionViewer);
if (isFoldingEnabled())
projectionViewer.doOperation(ProjectionViewer.TOGGLE);
getSourceViewerDecorationSupport(sourceViewer);
return sourceViewer;
@ -2677,20 +2705,20 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
fOutlinerContextMenuId = menuId;
}
/* (non-Javadoc)
/*
* @see org.eclipse.ui.editors.text.TextEditor#initializeKeyBindingScopes()
*/
protected void initializeKeyBindingScopes() {
setKeyBindingScopes(new String [] { "org.eclipse.cdt.ui.cEditorScope" } ); //$NON-NLS-1$
}
/* (non-Javadoc)
/*
* @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
*/
protected boolean affectsTextPresentation(PropertyChangeEvent event) {
SourceViewerConfiguration configuration = getSourceViewerConfiguration();
if (configuration instanceof CSourceViewerConfiguration) {
return ((CSourceViewerConfiguration)configuration).affectsBehavior(event);
return ((CSourceViewerConfiguration)configuration).affectsTextPresentation(event);
}
return false;
}

View file

@ -19,6 +19,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.text.Assert;
import org.eclipse.jface.text.DocumentCommand;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextPresentationListener;
import org.eclipse.jface.text.Region;
@ -91,6 +92,16 @@ public class CSourceViewer extends ProjectionViewer implements IPropertyChangeLi
*/
private boolean fIsConfigured;
/**
* Whether to delay setting the visual document until the projection has been computed.
* <p>
* Added for performance optimization.
* </p>
* @see #prepareDelayedProjection()
* @since 4.0
*/
private boolean fIsSetVisibleDocumentDelayed;
/**
* Creates new source viewer.
* @param parent
@ -382,7 +393,46 @@ public class CSourceViewer extends ProjectionViewer implements IPropertyChangeLi
fTextPresentationListeners.remove(listener);
fTextPresentationListeners.add(0, listener);
}
/**
* Delays setting the visual document until after the projection has been computed.
* This method must only be called before the document is set on the viewer.
* <p>
* This is a performance optimization to reduce the computation of
* the text presentation triggered by <code>setVisibleDocument(IDocument)</code>.
* </p>
*
* @see #setVisibleDocument(IDocument)
* @since 4.0
*/
void prepareDelayedProjection() {
Assert.isTrue(!fIsSetVisibleDocumentDelayed);
fIsSetVisibleDocumentDelayed= true;
}
/**
* {@inheritDoc}
* <p>
* This is a performance optimization to reduce the computation of
* the text presentation triggered by {@link #setVisibleDocument(IDocument)}
* </p>
* @see #prepareDelayedProjection()
* @since 4.0
*/
protected void setVisibleDocument(IDocument document) {
if (fIsSetVisibleDocumentDelayed) {
fIsSetVisibleDocumentDelayed= false;
IDocument previous= getVisibleDocument();
enableProjection(); // will set the visible document if anything is folded
IDocument current= getVisibleDocument();
// if the visible document was not replaced, continue as usual
if (current != null && current != previous)
return;
}
super.setVisibleDocument(document);
}
/**
* {@inheritDoc}
* <p>

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -8,6 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
* Sergey Prigogin, Google
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text;
@ -53,7 +54,7 @@ public class SimpleCSourceViewerConfiguration extends CSourceViewerConfiguration
}
/*
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
* @see SourceViewerConfiguration#getAutoEditStrategies(ISourceViewer, String)
*/
public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
return null;
@ -119,23 +120,16 @@ public class SimpleCSourceViewerConfiguration extends CSourceViewerConfiguration
}
/*
* @see org.eclipse.cdt.ui.text.CSourceViewerConfiguration#getOutlinePresenter(org.eclipse.jface.text.source.ISourceViewer, boolean)
*/
public IInformationPresenter getOutlinePresenter(ISourceViewer sourceViewer, boolean doCodeResolve) {
return null;
}
/*
* @see org.eclipse.cdt.ui.text.CSourceViewerConfiguration#getHierarchyPresenter(org.eclipse.jface.text.source.ISourceViewer, boolean)
*/
public IInformationPresenter getHierarchyPresenter(ISourceViewer sourceViewer, boolean doCodeResolve) {
return null;
}
/*
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getHyperlinkDetectors(org.eclipse.jface.text.source.ISourceViewer)
* @see SourceViewerConfiguration#getHyperlinkDetectors(ISourceViewer)
*/
public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
return null;
}
/*
* @see CSourceViewerConfiguration#getOutlinePresenter(ISourceViewer)
*/
public IInformationPresenter getOutlinePresenter(ISourceViewer sourceViewer) {
return null;
}
}

View file

@ -7,12 +7,13 @@
*
* Contributors:
* QNX Software Systems - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text.c.hover;
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControl;
@ -38,6 +39,13 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
import org.eclipse.cdt.internal.ui.text.CTextTools;
import org.eclipse.cdt.internal.ui.text.SimpleCSourceViewerConfiguration;
/**
* SourceViewerInformationControl
* Source viewer based implementation of <code>IInformationControl</code>.
@ -72,6 +80,16 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
* @since 3.0
*/
private Font fStatusTextFont;
/**
* The width size constraint.
* @since 4.0
*/
private int fMaxWidth= SWT.DEFAULT;
/**
* The height size constraint.
* @since 4.0
*/
private int fMaxHeight= SWT.DEFAULT;
/**
* Creates a default information control with the given shell as parent. The given
@ -128,9 +146,10 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
}
// Source viewer
//IPreferenceStore store= CUIPlugin.getDefault().getCombinedPreferenceStore();
fViewer= new SourceViewer(composite, null, null, false, style);
fViewer.configure(new CSourceViewerConfiguration(CUIPlugin.getDefault().getTextTools(), null));
IPreferenceStore store= CUIPlugin.getDefault().getCombinedPreferenceStore();
fViewer= new CSourceViewer(composite, null, null, false, style, store);
CTextTools tools= CUIPlugin.getDefault().getTextTools();
fViewer.configure(new SimpleCSourceViewerConfiguration(tools.getColorManager(), store, null, tools.getDocumentPartitioning(), false));
fViewer.setEditable(false);
fText= fViewer.getTextWidget();
@ -138,7 +157,9 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
fText.setLayoutData(gd);
fText.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
fText.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
initializeFont();
fText.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
@ -229,6 +250,17 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
this(parent, SWT.NONE, statusFieldText);
}
/**
* Initialize the font to the editor font.
*
* @since 4.0
*/
private void initializeFont() {
Font font= JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT);
StyledText styledText= getViewer().getTextWidget();
styledText.setFont(font);
}
/*
* @see org.eclipse.jface.text.IInformationControlExtension2#setInput(java.lang.Object)
*/
@ -315,14 +347,28 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
* @see IInformationControl#setSizeConstraints(int, int)
*/
public void setSizeConstraints(int maxWidth, int maxHeight) {
maxWidth= maxHeight;
fMaxWidth= maxWidth;
fMaxHeight= maxHeight;
}
/*
* @see IInformationControl#computeSizeHint()
*/
public Point computeSizeHint() {
return fShell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// compute the preferred size
int x= SWT.DEFAULT;
int y= SWT.DEFAULT;
Point size= fShell.computeSize(x, y);
if (size.x > fMaxWidth)
x= fMaxWidth;
if (size.y > fMaxHeight)
y= fMaxHeight;
// recompute using the constraints if the preferred size is larger than the constraints
if (x != SWT.DEFAULT || y != SWT.DEFAULT)
size= fShell.computeSize(x, y, false);
return size;
}
/*