mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-08 16:55:38 +02:00
PR 51757 help fixing. Run the PasteAction
update selection in a UI thread.
This commit is contained in:
parent
17436b16d0
commit
e1140e486b
2 changed files with 44 additions and 22 deletions
|
@ -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
|
2004-02-28 Alain Magloire
|
||||||
|
|
||||||
Provide an implementation of CView.selectReveal().
|
Provide an implementation of CView.selectReveal().
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.eclipse.jface.util.Assert;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.swt.dnd.Clipboard;
|
import org.eclipse.swt.dnd.Clipboard;
|
||||||
import org.eclipse.swt.dnd.FileTransfer;
|
import org.eclipse.swt.dnd.FileTransfer;
|
||||||
|
import org.eclipse.swt.dnd.TransferData;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
import org.eclipse.ui.actions.CopyFilesAndFoldersOperation;
|
import org.eclipse.ui.actions.CopyFilesAndFoldersOperation;
|
||||||
|
@ -164,19 +165,23 @@ public class PasteAction extends SelectionListenerAction {
|
||||||
if (!super.updateSelection(selection))
|
if (!super.updateSelection(selection))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// clipboard must have resources or files
|
final IResource[][] clipboardData = new IResource[1][];
|
||||||
ResourceTransfer resTransfer = ResourceTransfer.getInstance();
|
shell.getDisplay().syncExec(new Runnable() {
|
||||||
IResource[] resourceData = (IResource[]) clipboard.getContents(resTransfer);
|
public void run() {
|
||||||
FileTransfer fileTransfer = FileTransfer.getInstance();
|
// clipboard must have resources or files
|
||||||
String[] fileData = (String[]) clipboard.getContents(fileTransfer);
|
ResourceTransfer resTransfer = ResourceTransfer.getInstance();
|
||||||
if (resourceData == null && fileData == null)
|
clipboardData[0] = (IResource[])clipboard.getContents(resTransfer);
|
||||||
return false;
|
}
|
||||||
|
});
|
||||||
// can paste open projects regardless of selection
|
IResource[] resourceData = clipboardData[0];
|
||||||
boolean isProjectRes = resourceData != null && resourceData.length > 0 && resourceData[0].getType() == IResource.PROJECT;
|
boolean isProjectRes = resourceData != null
|
||||||
|
&& resourceData.length > 0
|
||||||
|
&& resourceData[0].getType() == IResource.PROJECT;
|
||||||
|
|
||||||
if (isProjectRes) {
|
if (isProjectRes) {
|
||||||
for (int i = 0; i < resourceData.length; i++) {
|
for (int i = 0; i < resourceData.length; i++) {
|
||||||
// make sure all resource data are open projects
|
// 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)
|
if (resourceData[i].getType() != IResource.PROJECT || ((IProject) resourceData[i]).isOpen() == false)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -187,18 +192,16 @@ public class PasteAction extends SelectionListenerAction {
|
||||||
// or multiple file selection with the same parent
|
// or multiple file selection with the same parent
|
||||||
if (getSelectedNonResources().size() > 0)
|
if (getSelectedNonResources().size() > 0)
|
||||||
return false;
|
return false;
|
||||||
List selectedResources = getSelectedResources();
|
|
||||||
IResource targetResource = getTarget();
|
|
||||||
|
|
||||||
// targetResource is null if no valid target is selected or
|
// targetResource is null if no valid target is selected or
|
||||||
// selection is empty
|
// selection is empty
|
||||||
|
IResource targetResource = getTarget();
|
||||||
if (targetResource == null)
|
if (targetResource == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// linked resources can only be pasted into projects
|
// can paste files and folders to a single selection (file, folder,
|
||||||
if (isLinked(resourceData) && targetResource.getType() != IResource.PROJECT)
|
// open project) or multiple file selection with the same parent
|
||||||
return false;
|
List selectedResources = getSelectedResources();
|
||||||
|
|
||||||
if (selectedResources.size() > 1) {
|
if (selectedResources.size() > 1) {
|
||||||
// if more than one resource is selected the selection has
|
// if more than one resource is selected the selection has
|
||||||
// to be all files with the same parent
|
// to be all files with the same parent
|
||||||
|
@ -211,14 +214,27 @@ public class PasteAction extends SelectionListenerAction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (targetResource.getType() == IResource.FOLDER && resourceData != null) {
|
if (resourceData != null) {
|
||||||
// don't try to copy folder to self
|
// linked resources can only be pasted into projects
|
||||||
for (int i = 0; i < resourceData.length; i++) {
|
if (isLinked(resourceData) && targetResource.getType() != IResource.PROJECT)
|
||||||
if (targetResource.equals(resourceData[i]))
|
return false;
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue