1
mirror of https://github.com/mpv-player/mpv synced 2024-11-18 21:16:10 +01:00

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.
This commit is contained in:
Kevin Mitchell 2015-08-29 02:13:22 -07:00
parent c80b7eed53
commit 638322f77e
2 changed files with 8 additions and 1 deletions

View File

@ -793,6 +793,8 @@ static void vo_x11_dnd_handle_message(struct vo *vo, XClientMessageEvent *ce)
dnd_select_format(x11, args, 3); dnd_select_format(x11, args, 3);
} }
} else if (ce->message_type == XA(x11, XdndPosition)) { } else if (ce->message_type == XA(x11, XdndPosition)) {
x11->dnd_requested_action = ce->data.l[4];
Window src = ce->data.l[0]; Window src = ce->data.l[0];
XEvent xev; 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), void *prop = x11_get_property(x11, x11->window, XAs(x11, DND_PROPERTY),
x11->dnd_requested_format, 8, &nitems); x11->dnd_requested_format, 8, &nitems);
if (prop) { 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. // 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", 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); XFree(prop);
} }
} }

View File

@ -112,6 +112,7 @@ struct vo_x11_state {
/* drag and drop */ /* drag and drop */
Atom dnd_requested_format; Atom dnd_requested_format;
Atom dnd_requested_action;
Window dnd_src_window; Window dnd_src_window;
/* dragging the window */ /* dragging the window */