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);
}
} 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);
}
}

View File

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