summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-06-26 21:40:10 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-06-26 21:40:10 +0100
commitb8be1271716f85595d1ff12c5eeeedd733601f9b (patch)
treed11a571258bd041f1c930b41c2ac2c4cdf7f8df3 /src/modules
parent53c67c83bd0c0a13e2536d310429743ce0ae789a (diff)
downloadefl-b8be1271716f85595d1ff12c5eeeedd733601f9b.tar.gz
ecore evas - cnp - look for exact mime matches before conversions
fixes chrome -> efl copy and paste. @fix
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/ecore_evas/engines/x/ecore_evas_x.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
index c75af6368f..369c9cda5c 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -3788,27 +3788,45 @@ _search_fitting_type(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, Ecore_Ev
EINA_SAFETY_ON_NULL_RETURN(edata->selection_data[selection].acceptable_type);
+ // first pass - try find an EXACT mime type match
for (unsigned int i = 0; i < eina_array_count(arr) && !found_conversion; ++i)
{
const char *x11_name = eina_array_data_get(arr, i);
+
mime_type = _decrypt_type(x11_name);
for (unsigned int j = 0; j < eina_array_count(edata->selection_data[selection].acceptable_type) && !found_conversion; ++j)
{
- const char *acceptable_type = (const char*) eina_array_data_get(edata->selection_data[selection].acceptable_type, j);
+ const char *acceptable_type = (const char *)eina_array_data_get(edata->selection_data[selection].acceptable_type, j);
if (mime_type == acceptable_type)
- HANDLE_TYPE()
+ {
+ HANDLE_TYPE()
+ }
+ }
+ eina_stringshare_del(mime_type);
+ }
+ // second pass - exact match not found - look for conversions instead
+ if (!found_conversion)
+ {
+ for (unsigned int i = 0; i < eina_array_count(arr) && !found_conversion; ++i)
+ {
+ const char *x11_name = eina_array_data_get(arr, i);
+
+ mime_type = _decrypt_type(x11_name);
- //if there is no available type yet, check if we can convert to the desired type via this type
- if (!found_conversion)
+ for (unsigned int j = 0; j < eina_array_count(edata->selection_data[selection].acceptable_type) && !found_conversion; ++j)
{
+ const char *acceptable_type = (const char *)eina_array_data_get(edata->selection_data[selection].acceptable_type, j);
const char *convertion_type = NULL;
+
Eina_Iterator *iter = eina_content_converter_possible_conversions(mime_type);
EINA_ITERATOR_FOREACH(iter, convertion_type)
{
if (convertion_type == acceptable_type)
- HANDLE_TYPE()
+ {
+ HANDLE_TYPE()
+ }
}
eina_iterator_free(iter);
}