1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-08 08:45:44 +02:00

PR 51757 help fixing. Run the PasteAction

update selection in a UI thread.
This commit is contained in:
Alain Magloire 2004-02-29 05:23:58 +00:00
parent 17436b16d0
commit e1140e486b
2 changed files with 44 additions and 22 deletions

View file

@ -1,3 +1,9 @@
2004-02-28 Alain Magloire
PR 51757
* src/org/eclipse/cdt/internal/ui/cview/PasteAction.java
2004-02-28 Alain Magloire
Provide an implementation of CView.selectReveal().

View file

@ -21,6 +21,7 @@ import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CopyFilesAndFoldersOperation;
@ -164,19 +165,23 @@ public class PasteAction extends SelectionListenerAction {
if (!super.updateSelection(selection))
return false;
// clipboard must have resources or files
ResourceTransfer resTransfer = ResourceTransfer.getInstance();
IResource[] resourceData = (IResource[]) clipboard.getContents(resTransfer);
FileTransfer fileTransfer = FileTransfer.getInstance();
String[] fileData = (String[]) clipboard.getContents(fileTransfer);
if (resourceData == null && fileData == null)
return false;
// can paste open projects regardless of selection
boolean isProjectRes = resourceData != null && resourceData.length > 0 && resourceData[0].getType() == IResource.PROJECT;
final IResource[][] clipboardData = new IResource[1][];
shell.getDisplay().syncExec(new Runnable() {
public void run() {
// clipboard must have resources or files
ResourceTransfer resTransfer = ResourceTransfer.getInstance();
clipboardData[0] = (IResource[])clipboard.getContents(resTransfer);
}
});
IResource[] resourceData = clipboardData[0];
boolean isProjectRes = resourceData != null
&& resourceData.length > 0
&& resourceData[0].getType() == IResource.PROJECT;
if (isProjectRes) {
for (int i = 0; i < resourceData.length; i++) {
// make sure all resource data are open projects
// can paste open projects regardless of selection
if (resourceData[i].getType() != IResource.PROJECT || ((IProject) resourceData[i]).isOpen() == false)
return false;
}
@ -187,18 +192,16 @@ public class PasteAction extends SelectionListenerAction {
// or multiple file selection with the same parent
if (getSelectedNonResources().size() > 0)
return false;
List selectedResources = getSelectedResources();
IResource targetResource = getTarget();
// targetResource is null if no valid target is selected or
// selection is empty
IResource targetResource = getTarget();
if (targetResource == null)
return false;
// linked resources can only be pasted into projects
if (isLinked(resourceData) && targetResource.getType() != IResource.PROJECT)
return false;
// can paste files and folders to a single selection (file, folder,
// open project) or multiple file selection with the same parent
List selectedResources = getSelectedResources();
if (selectedResources.size() > 1) {
// if more than one resource is selected the selection has
// to be all files with the same parent
@ -211,14 +214,27 @@ public class PasteAction extends SelectionListenerAction {
}
}
if (targetResource.getType() == IResource.FOLDER && resourceData != null) {
// don't try to copy folder to self
for (int i = 0; i < resourceData.length; i++) {
if (targetResource.equals(resourceData[i]))
return false;
if (resourceData != null) {
// linked resources can only be pasted into projects
if (isLinked(resourceData) && targetResource.getType() != IResource.PROJECT)
return false;
if (targetResource.getType() == IResource.FOLDER) {
// don't try to copy folder to self
for (int i = 0; i < resourceData.length; i++) {
if (targetResource.equals(resourceData[i]))
return false;
}
}
return true;
}
return true;
TransferData[] transfers = clipboard.getAvailableTypes();
FileTransfer fileTransfer = FileTransfer.getInstance();
for (int i = 0; i < transfers.length; i++) {
if (fileTransfer.isSupportedType(transfers[i]))
return true;
}
return false;
}
}