From 7c6bb321eb0542c474e5147558fb71ecf2d44bd4 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 4 Jan 2014 19:32:09 +0100 Subject: video/out: remove some code duplication between X11 and wayland Both X11 and Wayland support the same format for drag & drop operations (text/uri-list), and the code for that was copied from x11_common.c to wayland_common.c. Factor it out. --- input/event.c | 24 ++++++++++++++++++++++++ input/event.h | 7 +++++++ 2 files changed, 31 insertions(+) (limited to 'input') diff --git a/input/event.c b/input/event.c index 20ef80d36a..e2d488b5ca 100644 --- a/input/event.c +++ b/input/event.c @@ -48,3 +48,27 @@ void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files) } } } + +int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type, + bstr data) +{ + // X11 and Wayland file list format. + if (strcmp(mime_type, "text/uri-list") == 0) { + void *tmp = talloc_new(NULL); + int num_files = 0; + char **files = NULL; + while (data.len) { + bstr line = bstr_getline(data, &data); + line = bstr_strip_linebreaks(line); + if (bstr_startswith0(line, "#")) + continue; + char *s = bstrto0(tmp, line); + MP_TARRAY_APPEND(tmp, files, num_files, s); + } + mp_event_drop_files(ictx, num_files, files); + talloc_free(tmp); + return num_files > 0; + } else { + return -1; + } +} diff --git a/input/event.h b/input/event.h index 38aae3ceb2..820932d9da 100644 --- a/input/event.h +++ b/input/event.h @@ -15,7 +15,14 @@ * with mpv. If not, see . */ +#include "bstr/bstr.h" + struct input_ctx; // Enqueue files for playback after drag and drop void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files); + +// Drop data in a specific format (identified by the mimetype). +// Returns <0 on error, ==0 if data was ok but empty, >0 on success. +int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type, + bstr data); -- cgit v1.2.3