summaryrefslogtreecommitdiffstats
path: root/video/out/vo.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/vo.c')
-rw-r--r--video/out/vo.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/video/out/vo.c b/video/out/vo.c
index 689b6b6da1..68fb7d0ee7 100644
--- a/video/out/vo.c
+++ b/video/out/vo.c
@@ -43,6 +43,7 @@
#include "video/mp_image.h"
#include "video/vfcap.h"
#include "sub/osd.h"
+#include "sub/find_subfiles.h"
//
// Externally visible list of all vo drivers
@@ -631,16 +632,31 @@ static void run_cmd(struct vo *vo, const char **cmd)
// Handle drag & drop event of a list of files on the VO window.
void vo_drop_files(struct vo *vo, int num_files, char **files)
{
- for (int i = 0; i < num_files; i++) {
- const char *cmd[] = {
- "loadfile",
- files[i],
- /* Start playing the dropped files right away */
- (i == 0) ? "replace" : "append",
- NULL
- };
-
- MP_VERBOSE(vo, "received dropped file: %s\n", files[i]);
- run_cmd(vo, cmd);
+ bool all_sub = true;
+ for (int i = 0; i < num_files; i++)
+ all_sub &= mp_might_be_subtitle_file(files[i]);
+
+ if (all_sub) {
+ for (int i = 0; i < num_files; i++) {
+ const char *cmd[] = {
+ "sub_add",
+ files[i],
+ NULL
+ };
+ run_cmd(vo, cmd);
+ }
+ } else {
+ for (int i = 0; i < num_files; i++) {
+ const char *cmd[] = {
+ "loadfile",
+ files[i],
+ /* Start playing the dropped files right away */
+ (i == 0) ? "replace" : "append",
+ NULL
+ };
+
+ MP_VERBOSE(vo, "received dropped file: %s\n", files[i]);
+ run_cmd(vo, cmd);
+ }
}
}