summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/event.c12
-rw-r--r--input/event.h10
-rw-r--r--osdep/macosx_events.m2
-rw-r--r--video/out/w32_common.c5
-rw-r--r--video/out/wayland_common.c2
-rw-r--r--video/out/x11_common.c2
6 files changed, 21 insertions, 12 deletions
diff --git a/input/event.c b/input/event.c
index add77f0b0c..d47f17ddaf 100644
--- a/input/event.c
+++ b/input/event.c
@@ -20,7 +20,8 @@
#include "common/msg.h"
#include "sub/find_subfiles.h"
-void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files)
+void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files,
+ enum mp_dnd_action action)
{
bool all_sub = true;
for (int i = 0; i < num_files; i++)
@@ -42,8 +43,9 @@ void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files)
"osd-auto",
"loadfile",
files[i],
- /* Start playing the dropped files right away */
- (i == 0) ? "replace" : "append",
+ /* Either start playing the dropped files right away
+ or add them to the end of the current playlist */
+ (i == 0 && action == DND_REPLACE) ? "replace" : "append-play",
NULL
};
mp_input_run_cmd(ictx, cmd);
@@ -52,7 +54,7 @@ void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files)
}
int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type,
- bstr data)
+ bstr data, enum mp_dnd_action action)
{
// X11 and Wayland file list format.
if (strcmp(mime_type, "text/uri-list") == 0) {
@@ -67,7 +69,7 @@ int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type,
char *s = bstrto0(tmp, line);
MP_TARRAY_APPEND(tmp, files, num_files, s);
}
- mp_event_drop_files(ictx, num_files, files);
+ mp_event_drop_files(ictx, num_files, files, action);
talloc_free(tmp);
return num_files > 0;
} else {
diff --git a/input/event.h b/input/event.h
index a1cb542f8f..e2ce36b329 100644
--- a/input/event.h
+++ b/input/event.h
@@ -19,10 +19,16 @@
struct input_ctx;
+enum mp_dnd_action {
+ DND_REPLACE,
+ DND_APPEND,
+};
+
// Enqueue files for playback after drag and drop
-void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files);
+void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files,
+ enum mp_dnd_action append);
// Drop data in a specific format (identified by the mimetype).
// Returns <0 on error, ==0 if data was ok but empty, >0 on success.
int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type,
- bstr data);
+ bstr data, enum mp_dnd_action append);
diff --git a/osdep/macosx_events.m b/osdep/macosx_events.m
index 435e84c787..ae909d8e43 100644
--- a/osdep/macosx_events.m
+++ b/osdep/macosx_events.m
@@ -472,7 +472,7 @@ void cocoa_set_input_context(struct input_ctx *input_context)
}];
[_input_lock lock];
if (_inputContext)
- mp_event_drop_files(_inputContext, num_files, files_utf8);
+ mp_event_drop_files(_inputContext, num_files, files_utf8, DND_REPLACE);
[_input_lock unlock];
talloc_free(files_utf8);
}
diff --git a/video/out/w32_common.c b/video/out/w32_common.c
index 5197ad054c..6074c4cbeb 100644
--- a/video/out/w32_common.c
+++ b/video/out/w32_common.c
@@ -253,7 +253,8 @@ static HRESULT STDMETHODCALLTYPE DropTarget_Drop(IDropTarget* This,
}
GlobalUnlock(medium.hGlobal);
- mp_event_drop_files(t->w32->input_ctx, nrecvd_files, files);
+ mp_event_drop_files(t->w32->input_ctx, nrecvd_files, files,
+ DND_REPLACE);
talloc_free(files);
}
@@ -265,7 +266,7 @@ static HRESULT STDMETHODCALLTYPE DropTarget_Drop(IDropTarget* This,
char* url = (char*)GlobalLock(medium.hGlobal);
if (url != NULL) {
if (mp_event_drop_mime_data(t->w32->input_ctx, "text/uri-list",
- bstr0(url)) > 0) {
+ bstr0(url), DND_REPLACE) > 0) {
MP_VERBOSE(t->w32, "received dropped URL: %s\n", url);
} else {
MP_ERR(t->w32, "error getting dropped URL\n");
diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c
index 198b167d79..289ed0442e 100644
--- a/video/out/wayland_common.c
+++ b/video/out/wayland_common.c
@@ -1176,7 +1176,7 @@ static int vo_wayland_check_events (struct vo *vo)
buffer[str_len] = 0;
struct bstr file_list = bstr0(buffer);
mp_event_drop_mime_data(vo->input_ctx, "text/uri-list",
- file_list);
+ file_list, DND_REPLACE);
break;
}
}
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index 9ed57bdc4f..a5c9dd84f5 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -838,7 +838,7 @@ static void vo_x11_dnd_handle_selection(struct vo *vo, XSelectionEvent *se)
if (prop) {
// No idea if this is guaranteed to be \0-padded, so use bstr.
success = mp_event_drop_mime_data(vo->input_ctx, "text/uri-list",
- (bstr){prop, nitems}) > 0;
+ (bstr){prop, nitems}, DND_REPLACE) > 0;
XFree(prop);
}
}