summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorMartin Herkt <lachs0r@srsfckn.biz>2013-12-20 20:27:56 +0100
committerMartin Herkt <lachs0r@srsfckn.biz>2013-12-20 20:27:56 +0100
commita4fe95b0d8d339ba5afbdb5346ad8fd367a4a1c1 (patch)
treef29599277aad7c938b4bdd2f95fb2baee4819b3f /video
parent2d3c7f3b90eb1f46e4e967799df8aca75a59080c (diff)
downloadmpv-a4fe95b0d8d339ba5afbdb5346ad8fd367a4a1c1.tar.bz2
mpv-a4fe95b0d8d339ba5afbdb5346ad8fd367a4a1c1.tar.xz
w32_common: support file drag and drop
Diffstat (limited to 'video')
-rw-r--r--video/out/w32_common.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/video/out/w32_common.c b/video/out/w32_common.c
index 66c540a99b..bda267a290 100644
--- a/video/out/w32_common.c
+++ b/video/out/w32_common.c
@@ -176,6 +176,42 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
case WM_CLOSE:
mp_input_put_key(vo->input_ctx, MP_KEY_CLOSE_WIN);
break;
+ case WM_DROPFILES: {
+ HDROP hDrop = (HDROP)wParam;
+ UINT nfiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
+
+ for (UINT i; i < nfiles; i++) {
+ UINT len = DragQueryFileW(hDrop, i, NULL, 0);
+ wchar_t *buf = talloc_array(NULL, wchar_t, len + 1);
+
+ if (DragQueryFileW(hDrop, i, buf, len + 1) == len) {
+ char *fname = mp_to_utf8(NULL, buf);
+
+ const char *cmd[] = {
+ "raw",
+ "loadfile",
+ fname,
+ /* Start playing the dropped files right away */
+ (i == 0) ? "replace" : "append"
+ };
+
+ MP_VERBOSE(vo, "win32: received dropped file: %s\n", fname);
+ mp_cmd_t *cmdt = mp_input_parse_cmd_strv(vo->log,
+ MP_ON_OSD_AUTO,
+ cmd, "<win32>");
+ mp_input_queue_cmd(vo->input_ctx, cmdt);
+
+ talloc_free(fname);
+ } else {
+ MP_ERR(vo, "win32: error getting dropped file name\n");
+ }
+
+ talloc_free(buf);
+ }
+
+ DragFinish(hDrop);
+ return 0;
+ }
case WM_SYSCOMMAND:
switch (wParam) {
case SC_SCREENSAVE:
@@ -651,6 +687,8 @@ int vo_w32_init(struct vo *vo)
return 0;
}
+ DragAcceptFiles(w32->window, TRUE);
+
w32->tracking = FALSE;
w32->trackEvent = (TRACKMOUSEEVENT){
.cbSize = sizeof(TRACKMOUSEEVENT),