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:
parent
c80b7eed53
commit
638322f77e
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user