summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-03-15 22:42:06 +0100
committerwm4 <wm4@nowhere>2016-03-15 22:42:06 +0100
commit7e75e2a5dc1719326ec46265d67205336b975eec (patch)
treea53568d7e9c648a6f5b4c238c348bee22cf77e53 /input
parent718cc27f34bd0bbaa155cb61e11179dba31cbd33 (diff)
downloadmpv-7e75e2a5dc1719326ec46265d67205336b975eec.tar.bz2
mpv-7e75e2a5dc1719326ec46265d67205336b975eec.tar.xz
x11, input: move mime type drag&drop negotiation to common code
Drag&drop mechanisms typically support multiple types for the drop data. Move most of the logic which types are accepted and preferred to event.c, where the data is also interpreted. (Maybe sorting the types by assigning scores is over-engineered, since they're already sorted by preference, but it's actually not much more code.) Not very interesting/meaningful yet, but preparation for the next commit.
Diffstat (limited to 'input')
-rw-r--r--input/event.c12
-rw-r--r--input/event.h5
2 files changed, 15 insertions, 2 deletions
diff --git a/input/event.c b/input/event.c
index f765342518..a15bc11919 100644
--- a/input/event.c
+++ b/input/event.c
@@ -56,8 +56,8 @@ 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, enum mp_dnd_action action)
{
- // X11 and Wayland file list format.
- if (strcmp(mime_type, "text/uri-list") == 0) {
+ // (text lists are the only format supported right now)
+ if (mp_event_get_mime_type_score(ictx, mime_type) >= 0) {
void *tmp = talloc_new(NULL);
int num_files = 0;
char **files = NULL;
@@ -76,3 +76,11 @@ int mp_event_drop_mime_data(struct input_ctx *ictx, const char *mime_type,
return -1;
}
}
+
+int mp_event_get_mime_type_score(struct input_ctx *ictx, const char *mime_type)
+{
+ // X11 and Wayland file list format.
+ if (strcmp(mime_type, "text/uri-list") == 0)
+ return 10;
+ return -1;
+}
diff --git a/input/event.h b/input/event.h
index 3a06ce1d1d..cf8e35ac8d 100644
--- a/input/event.h
+++ b/input/event.h
@@ -32,3 +32,8 @@ void mp_event_drop_files(struct input_ctx *ictx, int num_files, char **files,
// 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, enum mp_dnd_action append);
+
+// Many drag & drop APIs support multiple mime types, and this function returns
+// whether a type is preferred (higher integer score), or supported (scores
+// below 0 indicate unsupported types).
+int mp_event_get_mime_type_score(struct input_ctx *ictx, const char *mime_type);