diff options
author | Pawel Piech | 2011-09-06 21:16:45 +0000 |
---|---|---|
committer | Pawel Piech | 2011-09-06 21:16:45 +0000 |
commit | 7a5ccc300f97a6f23b4d515091009df10d385a5b (patch) | |
tree | cb4c3ab19c443249839caa98a1f470c455befbaa /org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions | |
parent | 8dfa641ff497d7f205952186bf5a49fb0c04f7bd (diff) | |
download | eclipse.platform.debug-7a5ccc300f97a6f23b4d515091009df10d385a5b.tar.gz eclipse.platform.debug-7a5ccc300f97a6f23b4d515091009df10d385a5b.tar.xz eclipse.platform.debug-7a5ccc300f97a6f23b4d515091009df10d385a5b.zip |
Bug 324959 - Terminate and Remove doesn't always terminate (but always removes)
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java index 2c85d09b4..3155711c3 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java @@ -22,6 +22,7 @@ import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.actions.ActionMessages; import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages; import org.eclipse.debug.ui.actions.DebugCommandAction; +import org.eclipse.debug.ui.contexts.DebugContextEvent; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; @@ -81,6 +82,37 @@ public class TerminateAndRemoveAction extends DebugCommandAction { return ITerminateHandler.class; } + public void debugContextChanged(DebugContextEvent event) { + boolean isAllTerminated = true; + ISelection context = event.getContext(); + if (context instanceof IStructuredSelection) { + Object[] elements = ((IStructuredSelection)context).toArray(); + for (int i = 0; i < elements.length; i++) { + if (!isTerminated(elements[i])) { + isAllTerminated = false; + break; + } + } + } + // IF all elements are terminated, we don't need to query the terminate handler, just + // enable the action, which whill just remove the terminated launches (bug 324959). + fCanTerminate = !isAllTerminated; + if (isAllTerminated) { + setEnabled(true); + } else { + super.debugContextChanged(event); + } + } + + protected boolean isTerminated(Object element) { + ILaunch launch = DebugUIPlugin.getLaunch(element); + if (launch != null) { + return launch.isTerminated(); + } + return false; + } + + protected void postExecute(IRequest request, Object[] targets) { IStatus status = request.getStatus(); if(status == null || status.isOK()) { @@ -93,17 +125,6 @@ public class TerminateAndRemoveAction extends DebugCommandAction { } /* (non-Javadoc) - * @see org.eclipse.debug.ui.actions.DebugCommandAction#setEnabled(boolean) - */ - public void setEnabled(boolean enabled) { - synchronized (this) { - fCanTerminate = enabled; - } - // action is always enabled... just depends whether terminate is required first. - super.setEnabled(true); - } - - /* (non-Javadoc) * @see org.eclipse.debug.ui.actions.DebugCommandAction#runWithEvent(org.eclipse.swt.widgets.Event) */ public void runWithEvent(Event event) { |