mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Fix for 184748: Binaries container not updated in Project Explorer
This commit is contained in:
parent
4443451c11
commit
51f0803459
2 changed files with 35 additions and 18 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -37,6 +37,7 @@ import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICModel;
|
import org.eclipse.cdt.core.model.ICModel;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.IParent;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
|
||||||
|
@ -347,24 +348,40 @@ public class CNavigatorContentProvider extends CViewContentProvider implements I
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void postContainerRefresh(final IParent container, final ICProject cproject) {
|
||||||
|
postRefreshable(new RefreshContainer(container, cproject.getProject()));
|
||||||
|
}
|
||||||
protected void postRefresh(final Object element) {
|
protected void postRefresh(final Object element) {
|
||||||
if (element instanceof ICModel) {
|
if (element instanceof ICModel) {
|
||||||
super.postRefresh(fRealInput);
|
super.postRefresh(fRealInput);
|
||||||
return;
|
} else if (element instanceof ICProject) {
|
||||||
}
|
super.postRefresh(((ICProject)element).getProject());
|
||||||
|
} else {
|
||||||
super.postRefresh(element);
|
super.postRefresh(element);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void postAdd(final Object parent, final Object element) {
|
protected void postAdd(final Object parent, final Object element) {
|
||||||
if (parent instanceof ICModel) {
|
if (parent instanceof ICModel) {
|
||||||
super.postAdd(fRealInput, element);
|
super.postAdd(fRealInput, element);
|
||||||
return;
|
} else if (parent instanceof ICProject) {
|
||||||
}
|
super.postAdd(((ICProject)parent).getProject(), element);
|
||||||
|
} else {
|
||||||
super.postAdd(parent, element);
|
super.postAdd(parent, element);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void postRemove(final Object element) {
|
protected void postRemove(final Object element) {
|
||||||
postRefresh(internalGetParent(element));
|
postRefresh(internalGetParent(element));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void postProjectStateChanged(final Object element) {
|
||||||
|
if (element instanceof ICModel) {
|
||||||
|
super.postProjectStateChanged(fRealInput);
|
||||||
|
} else if (element instanceof ICProject) {
|
||||||
|
super.postProjectStateChanged(((ICProject)element).getProject());
|
||||||
|
} else {
|
||||||
|
super.postProjectStateChanged(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2000, 2006 QNX Software Systems and others.
|
* Copyright (c) 2000, 2007 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -300,31 +300,31 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
// We keep track of what we're going to refresh and avoid posting multiple refresh
|
// We keep track of what we're going to refresh and avoid posting multiple refresh
|
||||||
// messages for the same elements. This avoids major performance issues where
|
// messages for the same elements. This avoids major performance issues where
|
||||||
// we update tree views hundreds or thousands of times.
|
// we update tree views hundreds or thousands of times.
|
||||||
interface IRefreshable {
|
protected interface IRefreshable {
|
||||||
public void refresh();
|
public void refresh();
|
||||||
}
|
}
|
||||||
final class RefreshContainer implements IRefreshable {
|
protected final class RefreshContainer implements IRefreshable {
|
||||||
private IParent container;
|
private IParent container;
|
||||||
private ICProject cproject;
|
private Object project;
|
||||||
public RefreshContainer(IParent container, ICProject cproject) {
|
public RefreshContainer(IParent container, Object project) {
|
||||||
this.container = container;
|
this.container = container;
|
||||||
this.cproject = cproject;
|
this.project = project;
|
||||||
}
|
}
|
||||||
public void refresh() {
|
public void refresh() {
|
||||||
if (container.hasChildren()) {
|
if (container.hasChildren()) {
|
||||||
if (fViewer.testFindItem(container) != null) {
|
if (fViewer.testFindItem(container) != null) {
|
||||||
fViewer.refresh(container);
|
fViewer.refresh(container);
|
||||||
} else {
|
} else {
|
||||||
fViewer.refresh(cproject);
|
fViewer.refresh(project);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fViewer.refresh(cproject);
|
fViewer.refresh(project);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (o instanceof RefreshContainer) {
|
if (o instanceof RefreshContainer) {
|
||||||
RefreshContainer c = (RefreshContainer)o;
|
RefreshContainer c = (RefreshContainer)o;
|
||||||
return c.container.equals(container) && c.cproject.equals(cproject);
|
return c.container.equals(container) && c.project.equals(project);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -332,7 +332,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
return container.hashCode()*10903143 + 31181;
|
return container.hashCode()*10903143 + 31181;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final class RefreshElement implements IRefreshable {
|
protected final class RefreshElement implements IRefreshable {
|
||||||
private Object element;
|
private Object element;
|
||||||
public RefreshElement(Object element) {
|
public RefreshElement(Object element) {
|
||||||
this.element = element;
|
this.element = element;
|
||||||
|
@ -362,7 +362,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class RefreshProjectState implements IRefreshable {
|
protected final class RefreshProjectState implements IRefreshable {
|
||||||
private Object element;
|
private Object element;
|
||||||
public RefreshProjectState(Object element) {
|
public RefreshProjectState(Object element) {
|
||||||
this.element = element;
|
this.element = element;
|
||||||
|
@ -391,7 +391,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void postRefresh(final Object element) {
|
protected void postRefresh(final Object element) {
|
||||||
//System.out.println("UI refresh:" + root);
|
//System.out.println("UI refresh:" + element);
|
||||||
postRefreshable(new RefreshElement(element));
|
postRefreshable(new RefreshElement(element));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ public class CElementContentProvider extends BaseCElementContentProvider impleme
|
||||||
postRefreshable(new RefreshProjectState(root));
|
postRefreshable(new RefreshProjectState(root));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void postRefreshable(final IRefreshable r) {
|
protected final void postRefreshable(final IRefreshable r) {
|
||||||
Control ctrl= fViewer.getControl();
|
Control ctrl= fViewer.getControl();
|
||||||
if (ctrl != null && !ctrl.isDisposed()) {
|
if (ctrl != null && !ctrl.isDisposed()) {
|
||||||
if (pendingRefreshes.contains(r))
|
if (pendingRefreshes.contains(r))
|
||||||
|
|
Loading…
Add table
Reference in a new issue