zmike pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7288e98b9ea0b94285f1adbb3711ed050757e29b

commit 7288e98b9ea0b94285f1adbb3711ed050757e29b
Author: Marcel Hollerbach <[email protected]>
Date:   Tue Apr 14 11:29:32 2020 -0400

    ecore_evas_x: allow parsing of links form the link list
    
    Summary:
    this is needed in order to return the data the same way the legacy impl
    did. This however has the annoying sideeffect that ecore_evas_x now
    depends on efreet, and we had to change the build order.
    Depends on D11696
    
    Reviewers: zmike, stefan_schmidt, raster
    
    Reviewed By: zmike
    
    Subscribers: devilhorns, cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D11697
---
 meson.build                                     |  2 +-
 src/modules/ecore_evas/engines/x/ecore_evas_x.c | 37 +++++++++++++++++++++++--
 src/modules/ecore_evas/engines/x/meson.build    |  2 +-
 3 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/meson.build b/meson.build
index 0250512057..23c515c379 100644
--- a/meson.build
+++ b/meson.build
@@ -317,11 +317,11 @@ subprojects = [
 ['ecore_drm2'       ,['drm']               , false,  true, false, false, 
false, false, ['ecore'], ['libdrm']],
 ['ecore_cocoa'      ,['cocoa']             , false,  true, false, false, 
false, false, ['eina'], []],
 ['evas'             ,[]                    ,  true,  true, false, false,  
true,  true, ['eina', 'efl', 'eo'], ['vg_common', 'libunibreak']],
+['efreet'           ,[]                    , false,  true, false, false,  
true, false, ['eina', 'efl', 'eo'], []],
 ['ecore_input_evas' ,[]                    , false,  true, false, false, 
false, false, ['eina', 'evas'], []],
 ['ecore_evas'       ,[]                    ,  true,  true,  true, false, 
false, false, ['evas', 'ector'], []],
 ['ecore_imf'        ,[]                    ,  true,  true, false, false, 
false, false, ['eina'], []],
 ['embryo'           ,[]                    , false,  true,  true, false, 
false, false, ['eina', 'efl', 'eo'], []],
-['efreet'           ,[]                    , false,  true, false, false,  
true, false, ['eina', 'efl', 'eo'], []],
 ['eio'              ,[]                    , false,  true, false, false,  
true,  true, ['eina', 'eet'], []],
 ['efreet'           ,[]                    , false, false,  true, false, 
false, false, ['eina', 'efl', 'eo'], []],
 ['ecore_imf_evas'   ,[]                    , false,  true, false, false, 
false, false, ['eina', 'efl', 'eo'], []],
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 68f437c4a2..eb545a256a 100644
--- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c
+++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c
@@ -13,6 +13,7 @@
 
 #include <Ecore_X.h>
 #include <Ecore_X_Atoms.h>
+#include <Efreet.h>
 
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_X11
 # include <Evas_Engine_Software_X11.h>
@@ -3858,17 +3859,45 @@ _create_deliveriy_content(unsigned long int size, const 
void *mem, const char *m
 static void
 _deliver_content(Ecore_Evas *ee, Ecore_Evas_Engine_Data_X11 *edata, 
Ecore_Evas_Selection_Buffer selection, Ecore_X_Event_Selection_Notify *ev)
 {
-   Ecore_X_Selection_Data *x11_data = ev->data;
    Eina_Content *result = NULL;
    Eina_Stringshare *mime_type = 
_decrypt_type(edata->selection_data[selection].requested_type);
 
-   if (!x11_data->data)
+   if (!ev->data)
      {
         ERR("delivering NULL content");
         return;
      }
-   if (eina_str_has_prefix(mime_type,"text"))
+
+   if (eina_streq(mime_type, "text/uri-list"))
+     {
+        Ecore_X_Selection_Data_Files *files = ev->data;
+        Efreet_Uri *uri;
+        Eina_Strbuf *strbuf;
+        int i;
+
+        strbuf = eina_strbuf_new();
+
+        for (i = 0; i < files->num_files ; i++)
+          {
+             uri = efreet_uri_decode(files->files[i]);
+             if (uri)
+               {
+                  eina_strbuf_append(strbuf, uri->path);
+                  efreet_uri_free(uri);
+               }
+             else
+               {
+                  eina_strbuf_append(strbuf, files->files[i]);
+               }
+             if (i < (files->num_files - 1))
+               eina_strbuf_append(strbuf, "\n");
+          }
+        result = _create_deliveriy_content(eina_strbuf_length_get(strbuf) + 1, 
eina_strbuf_string_get(strbuf), mime_type);
+        eina_strbuf_free(strbuf);
+     }
+   else if (eina_str_has_prefix(mime_type,"text"))
      {
+        Ecore_X_Selection_Data *x11_data = ev->data;
         //ensure that we always have a \0 at the end, there is no assertion 
that \0 is included here.
         void *null_terminated = eina_memdup(x11_data->data, x11_data->length, 
EINA_TRUE);
 
@@ -3877,6 +3906,7 @@ _deliver_content(Ecore_Evas *ee, 
Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_S
      }
    else if (eina_str_has_prefix(mime_type,"image"))
      {
+        Ecore_X_Selection_Data *x11_data = ev->data;
         Eina_Content *tmp_container = eina_content_new((Eina_Slice){.len = 
x11_data->length, .mem = x11_data->data}, mime_type);
         const char *file = eina_content_as_file(tmp_container);
 
@@ -3885,6 +3915,7 @@ _deliver_content(Ecore_Evas *ee, 
Ecore_Evas_Engine_Data_X11 *edata, Ecore_Evas_S
      }
    else
      {
+        Ecore_X_Selection_Data *x11_data = ev->data;
         result = _create_deliveriy_content(x11_data->length, x11_data->data, 
mime_type);
      }
    EINA_SAFETY_ON_NULL_RETURN(result);
diff --git a/src/modules/ecore_evas/engines/x/meson.build 
b/src/modules/ecore_evas/engines/x/meson.build
index 582a782115..1108f9c755 100644
--- a/src/modules/ecore_evas/engines/x/meson.build
+++ b/src/modules/ecore_evas/engines/x/meson.build
@@ -14,7 +14,7 @@ endif
 
 shared_module(mod_full_name, engine_src,
   include_directories : config_dir + [engine_include_dir],
-  dependencies : [eina, ecore_evas, ecore_input_evas] + engine_deps,
+  dependencies : [eina, ecore_evas, ecore_input_evas, efreet] + engine_deps,
   install : true,
   install_dir : mod_install_dir,
   name_suffix : sys_mod_extension

-- 


Reply via email to