From fcfc9959c2356bdd93e3fecb357bb4d5fe82ea36 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Fri, 23 Sep 2016 22:00:11 +0200 Subject: [PATCH] elm_cnp: handle format of a drop correctly MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit the format can also be the result of mutliple or´ed values. The new code now also uses the same mimetypes to format type relation than the selection code. This fixes dragging onto a container with multiple formats. Spotted by ApBBB while dragging from ephoto to terminology. This also fixes T3320 --- src/lib/elementary/elm_cnp.c | 45 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/src/lib/elementary/elm_cnp.c b/src/lib/elementary/elm_cnp.c index 7362996..fa379de 100644 --- a/src/lib/elementary/elm_cnp.c +++ b/src/lib/elementary/elm_cnp.c @@ -3041,11 +3041,15 @@ typedef struct _Format_Translation{ char *markup[] = {"application/x-elementary-markup", "", NULL}; char *text[] = {"text/plain;charset=utf-8", "text/plain", NULL}; char *html[] = {"text/html;charset=utf-8", "text/html", NULL}; +char *vcard[] = {"text/x-vcard", NULL}; +char *image[] = {"image/", "text/uri-list", NULL}; Format_Translation convertion[] = { {ELM_SEL_FORMAT_MARKUP, markup}, {ELM_SEL_FORMAT_TEXT, text}, {ELM_SEL_FORMAT_HTML, html}, + {ELM_SEL_FORMAT_VCARD, vcard}, + {ELM_SEL_FORMAT_IMAGE, image}, {ELM_SEL_FORMAT_NONE, NULL}, }; @@ -3907,40 +3911,25 @@ _wl_drops_accept(const char *type) Dropable *drop; Eina_Bool will_accept = EINA_FALSE; + if (!type) return EINA_FALSE; + EINA_LIST_FOREACH(drops, l, drop) { Dropable_Cbs *cbs; EINA_INLIST_FOREACH(drop->cbs_list, cbs) { - switch (cbs->types) + for (int i = 0; convertion[i].translates ; ++i) { - case ELM_SEL_FORMAT_TARGETS: - case ELM_SEL_FORMAT_IMAGE: - if (!strncmp(type, "image/", 6)) - { - wl_cnp_selection.requestwidget = drop->obj; - return EINA_TRUE; - } - break; - case ELM_SEL_FORMAT_NONE: - break; - case ELM_SEL_FORMAT_MARKUP: - case ELM_SEL_FORMAT_TEXT: - if (eina_streq(type, "application/x-elementary-markup") || - eina_streq(type, "text/plain") || - eina_streq(type, "text/plain;charset=utf-8") || - eina_streq(type, "UTF8_STRING") || - eina_streq(type, "STRING") || - eina_streq(type, "TEXT")) - return EINA_TRUE; - break; - case ELM_SEL_FORMAT_VCARD: - break; - case ELM_SEL_FORMAT_HTML: - if (eina_streq(type, "text/html") || - eina_streq(type, "text/html;charset=utf-8")) - return EINA_TRUE; - break; + if (!(convertion[i].format & cbs->types)) continue; + + for (int j = 0; convertion[i].translates[j]; ++j) + { + if (!strncmp(type, convertion[i].translates[j], strlen(convertion[i].translates[j]))) + { + wl_cnp_selection.requestwidget = drop->obj; + return EINA_TRUE; + } + } } } } -- 2.7.4