diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java index e881dbc36c9..abf759a80ef 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java @@ -106,15 +106,17 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis } public void renameTarget(IMakeTarget target, String name) throws CoreException { - ProjectTargets projectTargets = projectMap.get(target.getProject()); + MakeTarget makeTarget = (MakeTarget)target; + + ProjectTargets projectTargets = projectMap.get(makeTarget.getProject()); if (projectTargets == null) { - projectTargets = readTargets(target.getProject()); + projectTargets = readTargets(makeTarget.getProject()); } - if (!projectTargets.contains((MakeTarget)target)) { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeMessages.getString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$ + + makeTarget.setName(name); + if (projectTargets.contains(makeTarget)) { + updateTarget(makeTarget); } - ((MakeTarget)target).setName(name); - updateTarget((MakeTarget) target); } public IMakeTarget[] getTargets(IContainer container) throws CoreException { diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/MakeTargetDialog.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/MakeTargetDialog.java index 4582cbe4b10..a6954c025c2 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/MakeTargetDialog.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/MakeTargetDialog.java @@ -471,8 +471,13 @@ public class MakeTargetDialog extends Dialog { protected void okPressed() { IMakeTarget target = fTarget; try { - if (fTarget == null) { - target = fTargetManager.createTarget(fContainer.getProject(), getTargetName(), targetBuildID); + String targetName = getTargetName(); + if (target == null) { + target = fTargetManager.createTarget(fContainer.getProject(), targetName, targetBuildID); + } else { + if (!target.getName().equals(targetName)) { + fTargetManager.renameTarget(target, targetName); + } } target.setStopOnError(isStopOnError()); target.setRunAllBuilders(runAllBuilders()); @@ -506,10 +511,6 @@ public class MakeTargetDialog extends Dialog { if (fTarget == null || !MakeCorePlugin.getDefault().getTargetManager().targetExists(fTarget)) { fTargetManager.addTarget(fContainer, target); - } else { - if (!target.getName().equals(getTargetName())) { - fTargetManager.renameTarget(target, getTargetName()); - } } } catch (CoreException e) { MakeUIPlugin.errorDialog( diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/AddTargetAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/AddTargetAction.java index 8b6b3cf424a..4f2f4ab1ad9 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/AddTargetAction.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/AddTargetAction.java @@ -58,9 +58,11 @@ public class AddTargetAction extends SelectionListenerAction { } private Object getSelectedElement() { - Object element = getStructuredSelection().getFirstElement(); - if (element instanceof IContainer || element instanceof IMakeTarget) { - return element; + if (getStructuredSelection().size()==1) { + Object element = getStructuredSelection().getFirstElement(); + if (element instanceof IContainer || element instanceof IMakeTarget) { + return element; + } } return null; } diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/BuildTargetAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/BuildTargetAction.java index 3f8bc787b91..55f8eeb85ce 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/BuildTargetAction.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/BuildTargetAction.java @@ -30,6 +30,7 @@ public class BuildTargetAction extends SelectionListenerAction { setToolTipText(MakeUIPlugin.getResourceString("BuildTargetAction.tooltip")); //$NON-NLS-1$ MakeUIImages.setImageDescriptors(this, "tool16", MakeUIImages.IMG_TOOLS_MAKE_TARGET_BUILD); //$NON-NLS-1$ + setEnabled(false); } @Override diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java index 3e6054f2dc5..d271dd06922 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java @@ -77,11 +77,11 @@ public class MakeView extends ViewPart { private BuildTargetAction buildTargetAction; private EditTargetAction editTargetAction; private DeleteTargetAction deleteTargetAction; - AddTargetAction addTargetAction; + private AddTargetAction addTargetAction; private CopyTargetAction copyTargetAction; private PasteTargetAction pasteTargetAction; - TreeViewer fViewer; - DrillDownAdapter drillDownAdapter; + private TreeViewer fViewer; + private DrillDownAdapter drillDownAdapter; private Action trimEmptyFolderAction; public MakeView() { diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/PasteTargetAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/PasteTargetAction.java index 8097389bd13..1da2e23235f 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/PasteTargetAction.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/PasteTargetAction.java @@ -11,8 +11,7 @@ package org.eclipse.cdt.make.ui.views; -import java.util.List; - +import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.cdt.make.internal.ui.dnd.FileTransferDropTargetListener; import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransfer; @@ -72,11 +71,7 @@ public class PasteTargetAction extends SelectionListenerAction { return false; } - if (selection.size() == 1 && (selection.getFirstElement() instanceof IContainer)) { - return true; - } - - return false; + return determineDropContainer()!=null; } /** @@ -85,11 +80,10 @@ public class PasteTargetAction extends SelectionListenerAction { */ @Override public void run() { - List resources = getSelectedResources(); - if (resources.size() != 1 || !(resources.get(0) instanceof IContainer)) { + IContainer dropContainer = determineDropContainer(); + if (dropContainer==null) { return; } - IContainer dropContainer = (IContainer) resources.get(0); Object clipboardContent; @@ -116,4 +110,41 @@ public class PasteTargetAction extends SelectionListenerAction { } + /** + * Drop container is determined by first element. The rest of the logic is + * to figure out if drop is allowed. The drop is allowed if the selection is + * one {@code IContainer} or {@code IMakeTarget}s from the same folder. + * + * @return drop container or {@code null}. + */ + private IContainer determineDropContainer() { + IStructuredSelection selection = getStructuredSelection(); + if (selection.size()==0) { + return null; + } + + Object first = selection.getFirstElement(); + + if (first instanceof IContainer) { + if (selection.size()==1) { + return (IContainer)first; + } else { + return null; + } + } + + if (first instanceof IMakeTarget) { + // it has to be selection of IMakeTargets only and from the same IContainer + IContainer dropContainer = ((IMakeTarget)first).getContainer(); + for (Object item : selection.toList()) { + if ( !(item instanceof IMakeTarget) || ((IMakeTarget)item).getContainer()!=dropContainer ) { + return null; + } + } + return dropContainer; + } + + return null; + } + }