Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.debug.ui/plugin.xml16
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java24
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java5
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties5
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java100
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java118
6 files changed, 170 insertions, 98 deletions
diff --git a/org.eclipse.debug.ui/plugin.xml b/org.eclipse.debug.ui/plugin.xml
index df6f0a92c..213f49597 100644
--- a/org.eclipse.debug.ui/plugin.xml
+++ b/org.eclipse.debug.ui/plugin.xml
@@ -2903,5 +2903,21 @@ M4 = Platform-specific fourth key
</colorOverride>
</theme>
</extension>
+ <extension
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.eclipse.debug.internal.ui.views.launch.TerminateAndRemoveHandler"
+ commandId="org.eclipse.ui.edit.delete">
+ <activeWhen>
+ <iterate
+ ifEmpty="false"
+ operator="and">
+ <adapt
+ type="org.eclipse.debug.core.model.ITerminate">
+ </adapt>
+ </iterate>
+ </activeWhen>
+ </handler>
+ </extension>
</plugin>
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 afcfebc40..5bde43af2 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2009 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -19,8 +19,14 @@ import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
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.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
/**
* Terminate and remove action.
@@ -71,6 +77,20 @@ public class TerminateAndRemoveAction extends DebugCommandAction {
}
}
}
-
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.ui.actions.DebugCommandAction#runWithEvent(org.eclipse.swt.widgets.Event)
+ */
+ public void runWithEvent(Event event) {
+ // prompt if invoked via keyboard shortcut (don't prompt when menu is used)
+ if (event.widget instanceof Tree) {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null) {
+ if (!MessageDialog.openQuestion(window.getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_1, DebugUIViewsMessages.LaunchView_Terminate_and_remove_selected__2)) {
+ return;
+ }
+ }
+ }
+ super.runWithEvent(event);
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java
index 599a12b8b..1771f15a4 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -19,9 +19,6 @@ public class DebugUIViewsMessages extends NLS {
public static String LaunchView_Exception_occurred_opening_editor_for_debugger__2;
public static String LaunchView_Terminate_and_Remove_1;
public static String LaunchView_Terminate_and_remove_selected__2;
- public static String LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3;
- public static String LaunchView_Terminate_and_Remove_4;
- public static String LaunchView_Terminate_and_remove_failed_5;
public static String SourceNotFoundEditorInput_Source_Not_Found_1;
public static String SourceNotFoundEditorInput_Source_not_found_for__0__2;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
index 9eacb2459..eb51f0955 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
+# Copyright (c) 2000, 2010 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@@ -13,9 +13,6 @@ LaunchView_Error_1=Error
LaunchView_Exception_occurred_opening_editor_for_debugger__2=Exception occurred opening editor for debugger.
LaunchView_Terminate_and_Remove_1=Terminate and Remove
LaunchView_Terminate_and_remove_selected__2=Terminate and remove selected?
-LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3=Exceptions occurred attempting to terminate and remove
-LaunchView_Terminate_and_Remove_4=Terminate and Remove
-LaunchView_Terminate_and_remove_failed_5=Terminate and remove failed
SourceNotFoundEditorInput_Source_Not_Found_1=Source Not Found
SourceNotFoundEditorInput_Source_not_found_for__0__2=Source not found for {0}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
index b17575779..adf60b1ee 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java
@@ -19,23 +19,19 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
-import java.util.Iterator;
+import org.eclipse.core.commands.IHandler2;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.commands.IRestartHandler;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.model.IStackFrame;
-import org.eclipse.debug.core.model.ITerminate;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.DelegatingModelPresentation;
import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
@@ -68,7 +64,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.debug.internal.ui.views.DebugModelPresentationContext;
-import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages;
import org.eclipse.debug.ui.AbstractDebugView;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugModelPresentation;
@@ -84,7 +79,7 @@ import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.commands.ActionHandler;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ISelection;
@@ -99,8 +94,6 @@ import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IActionBars;
@@ -225,6 +218,12 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
*/
private boolean fBreadcrumbDropDownAutoExpand = false;
+ /**
+ * Terminate and remove handler
+ * @since 3.6
+ */
+ IHandler2 fTARHandler = null;
+
/**
* Page-book page for the breadcrumb viewer. This page is activated in
* Debug view when the height of the view is reduced to just one line.
@@ -506,7 +505,10 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
addCapabilityAction(new StepOverCommandAction(), STEP_OVER);
addCapabilityAction(new StepIntoCommandAction(), STEP_INTO);
addCapabilityAction(new DropToFrameCommandAction(), DROP_TO_FRAME);
- addCapabilityAction(new TerminateAndRemoveAction(), TERMINATE_AND_REMOVE);
+ TerminateAndRemoveAction tar = new TerminateAndRemoveAction();
+ addCapabilityAction(tar, TERMINATE_AND_REMOVE);
+ // also create a handler for this action
+ fTARHandler = new ActionHandler(tar);
addCapabilityAction(new TerminateAndRelaunchAction(), TERMINATE_AND_RELAUNCH);
addCapabilityAction(new RestartCommandAction(), RESTART);
addCapabilityAction(new TerminateAllAction(), TERMINATE_ALL);
@@ -780,13 +782,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
fPresentationContext);
viewer.addSelectionChangedListener(fTreeViewerSelectionChangedListener);
- viewer.getControl().addKeyListener(new KeyAdapter() {
- public void keyPressed(KeyEvent event) {
- if (event.character == SWT.DEL && event.stateMask == 0) {
- handleDeleteKeyPressed();
- }
- }
- });
viewer.addViewerUpdateListener(this);
viewer.setInput(DebugPlugin.getDefault().getLaunchManager());
@@ -795,77 +790,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi
return viewer;
}
-
- private void handleDeleteKeyPressed() {
- IStructuredSelection selection= (IStructuredSelection) getViewer().getSelection();
- Iterator iter= selection.iterator();
- Object item;
- boolean itemsToTerminate= false;
- ITerminate terminable;
- while (iter.hasNext()) {
- item= iter.next();
- if (item instanceof ITerminate) {
- terminable= (ITerminate) item;
- if (terminable.canTerminate() && !terminable.isTerminated()) {
- itemsToTerminate= true;
- break;
- }
- }
- }
- if (itemsToTerminate) {
- // Prompt the user to proceed with termination
- if (!MessageDialog.openQuestion(getSite().getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_1, DebugUIViewsMessages.LaunchView_Terminate_and_remove_selected__2)) {
- return;
- }
- }
- MultiStatus status= new MultiStatus(DebugUIPlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, DebugUIViewsMessages.LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3, null);
- iter= selection.iterator();
- while (iter.hasNext()) {
- try {
- terminateAndRemove(iter.next());
- } catch (DebugException exception) {
- status.merge(exception.getStatus());
- }
- }
- if (!status.isOK()) {
- IWorkbenchWindow window= DebugUIPlugin.getActiveWorkbenchWindow();
- if (window != null) {
- DebugUIPlugin.errorDialog(window.getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_4, DebugUIViewsMessages.LaunchView_Terminate_and_remove_failed_5, status);
- } else {
- DebugUIPlugin.log(status);
- }
- }
- }
-
- /**
- * Terminates and removes the given element from the launch manager
- */
- public static void terminateAndRemove(Object element) throws DebugException {
- ILaunch launch = DebugUIPlugin.getLaunch(element);
- ITerminate terminable = launch;
- if (terminable == null) {
- if (element instanceof ITerminate) {
- terminable = (ITerminate) element;
- }
- }
- if (terminable == null) {
- return;
- }
- if (!(terminable.canTerminate() || terminable.isTerminated())) {
- // Don't try to terminate or remove attached launches
- return;
- }
- try {
- if (!terminable.isTerminated()) {
- terminable.terminate();
- }
- } finally {
- if (launch != null) {
- ILaunchManager lManager= DebugPlugin.getDefault().getLaunchManager();
- lManager.removeLaunch(launch);
- }
- }
- }
private void commonInit(IViewSite site) {
site.getPage().addPartListener((IPartListener2) this);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java
new file mode 100644
index 000000000..1fa0df48b
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.views.launch;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler2;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Handler for terminate and remove. See bug 290219.
+ *
+ * @since 3.6
+ */
+public class TerminateAndRemoveHandler implements IHandler2 {
+
+ /**
+ * Returns the handler from the debug view, or <code>null</code> if none.
+ *
+ * @return handler or <code>null</code>
+ */
+ protected IHandler2 getDelegate() {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null) {
+ IViewReference reference = window.getActivePage().findViewReference(IDebugUIConstants.ID_DEBUG_VIEW);
+ if (reference != null) {
+ IViewPart view = reference.getView(false);
+ if (view instanceof LaunchView) {
+ return ((LaunchView)view).fTARHandler;
+ }
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ return delegate.execute(event);
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core.commands.IHandlerListener)
+ */
+ public void addHandlerListener(IHandlerListener handlerListener) {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ delegate.addHandlerListener(handlerListener);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#dispose()
+ */
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#isEnabled()
+ */
+ public boolean isEnabled() {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ return delegate.isEnabled();
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#isHandled()
+ */
+ public boolean isHandled() {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ return delegate.isHandled();
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse.core.commands.IHandlerListener)
+ */
+ public void removeHandlerListener(IHandlerListener handlerListener) {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ delegate.removeHandlerListener(handlerListener);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler2#setEnabled(java.lang.Object)
+ */
+ public void setEnabled(Object evaluationContext) {
+ IHandler2 delegate = getDelegate();
+ if (delegate != null) {
+ delegate.setEnabled(evaluationContext);
+ }
+ }
+
+}

Back to the top