1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-16 20:55:44 +02:00

Bug 367559: better handling of project add/remove/open/close

This commit is contained in:
Andrew Gvozdev 2011-12-31 13:40:24 -05:00
parent 994134f660
commit 6198685173

View file

@ -222,6 +222,17 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} }
} }
/**
* Refresh the whole view.
*/
private void refreshView() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
viewer.refresh();
}
});
}
/** /**
* Refresh the project tree or the project subtree (in case of drill-down adapter) in the view. * Refresh the project tree or the project subtree (in case of drill-down adapter) in the view.
*/ */
@ -261,6 +272,18 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} }
public void targetChanged(MakeTargetEvent event) { public void targetChanged(MakeTargetEvent event) {
// Additions/removal of projects. Only notifications for projects having applicable builder come here.
int type = event.getType();
if (type == MakeTargetEvent.PROJECT_ADDED || type == MakeTargetEvent.PROJECT_REMOVED) {
refreshView();
return;
}
IMakeTarget[] targets = event.getTargets();
if (targets == null) {
return;
}
Set<IProject> affectedProjects = new HashSet<IProject>(); Set<IProject> affectedProjects = new HashSet<IProject>();
for (IMakeTarget target : event.getTargets()) { for (IMakeTarget target : event.getTargets()) {
IContainer container = target.getContainer(); IContainer container = target.getContainer();
@ -280,11 +303,14 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
} }
for (IResourceDelta d : delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.REMOVED)) { for (IResourceDelta d : delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.REMOVED)) {
// handle folders only, additions/removal of projects are dealt with in #targetChanged(MakeTargetEvent)
IResource rc = d.getResource(); IResource rc = d.getResource();
int rcType = rc.getType(); if (rc.getType() == IResource.FOLDER) {
if (rcType == IResource.PROJECT || rcType == IResource.FOLDER) { IProject project = rc.getProject();
affectedProjects.add(rc.getProject()); if (MakeCorePlugin.getDefault().getTargetManager().hasTargetBuilder(project)) {
return; affectedProjects.add(project);
return;
}
} }
} }
@ -348,11 +374,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
*/ */
public void preferenceChange(PreferenceChangeEvent event) { public void preferenceChange(PreferenceChangeEvent event) {
if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) { if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) {
Display.getDefault().asyncExec(new Runnable() { refreshView();
public void run() {
viewer.refresh();
}
});
} }
} }