Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Wright2006-01-27 20:39:31 +0000
committerDarin Wright2006-01-27 20:39:31 +0000
commit80b7338679ada68958a6ccca84f4cf49b7d88442 (patch)
treed1a925f6317eb91619585f99b774b2b640a24438
parent7a65dc8be070079cdcd036f5bed6145bf07cf49f (diff)
downloadeclipse.platform.debug-80b7338679ada68958a6ccca84f4cf49b7d88442.tar.gz
eclipse.platform.debug-80b7338679ada68958a6ccca84f4cf49b7d88442.tar.xz
eclipse.platform.debug-80b7338679ada68958a6ccca84f4cf49b7d88442.zip
Bug 124160 - step actions become disabled
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java63
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewUpdatePolicy.java18
2 files changed, 47 insertions, 34 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java
index c69be7b7e..d363f2404 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultUpdatePolicy.java
@@ -24,9 +24,15 @@ import org.eclipse.debug.internal.ui.viewers.TreeSelection;
* @since 3.2
*/
public class DefaultUpdatePolicy extends AbstractUpdatePolicy implements IModelChangedListener {
+
+ // cache of latest tree path for a node
+ private TreePath fTreePath;
+ private IModelDelta fNode;
public void modelChanged(IModelDelta delta) {
updateNodes(new IModelDelta[] { delta });
+ fTreePath = null;
+ fNode = null;
}
protected void updateNodes(IModelDelta[] nodes) {
@@ -39,27 +45,26 @@ public class DefaultUpdatePolicy extends AbstractUpdatePolicy implements IModelC
IModelDelta node = nodes[i];
int flags = node.getFlags();
- TreePath treePath = getTreePath(node);
if ((flags & IModelDelta.ADDED) != 0) {
- handleAdd(viewer, treePath);
+ handleAdd(viewer, node);
}
if ((flags & IModelDelta.REMOVED) != 0) {
- handleRemove(viewer, treePath);
+ handleRemove(viewer, node);
}
if ((flags & IModelDelta.CHANGED) != 0) {
- handleChange(viewer, node.getElement());
+ handleChange(viewer, node);
}
if ((flags & IModelDelta.CONTENT) != 0) {
- handleContent(viewer, node.getElement());
+ handleContent(viewer, node);
}
if ((flags & IModelDelta.EXPAND) != 0) {
- handleExpand(viewer, treePath);
+ handleExpand(viewer, node);
}
if ((flags & IModelDelta.SELECT) != 0) {
- handleSelect(viewer, treePath);
+ handleSelect(viewer, node);
}
if ((flags & IModelDelta.STATE) != 0) {
- handleState(viewer, node.getElement());
+ handleState(viewer, node);
}
if ((flags & IModelDelta.INSERTED) != 0) {
// TODO
@@ -72,43 +77,47 @@ public class DefaultUpdatePolicy extends AbstractUpdatePolicy implements IModelC
}
}
- protected void handleChange(AsynchronousTreeViewer viewer, Object element) {
+ protected void handleChange(AsynchronousTreeViewer viewer, IModelDelta delta) {
//do nothing...
}
- protected void handleState(AsynchronousTreeViewer viewer, Object element) {
- viewer.update(element);
+ protected void handleState(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.update(delta.getElement());
}
- protected void handleSelect(AsynchronousTreeViewer viewer, TreePath treePath) {
- viewer.setSelection(new TreeSelection(treePath));
+ protected void handleSelect(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.setSelection(new TreeSelection(getTreePath(delta)));
}
- protected void handleExpand(AsynchronousTreeViewer viewer, TreePath treePath) {
- viewer.expand(new TreeSelection(treePath));
+ protected void handleExpand(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.expand(new TreeSelection(getTreePath(delta)));
}
- protected void handleContent(AsynchronousTreeViewer viewer, Object element) {
- viewer.refresh(element);
+ protected void handleContent(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.refresh(delta.getElement());
}
- protected void handleRemove(AsynchronousTreeViewer viewer, TreePath treePath) {
- viewer.remove(treePath);
+ protected void handleRemove(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.remove(getTreePath(delta));
}
- protected void handleAdd(AsynchronousTreeViewer viewer, TreePath treePath) {
- viewer.add(treePath);
+ protected void handleAdd(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ viewer.add(getTreePath(delta));
}
protected TreePath getTreePath(IModelDelta node) {
- ArrayList list = new ArrayList();
- list.add(0, node.getElement());
- while (node.getParent() != null) {
- node = node.getParent();
+ if (node != fNode) {
+ ArrayList list = new ArrayList();
list.add(0, node.getElement());
- }
+ while (node.getParent() != null) {
+ node = node.getParent();
+ list.add(0, node.getElement());
+ }
- return new TreePath(list.toArray());
+ fTreePath = new TreePath(list.toArray());
+ fNode = node;
+ }
+ return fTreePath;
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewUpdatePolicy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewUpdatePolicy.java
index c4bc87e90..ad09300ee 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewUpdatePolicy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewUpdatePolicy.java
@@ -11,6 +11,7 @@
package org.eclipse.debug.internal.ui.views.launch;
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
+import org.eclipse.debug.internal.ui.viewers.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.update.DefaultUpdatePolicy;
/**
@@ -33,12 +34,15 @@ public class LaunchViewUpdatePolicy extends DefaultUpdatePolicy {
fView = null;
}
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.viewers.update.DefaultUpdatePolicy#handleState(org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer, java.lang.Object)
- */
- protected void handleState(AsynchronousTreeViewer viewer, Object element) {
- super.handleState(viewer, element);
- fView.possibleContextChange(element);
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.update.DefaultUpdatePolicy#handleState(org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer, org.eclipse.debug.internal.ui.viewers.IModelDelta)
+ */
+ protected void handleState(AsynchronousTreeViewer viewer, IModelDelta delta) {
+ super.handleState(viewer, delta);
+ // only context change if not already selected
+ if ((delta.getFlags() & IModelDelta.SELECT) == 0) {
+ fView.possibleContextChange(delta.getElement());
+ }
}
-
+
}

Back to the top