summaryrefslogtreecommitdiffstats
path: root/video/out/x11_common.c
diff options
context:
space:
mode:
authorKevin Mitchell <kevmitch@gmail.com>2015-08-29 02:13:22 -0700
committerKevin Mitchell <kevmitch@gmail.com>2015-08-30 05:28:30 -0700
commit638322f77e9d8277218f88e2af7521a65595d98f (patch)
treec721a55102e45ede210373adceacae453ffa8065 /video/out/x11_common.c
parentc80b7eed53dfd9f6a0aadc9c11981cba2a59655d (diff)
downloadmpv-638322f77e9d8277218f88e2af7521a65595d98f.tar.bz2
mpv-638322f77e9d8277218f88e2af7521a65595d98f.tar.xz
x11: drag and drop append with modifier
If the drag and drop action is anything other than XdndActionCopy, append the dropped files rather than replacing the existing playlist. With most file managers, this will mean at least pressing shift while dropping.
Diffstat (limited to 'video/out/x11_common.c')
-rw-r--r--video/out/x11_common.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index a5c9dd84f5..d077957c4e 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -793,6 +793,8 @@ static void vo_x11_dnd_handle_message(struct vo *vo, XClientMessageEvent *ce)
dnd_select_format(x11, args, 3);
}
} else if (ce->message_type == XA(x11, XdndPosition)) {
+ x11->dnd_requested_action = ce->data.l[4];
+
Window src = ce->data.l[0];
XEvent xev;
@@ -836,9 +838,13 @@ static void vo_x11_dnd_handle_selection(struct vo *vo, XSelectionEvent *se)
void *prop = x11_get_property(x11, x11->window, XAs(x11, DND_PROPERTY),
x11->dnd_requested_format, 8, &nitems);
if (prop) {
+ enum mp_dnd_action action =
+ x11->dnd_requested_action == XA(x11, XdndActionCopy) ?
+ DND_REPLACE : DND_APPEND;
+
// 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}, DND_REPLACE) > 0;
+ (bstr){prop, nitems}, action) > 0;
XFree(prop);
}
}