[Multi Control][VD] register multi type data callback for copy & paste 76/315276/3
authorchenshurong <shurong.chen@samsung.com>
Mon, 29 Jul 2024 08:42:21 +0000 (16:42 +0800)
committerBot Blink <blinkbot@samsung.com>
Thu, 1 Aug 2024 02:12:03 +0000 (02:12 +0000)
EFL have supported delivering multi type data for copy & paste case.
We can received html type data and text type data by registered twice
callback.

So register html and text type callback and revert "convert html type
data to textplain data" code.

revert https://review.tizen.org/gerrit/#/c/298523/

Change-Id: I53c79cafce61c1b3e2343d45d5f289a059b83f7f
Signed-off-by: chenshurong <shurong.chen@samsung.com>
tizen_src/chromium_impl/ui/base/clipboard/clipboard_helper_efl_wayland.cc
tizen_src/chromium_impl/ui/base/clipboard/clipboard_helper_efl_wayland.h

index b4158bef19291314ee4dab093f735f790e518ef9..e81c8fe695fdc8d646565f34b0325d9d8d2b8e3b 100644 (file)
@@ -189,12 +189,8 @@ bool ClipboardHelperEfl::Base64ImageTagFromImagePath(const std::string& path,
 bool ClipboardHelperEfl::ConvertImgTagToBase64(const std::string& tag,
                                                std::string* out_tag) {
   std::string::size_type front_pos = tag.find(kHTMLImageFromClipboardAppFront);
-  if (front_pos == std::string::npos) {
-    LOG(ERROR) << "[CLIPBOARD] couldn't find "
-               << kHTMLImageFromClipboardAppFront
-               << " in html from clipboard app: " << tag;
+  if (front_pos == std::string::npos)
     return false;
-  }
 
   std::string front_stripped =
       tag.substr(front_pos + kHTMLImageFromClipboardAppFrontLength);
@@ -230,8 +226,6 @@ bool ClipboardHelperEfl::RetrieveClipboardItem(
     *data = clipboard_text();
     return true;
   } else if (elm_format == ELM_SEL_FORMAT_HTML) {
-    LOG(INFO) << "[CLIPBOARD] RetrieveClipboardItem! ELM_SEL_FORMAT_HTML! - "
-              << clipboard_html();
     *data = clipboard_html();
     // When text is copied from another app and the webview has focus,
     // only the callback function for the text is received.
@@ -240,6 +234,9 @@ bool ClipboardHelperEfl::RetrieveClipboardItem(
     // it will fall back to html text.
     if (data->empty())
       *data = clipboard_text();
+
+    LOG(INFO) << "[CLIPBOARD] RetrieveClipboardItem! ELM_SEL_FORMAT_HTML! - "
+              << *data;
     return true;
   }
 
@@ -268,10 +265,10 @@ void ClipboardHelperEfl::RefreshClipboard() {
       << "[CLIPBOARD] clear clipboard_contents_ and clipboard_contents_html_!!";
   clipboard_contents_.clear();
   clipboard_contents_html_.clear();
-  Elm_Sel_Format formats =
-      static_cast<Elm_Sel_Format>(ELM_SEL_FORMAT_TEXT | ELM_SEL_FORMAT_HTML);
-  elm_cnp_selection_get(source_widget_, ELM_SEL_TYPE_CLIPBOARD, formats,
-                        SelectionGetCb, this);
+  elm_cnp_selection_get(source_widget_, ELM_SEL_TYPE_CLIPBOARD,
+                        ELM_SEL_FORMAT_HTML, SelectionGetCbHTML, this);
+  elm_cnp_selection_get(source_widget_, ELM_SEL_TYPE_CLIPBOARD,
+                        ELM_SEL_FORMAT_TEXT, SelectionGetCbText, this);
 #else
   if (elm_cnp_selection_get(source_widget_, ELM_SEL_TYPE_CLIPBOARD,
                             ELM_SEL_FORMAT_HTML, SelectionGetCbHTML, this))
@@ -287,34 +284,6 @@ void ClipboardHelperEfl::RefreshClipboard() {
 #endif
 }
 
-Eina_Bool ClipboardHelperEfl::SelectionGetCb(void* data,
-                                             Evas_Object* obj,
-                                             Elm_Selection_Data* ev) {
-  LOG(INFO) << "[CLIPBOARD] SelectionGetCb!";
-
-  if (!ev->data) {
-    LOG(ERROR) << "[CLIPBOARD] ClipboardHelperEfl::SelectionGetCb no data";
-    return EINA_TRUE;
-  }
-
-  if (ev->format == ELM_SEL_FORMAT_TEXT) {
-    std::string selection_data_text(static_cast<char*>(ev->data));
-    LOG(INFO) << "[CLIPBOARD] SelectionGetCb for text - "
-              << selection_data_text;
-    SelectionGetCbText(data, obj, ev);
-  } else if (ev->format == ELM_SEL_FORMAT_HTML) {
-    std::string selection_data_html(static_cast<char*>(ev->data), ev->len);
-    LOG(INFO) << "[CLIPBOARD] SelectionGetCb for html - "
-              << selection_data_html;
-    SelectionGetCbHTML(data, obj, ev);
-  } else {
-    LOG(INFO) << "[CLIPBOARD] It is a different format than"
-                 " ELM_SEL_FORMAT_TEXT and ELM_SEL_FORMAT_HTML";
-  }
-
-  return EINA_TRUE;
-}
-
 Eina_Bool ClipboardHelperEfl::SelectionGetCbHTML(void* data,
                                                  Evas_Object* obj,
                                                  Elm_Selection_Data* ev) {
@@ -324,6 +293,8 @@ Eina_Bool ClipboardHelperEfl::SelectionGetCbHTML(void* data,
     LOG(ERROR) << "[CLIPBOARD] ClipboardHelperEfl::SelectionGetCbHTML no data";
     return EINA_TRUE;
   }
+  LOG(INFO) << "[CLIPBOARD] SelectionGetCbHTML,data:"
+            << static_cast<char*>(ev->data);
 
   // Convert ev->data to std::string, because it might not be
   // a null terminated c-string.
@@ -335,25 +306,12 @@ Eina_Bool ClipboardHelperEfl::SelectionGetCbHTML(void* data,
   std::string img_tag;
   if (ConvertImgTagToBase64(selection_data, &img_tag)) {
     self->clipboard_contents_html_ = img_tag;
-    LOG(INFO) << "[CLIPBOARD] image type, set clipboard_contents_html_ : "
+    LOG(INFO) << "[CLIPBOARD] image type, set selection_data to html : "
               << self->clipboard_contents_html_;
   } else {
+    LOG(INFO) << "[CLIPBOARD] set selection_data to html : " << selection_data;
     self->clipboard_contents_html_ = selection_data;
-#if BUILDFLAG(IS_TIZEN_TV)
-    LOG(INFO) << "[CLIPBOARD] set clipboard_contents_html_ : "
-              << self->clipboard_contents_html_;
-    char* markup_to_utf8 =
-        evas_textblock_text_markup_to_utf8(NULL, static_cast<char*>(ev->data));
-    if (!markup_to_utf8) {
-      LOG(INFO) << "[CLIPBOARD] markup_to_utf8 is null, "
-                   "cannot set clipboard_contents_";
-    } else {
-      self->clipboard_contents_ = markup_to_utf8;
-      LOG(INFO) << "[CLIPBOARD] set clipboard_contents_ : "
-                << self->clipboard_contents_;
-      free(markup_to_utf8);
-    }
-#else
+
     // We received html from clipboard app, but we also want plain text version
     // of the selection. See comment in ::RefreshClipboard why we do it here.
     // Also we have to post it on UI thread, because ::SelectionGetCbHTML is
@@ -362,7 +320,6 @@ Eina_Bool ClipboardHelperEfl::SelectionGetCbHTML(void* data,
     // TODO(g.ludwikowsk): should we also get text for images?
     content::GetUIThreadTaskRunner({})->PostTask(
         FROM_HERE, base::BindRepeating(GetClipboardTextPost, self));
-#endif
   }
   return EINA_TRUE;
 }
@@ -376,6 +333,8 @@ Eina_Bool ClipboardHelperEfl::SelectionGetCbText(void* data,
     LOG(ERROR) << "[CLIPBOARD] ClipboardHelperEfl::SelectionGetCbText no data";
     return EINA_TRUE;
   }
+  LOG(INFO) << "[CLIPBOARD] SelectionGetCbText,data:"
+            << static_cast<char*>(ev->data);
 
   // Convert ev->data to std::string, because it might not be
   // a null terminated c-string.
index 68f77d44cbcefab699ee021e6f4a3793dca1f118..8d6ab7ab7a1e9490f30eea1714f0e53ee4d1dbd7 100644 (file)
@@ -64,9 +64,6 @@ class COMPONENT_EXPORT(UI_BASE) ClipboardHelperEfl {
 
  private:
   friend struct base::DefaultSingletonTraits<ClipboardHelperEfl>;
-  static Eina_Bool SelectionGetCb(void* data,
-                                  Evas_Object* obj,
-                                  Elm_Selection_Data* ev);
   static Eina_Bool SelectionGetCbHTML(void* data,
                                       Evas_Object* obj,
                                       Elm_Selection_Data* ev);