mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
open dropped files in correct frame (IDEA-80230)
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor;
|
||||
|
||||
import com.intellij.openapi.fileEditor.impl.EditorWindow;
|
||||
import com.intellij.openapi.project.Project;
|
||||
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
@@ -25,5 +26,5 @@ import java.awt.datatransfer.Transferable;
|
||||
*/
|
||||
public interface EditorDropHandler {
|
||||
boolean canHandleDrop(DataFlavor[] transferFlavors);
|
||||
void handleDrop(Transferable t, final Project project);
|
||||
void handleDrop(Transferable t, final Project project, EditorWindow editorWindow);
|
||||
}
|
||||
|
||||
@@ -55,8 +55,6 @@ import com.intellij.openapi.editor.markup.*;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
|
||||
import com.intellij.openapi.fileEditor.impl.EditorsSplitters;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.FontSize;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -5599,7 +5597,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
|
||||
final EditorDropHandler dropHandler = editor.getDropHandler();
|
||||
if (dropHandler != null && dropHandler.canHandleDrop(t.getTransferDataFlavors())) {
|
||||
dropHandler.handleDrop(t, editor.getProject());
|
||||
dropHandler.handleDrop(t, editor.getProject(), null);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -793,12 +793,12 @@ public class EditorsSplitters extends JPanel {
|
||||
}
|
||||
|
||||
private final class MyTransferHandler extends TransferHandler {
|
||||
private final FileDropHandler myFileDropHandler = new FileDropHandler();
|
||||
private final FileDropHandler myFileDropHandler = new FileDropHandler(null);
|
||||
|
||||
@Override
|
||||
public boolean importData(JComponent comp, Transferable t) {
|
||||
if (myFileDropHandler.canHandleDrop(t.getTransferDataFlavors())) {
|
||||
myFileDropHandler.handleDrop(t, myManager.getProject());
|
||||
myFileDropHandler.handleDrop(t, myManager.getProject(), myCurrentWindow);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
+48
-5
@@ -16,8 +16,13 @@
|
||||
package com.intellij.openapi.fileEditor.impl.text;
|
||||
|
||||
import com.intellij.ide.dnd.FileCopyPasteUtil;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorDropHandler;
|
||||
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
|
||||
import com.intellij.openapi.fileEditor.*;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
|
||||
import com.intellij.openapi.fileEditor.impl.EditorWindow;
|
||||
import com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -33,28 +38,66 @@ import java.util.List;
|
||||
* @author yole
|
||||
*/
|
||||
public class FileDropHandler implements EditorDropHandler {
|
||||
private final Editor myEditor;
|
||||
|
||||
public FileDropHandler(Editor editor) {
|
||||
myEditor = editor;
|
||||
}
|
||||
|
||||
|
||||
public boolean canHandleDrop(final DataFlavor[] transferFlavors) {
|
||||
return transferFlavors != null && FileCopyPasteUtil.isFileListFlavorSupported(transferFlavors);
|
||||
}
|
||||
|
||||
public void handleDrop(@NotNull final Transferable t, @Nullable final Project project) {
|
||||
public void handleDrop(@NotNull final Transferable t, @Nullable final Project project, EditorWindow editorWindow) {
|
||||
if (project == null || !FileCopyPasteUtil.isFileListFlavorSupported(t)) {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<File> fileList = FileCopyPasteUtil.getFileList(t);
|
||||
if (fileList != null) {
|
||||
openFiles(project, fileList);
|
||||
openFiles(project, fileList, editorWindow);
|
||||
}
|
||||
}
|
||||
|
||||
private static void openFiles(final Project project, final List<File> fileList) {
|
||||
private void openFiles(final Project project, final List<File> fileList, EditorWindow editorWindow) {
|
||||
if (editorWindow == null && myEditor != null) {
|
||||
editorWindow = findEditorWindow(project);
|
||||
}
|
||||
final LocalFileSystem fileSystem = LocalFileSystem.getInstance();
|
||||
for (File file : fileList) {
|
||||
final VirtualFile vFile = fileSystem.refreshAndFindFileByIoFile(file);
|
||||
final FileEditorManagerEx fileEditorManager = (FileEditorManagerEx) FileEditorManager.getInstance(project);
|
||||
if (vFile != null) {
|
||||
new OpenFileDescriptor(project, vFile).navigate(true);
|
||||
if (editorWindow != null) {
|
||||
fileEditorManager.openFileWithProviders(vFile, true, editorWindow);
|
||||
}
|
||||
else {
|
||||
new OpenFileDescriptor(project, vFile).navigate(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private EditorWindow findEditorWindow(Project project) {
|
||||
final Document document = myEditor.getDocument();
|
||||
final VirtualFile file = FileDocumentManager.getInstance().getFile(document);
|
||||
if (file != null) {
|
||||
final FileEditorManagerEx fileEditorManager = (FileEditorManagerEx) FileEditorManager.getInstance(project);
|
||||
final EditorWindow[] windows = fileEditorManager.getWindows();
|
||||
for (EditorWindow window : windows) {
|
||||
final EditorWithProviderComposite composite = window.findFileComposite(file);
|
||||
if (composite == null) {
|
||||
continue;
|
||||
}
|
||||
for (FileEditor editor : composite.getEditors()) {
|
||||
if (editor instanceof TextEditor && ((TextEditor)editor).getEditor() == myEditor) {
|
||||
return window;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -181,7 +181,7 @@ class TextEditorComponent extends JPanel implements DataProvider{
|
||||
editor.getSelectionModel().addSelectionListener(myEditorSelectionListener);
|
||||
((EditorEx)editor).addPropertyChangeListener(myEditorPropertyChangeListener);
|
||||
|
||||
((EditorImpl) editor).setDropHandler(new FileDropHandler());
|
||||
((EditorImpl) editor).setDropHandler(new FileDropHandler(editor));
|
||||
|
||||
TextEditorProvider.putTextEditor(editor, myTextEditor);
|
||||
return editor;
|
||||
|
||||
Reference in New Issue
Block a user