From f8ad7794df8c6788956618db94fe94597f478d72 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Mon, 25 Jun 2018 14:02:25 +0700 Subject: [PATCH] Windows Explorer DnD / Selection Order is broken and will probably never be fixed, so we provide an override for users that want to enforce alphanumeric sort order of files dragged in. e.g. -Dnet.filebot.dnd.sort=true --- .../filebot/ui/transfer/FileTransferable.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/source/net/filebot/ui/transfer/FileTransferable.java b/source/net/filebot/ui/transfer/FileTransferable.java index 9ff69169..05dbb191 100644 --- a/source/net/filebot/ui/transfer/FileTransferable.java +++ b/source/net/filebot/ui/transfer/FileTransferable.java @@ -1,7 +1,9 @@ package net.filebot.ui.transfer; +import static java.util.stream.Collectors.*; import static net.filebot.Logging.*; import static net.filebot.Settings.*; +import static net.filebot.util.FileUtilities.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -18,9 +20,12 @@ import java.util.List; import java.util.Scanner; import net.filebot.platform.gnome.GVFS; +import net.filebot.util.SystemProperty; public class FileTransferable implements Transferable { + public static final SystemProperty forceSortOrder = SystemProperty.of("net.filebot.dnd.sort", Boolean::valueOf); + public static final DataFlavor uriListFlavor = createUriListFlavor(); private static DataFlavor createUriListFlavor() { @@ -130,8 +135,16 @@ public class FileTransferable implements Transferable { // file list flavor Object transferable = tr.getTransferData(DataFlavor.javaFileListFlavor); - if (transferable instanceof List) { - return (List) transferable; + if (transferable instanceof List) { + List files = (List) transferable; + + // Windows Explorer DnD / Selection Order is broken and will probably never be fixed, + // so we provide an override for users that want to enforce alphanumeric sort order of files dragged in + if (forceSortOrder.get()) { + return files.stream().sorted(HUMAN_NAME_ORDER).collect(toList()); + } + + return files; } // on some platforms transferable data will not be available until the drop has been accepted