Skip to content

Commit bdb52bd

Browse files
committed
Merge remote-tracking branch 'origin/GT-3461-dragonmacher-drag-drop-fix'
2 parents d88e5aa + 638befb commit bdb52bd

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypeManagerPlugin.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,6 @@ public void archiveStateChanged(Archive archive) {
155155

156156
editorManager = new DataTypeEditorManager(this);
157157

158-
CodeViewerService codeViewerService = tool.getService(CodeViewerService.class);
159-
if (codeViewerService != null) {
160-
codeViewerService.addProgramDropProvider(new DataDropOnBrowserHandler(this));
161-
}
162158
tool.addPopupActionProvider(this);
163159
tool.setMenuGroup(new String[] { SyncRefreshAction.MENU_NAME }, "SYNC");
164160
tool.setMenuGroup(new String[] { UpdateAction.MENU_NAME }, "SYNC");

Ghidra/Features/Base/src/main/java/ghidra/framework/main/datatree/GhidraDataFlavorHandlerService.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,25 @@ public class GhidraDataFlavorHandlerService {
2121

2222
public GhidraDataFlavorHandlerService() {
2323

24-
try {
25-
DataFlavor linuxFileUrlFlavor =
26-
new DataFlavor("application/x-java-serialized-object;class=java.lang.String");
27-
DataTreeDragNDropHandler.addActiveDataFlavorHandler(linuxFileUrlFlavor,
28-
new LinuxFileUrlHandler());
29-
}
30-
catch (ClassNotFoundException cnfe) {
31-
// should never happen as it is using java.lang.String
32-
}
24+
//
25+
// Note: the order of the file drop flavors/handlers is intentional. We wish to process
26+
// objects first which we know to be transfered from within the current JVM. After
27+
// that, then process objects given to us from the OS or another JVM.
28+
//
3329

3430
LocalTreeNodeHandler localNodeHandler = new LocalTreeNodeHandler();
3531
DataTreeDragNDropHandler.addActiveDataFlavorHandler(
3632
DataTreeDragNDropHandler.localDomainFileTreeFlavor, localNodeHandler);
37-
DataTreeDragNDropHandler.addActiveDataFlavorHandler(DataFlavor.javaFileListFlavor,
38-
new JavaFileListHandler());
33+
3934
DataTreeDragNDropHandler.addActiveDataFlavorHandler(
4035
VersionInfoTransferable.localVersionInfoFlavor, new LocalVersionInfoHandler());
36+
DataTreeDragNDropHandler.addActiveDataFlavorHandler(DataFlavor.javaFileListFlavor,
37+
new JavaFileListHandler());
38+
39+
DataFlavor linuxFileUrlFlavor =
40+
new DataFlavor("application/x-java-serialized-object;class=java.lang.String",
41+
"String file URL");
42+
DataTreeDragNDropHandler.addActiveDataFlavorHandler(linuxFileUrlFlavor,
43+
new LinuxFileUrlHandler());
4144
}
4245
}

Ghidra/Framework/Project/src/main/java/ghidra/app/util/FileOpenDropHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import java.awt.dnd.*;
2222
import java.awt.event.ContainerEvent;
2323
import java.awt.event.ContainerListener;
24-
import java.util.HashMap;
24+
import java.util.LinkedHashMap;
2525
import java.util.Set;
2626

2727
import javax.swing.CellRendererPane;
@@ -40,8 +40,10 @@
4040
* in order to properly support drag/drop with all components.
4141
*/
4242
public class FileOpenDropHandler implements DropTargetHandler, Droppable, ContainerListener {
43-
private static HashMap<DataFlavor, FileOpenDataFlavorHandler> handlers =
44-
new HashMap<DataFlavor, FileOpenDataFlavorHandler>();
43+
44+
// note: we wish to maintain insertion order
45+
private static LinkedHashMap<DataFlavor, FileOpenDataFlavorHandler> handlers =
46+
new LinkedHashMap<DataFlavor, FileOpenDataFlavorHandler>();
4547

4648
private DropTgtAdapter dropTargetAdapter;
4749
private DropTarget globalDropTarget;

0 commit comments

Comments
 (0)