diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java index b133397009e..06d5f0ef584 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.CCorePreferenceConstants; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; @@ -41,6 +42,9 @@ import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.StructuredViewer; @@ -55,7 +59,9 @@ import org.eclipse.swt.widgets.Display; * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ -public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener, IResourceChangeListener, ICProjectDescriptionListener { +public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener, + IResourceChangeListener, ICProjectDescriptionListener, IPreferenceChangeListener { + /** presentation of the content, i.e. for MakeView tree of for BuildTargetDialog table */ protected boolean bFlatten; @@ -224,12 +230,14 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis if (oldWorkspace != newWorkspace) { ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager(); if (oldWorkspace != null) { - oldWorkspace.removeResourceChangeListener(this); + InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(this); mngr.removeCProjectDescriptionListener(this); + oldWorkspace.removeResourceChangeListener(this); } if (newWorkspace != null) { newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE); mngr.addCProjectDescriptionListener(this, CProjectDescriptionEvent.APPLIED); + InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).addPreferenceChangeListener(this); } } } @@ -405,6 +413,21 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis }); } + /** + * {@inheritDoc} + * + * @since 7.1 + */ + public void preferenceChange(PreferenceChangeEvent event) { + if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + viewer.refresh(); + } + }); + } + } + /** * Get source entries for default setting configuration (i.e. configuration shown in UI). */ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/util/CElementBaseLabels.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/util/CElementBaseLabels.java index 005357c149d..c41d877af31 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/util/CElementBaseLabels.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/util/CElementBaseLabels.java @@ -776,7 +776,7 @@ public class CElementBaseLabels { buf.append(container.getPath().makeRelative().toString()); } else { if (CCorePlugin.showSourceRootsAtTopOfProject()) { - buf.append(container.getElementName()); + buf.append(container.getElementName()); } else { String elementName = container.getElementName(); diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index d3801b236df..69f48ff769b 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -80,6 +80,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.framework.BundleContext; import com.ibm.icu.text.MessageFormat; @@ -1309,6 +1310,7 @@ public class CCorePlugin extends Plugin { * @since 5.2 */ public static boolean showSourceRootsAtTopOfProject() { - return getDefault().getPluginPreferences().getBoolean( CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT); + return InstanceScope.INSTANCE.getNode(PLUGIN_ID) + .getBoolean(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT, true); } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/navigator/CNavigatorContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/navigator/CNavigatorContentProvider.java index 5e868e114c0..a9a8047eadc 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/navigator/CNavigatorContentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/navigator/CNavigatorContentProvider.java @@ -23,16 +23,22 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; +import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IMemento; import org.eclipse.ui.navigator.ICommonContentExtensionSite; import org.eclipse.ui.navigator.IPipelinedTreeContentProvider; import org.eclipse.ui.navigator.PipelinedShapeModification; import org.eclipse.ui.navigator.PipelinedViewerUpdate; +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.CCorePreferenceConstants; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICModel; @@ -51,6 +57,7 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I /** The input object as supplied in the call to {@link #inputChanged()} */ private Object fRealInput; private IPropertyChangeListener fPropertyChangeListener; + private IPreferenceChangeListener fPreferenceChangeListener; /* * @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite) @@ -85,6 +92,21 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I } }; CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPropertyChangeListener); + + // Note that this listener listens to CCorePlugin preferences + fPreferenceChangeListener = new IPreferenceChangeListener() { + public void preferenceChange(PreferenceChangeEvent event) { + if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + getViewer().refresh(); + } + }); + } + } + }; + InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).addPreferenceChangeListener(fPreferenceChangeListener); + // TLETODO [CN] use extension state model for view options persistence // fStateModel.addPropertyChangeListener(listener); } @@ -94,6 +116,8 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I */ @Override public void dispose() { + InstanceScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).removePreferenceChangeListener(fPreferenceChangeListener); + CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener); // TLETODO [CN] use extension state model for view options persistence // fStateModel.removePropertyChangeListener(fPropertyChangeListener);