Skip to content

Commit 71d63c4

Browse files
EcljpseB0Tjukzi
authored andcommitted
fix TerminateAllAction: enabled & terminate #1181
Action was only enabled if any launch was selected - but even if that was already terminated. Did only terminate launches in the context. #1181
1 parent a4dc956 commit 71d63c4

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAllAction.java

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
*******************************************************************************/
1414
package org.eclipse.debug.internal.ui.commands.actions;
1515

16+
import java.util.Arrays;
17+
18+
import org.eclipse.core.runtime.ILog;
19+
import org.eclipse.core.runtime.Status;
20+
import org.eclipse.debug.core.DebugException;
1621
import org.eclipse.debug.core.DebugPlugin;
1722
import org.eclipse.debug.core.ILaunch;
1823
import org.eclipse.debug.core.ILaunchManager;
@@ -22,9 +27,11 @@
2227
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
2328
import org.eclipse.debug.internal.ui.actions.ActionMessages;
2429
import org.eclipse.debug.ui.actions.DebugCommandAction;
30+
import org.eclipse.debug.ui.contexts.DebugContextEvent;
2531
import org.eclipse.jface.resource.ImageDescriptor;
2632
import org.eclipse.jface.viewers.ISelection;
2733
import org.eclipse.jface.viewers.StructuredSelection;
34+
import org.eclipse.swt.widgets.Event;
2835
import org.eclipse.ui.IWorkbenchPart;
2936
import org.eclipse.ui.IWorkbenchWindow;
3037

@@ -49,9 +56,7 @@ public void dispose() {
4956
private void attachSelfToLaunchManager() {
5057
ILaunchManager launchManager = getLaunchManager();
5158
launchManager.addLaunchListener(this);
52-
// heuristic... rather than updating all the time, just assume there's
53-
// something that's not terminated.
54-
setEnabled(launchManager.getLaunches().length > 0);
59+
setEnabled(canTerminate());
5560
}
5661

5762
private ILaunchManager getLaunchManager() {
@@ -103,12 +108,12 @@ protected Class<ITerminateHandler> getCommandType() {
103108

104109
@Override
105110
public void launchesTerminated(ILaunch[] launches) {
106-
setEnabled(getLaunchManager().getLaunches().length > 0);
111+
setEnabled(canTerminate());
107112
}
108113

109114
@Override
110115
public void launchesAdded(ILaunch[] launches) {
111-
setEnabled(true);
116+
setEnabled(canTerminate());
112117
}
113118

114119
@Override
@@ -117,7 +122,7 @@ public void launchesChanged(ILaunch[] launches) {
117122

118123
@Override
119124
public void launchesRemoved(ILaunch[] launches) {
120-
setEnabled(getLaunchManager().getLaunches().length > 0);
125+
setEnabled(canTerminate());
121126
}
122127

123128
@Override
@@ -136,4 +141,32 @@ public void init(IWorkbenchWindow window) {
136141
super.init(window);
137142
attachSelfToLaunchManager();
138143
}
144+
145+
@Override
146+
protected boolean getInitialEnablement() {
147+
return canTerminate();
148+
}
149+
150+
private boolean canTerminate() {
151+
return Arrays.stream(getLaunchManager().getLaunches()).anyMatch(ILaunch::canTerminate);
152+
}
153+
154+
@Override
155+
public void runWithEvent(Event event) {
156+
for (ILaunch l : getLaunchManager().getLaunches()) {
157+
try {
158+
if (l.canTerminate()) {
159+
l.terminate();
160+
}
161+
} catch (DebugException e) {
162+
ILog.get().log(Status.warning("Unable to terminate launch: " + e.getMessage(), e)); //$NON-NLS-1$
163+
}
164+
}
165+
setEnabled(canTerminate());
166+
}
167+
168+
@Override
169+
public void debugContextChanged(DebugContextEvent event) {
170+
setEnabled(canTerminate());
171+
}
139172
}

0 commit comments

Comments
 (0)