1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

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

This commit is contained in:
Andrew Gvozdev 2011-12-31 13:31:55 -05:00
parent 51bcd20951
commit 96c0441f69

View file

@ -228,6 +228,18 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
}
}
/**
* Refresh the whole view.
*/
private void refreshView() {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
viewer.refresh();
}
});
}
/**
* Refresh the project tree or the project subtree (in case of drill-down adapter) in the view.
*/
@ -269,6 +281,18 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
@Override
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>();
for (IMakeTarget target : event.getTargets()) {
IContainer container = target.getContainer();
@ -288,11 +312,14 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
}
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();
int rcType = rc.getType();
if (rcType == IResource.PROJECT || rcType == IResource.FOLDER) {
affectedProjects.add(rc.getProject());
return;
if (rc.getType() == IResource.FOLDER) {
IProject project = rc.getProject();
if (MakeCorePlugin.getDefault().getTargetManager().hasTargetBuilder(project)) {
affectedProjects.add(project);
return;
}
}
}
@ -359,12 +386,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis
@Override
public void preferenceChange(PreferenceChangeEvent event) {
if (event.getKey().equals(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT)) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
viewer.refresh();
}
});
refreshView();
}
}