summaryrefslogtreecommitdiffstats
path: root/video/out/win32/droptarget.c
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-06-12 18:42:49 -0500
committerDudemanguy <random342@airmail.cc>2023-07-01 02:06:02 +0000
commitf76c441ba2ec60d34f91341fb2643bcbccecf433 (patch)
tree1b0d84a23c20ef535e56aed298decac064f054fe /video/out/win32/droptarget.c
parent6625a9460819714b50d023f236ac30ee354df3c2 (diff)
downloadmpv-f76c441ba2ec60d34f91341fb2643bcbccecf433.tar.bz2
mpv-f76c441ba2ec60d34f91341fb2643bcbccecf433.tar.xz
win32: add support for drag-and-drop option
Diffstat (limited to 'video/out/win32/droptarget.c')
-rw-r--r--video/out/win32/droptarget.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/video/out/win32/droptarget.c b/video/out/win32/droptarget.c
index 70400352b3..3443f2eaba 100644
--- a/video/out/win32/droptarget.c
+++ b/video/out/win32/droptarget.c
@@ -35,6 +35,7 @@ struct droptarget {
atomic_int ref_cnt;
struct mp_log *log;
struct input_ctx *input_ctx;
+ struct mp_vo_opts *opts;
DWORD last_effect;
IDataObject *data_obj;
};
@@ -129,12 +130,20 @@ static STDMETHODIMP DropTarget_Drop(IDropTarget *self, IDataObject *pDataObj,
DWORD *pdwEffect)
{
struct droptarget *t = (struct droptarget *)self;
- enum mp_dnd_action action = (grfKeyState & MK_SHIFT) ? DND_APPEND : DND_REPLACE;
+
+ enum mp_dnd_action action;
+ if (t->opts->drag_and_drop >= 0) {
+ action = t->opts->drag_and_drop;
+ } else {
+ action = (grfKeyState & MK_SHIFT) ? DND_APPEND : DND_REPLACE;
+ }
SAFE_RELEASE(t->data_obj);
STGMEDIUM medium;
- if (SUCCEEDED(IDataObject_GetData(pDataObj, &fmtetc_file, &medium))) {
+ if (t->opts->drag_and_drop == -2) {
+ t->last_effect = DROPEFFECT_NONE;
+ } else if (SUCCEEDED(IDataObject_GetData(pDataObj, &fmtetc_file, &medium))) {
if (GlobalLock(medium.hGlobal)) {
HDROP drop = medium.hGlobal;
@@ -200,6 +209,7 @@ static IDropTargetVtbl idroptarget_vtbl = {
};
IDropTarget *mp_w32_droptarget_create(struct mp_log *log,
+ struct mp_vo_opts *opts,
struct input_ctx *input_ctx)
{
fmtetc_url.cfFormat = RegisterClipboardFormatW(L"UniformResourceLocatorW");
@@ -210,6 +220,7 @@ IDropTarget *mp_w32_droptarget_create(struct mp_log *log,
dt->last_effect = 0;
dt->data_obj = NULL;
dt->log = mp_log_new(dt, log, "droptarget");
+ dt->opts = opts;
dt->input_ctx = input_ctx;
return &dt->iface;