[Tizen] Add HasType to Clipboard 88/310188/2 accepted/tizen/8.0/unified/20240509.175858
authorBowon Ryu <bowon.ryu@samsung.com>
Thu, 18 Apr 2024 07:46:14 +0000 (16:46 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Mon, 29 Apr 2024 01:34:28 +0000 (10:34 +0900)
Change-Id: Ifeeb380f8da7d24f2febdc5f271d10d7bdafd52a
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali/devel-api/adaptor-framework/clipboard.cpp
dali/devel-api/adaptor-framework/clipboard.h
dali/internal/clipboard/common/clipboard-impl.h
dali/internal/clipboard/generic/clipboard-impl-generic.cpp
dali/internal/clipboard/tizen-wayland/clipboard-impl-ecore-wl.cpp
dali/internal/clipboard/ubuntu-x11/clipboard-impl-x.cpp

index e69c0a7..a070d00 100644 (file)
@@ -61,6 +61,11 @@ Clipboard::DataSelectedSignalType& Clipboard::DataSelectedSignal()
   return GetImplementation(*this).DataSelectedSignal();
 }
 
+bool Clipboard::HasType(const std::string& mimeType)
+{
+  return GetImplementation(*this).HasType(mimeType);
+}
+
 bool Clipboard::SetData(const ClipData& clipData)
 {
   return GetImplementation(*this).SetData(clipData);
index 3096b2d..707b936 100644 (file)
@@ -139,6 +139,13 @@ public:
   DataSelectedSignalType& DataSelectedSignal();
 
   /**
+   * @brief Check if there is data in the clipboard with a given mime type.
+   * @param[in] mimeType mime type to search for.
+   * @return bool true if there is data, otherwise false.
+   */
+  bool HasType(const std::string& mimeType);
+
+  /**
    * @brief Send the given data to the clipboard.
    * @param[in] clipData data to send to the clipboard
    * @return bool true if the internal clipboard sending was successful.
index d4e36c1..cf508ea 100644 (file)
@@ -35,6 +35,10 @@ namespace Adaptor
  */
 class Clipboard : public Dali::BaseObject, public ConnectionTracker
 {
+const char* MIME_TYPE_TEXT_PLAIN = "text/plain;charset=utf-8";
+const char* MIME_TYPE_HTML       = "application/xhtml+xml";
+const char* MIME_TYPE_TEXT_URI   = "text/uri-list";
+
 public:
   struct Impl;
 
@@ -75,6 +79,11 @@ public:
   Dali::Clipboard::DataSelectedSignalType& DataSelectedSignal();
 
   /**
+   * @copydoc Dali::Clipboard::HasType()
+   */
+  bool HasType(const std::string& mimeType);
+
+  /**
    * @copydoc Dali::Clipboard::SetData()
    */
   bool SetData(const Dali::Clipboard::ClipData& clipData);
index c4bef69..ce788bd 100644 (file)
@@ -97,6 +97,11 @@ Dali::Clipboard::DataSelectedSignalType& Clipboard::DataSelectedSignal()
   return mImpl->mDataSelectedSignal;
 }
 
+bool Clipboard::HasType(const std::string& mimeType)
+{
+  return true;
+}
+
 bool Clipboard::SetData(const Dali::Clipboard::ClipData& clipData)
 {
   return true;
index fdd3657..0dc2949 100644 (file)
@@ -50,6 +50,32 @@ struct Clipboard::Impl
     ecore_event_handler_del(mSelectionHanlder);
   }
 
+  bool HasType(const std::string& mimeType)
+  {
+    Ecore_Wl2_Display* display = ecore_wl2_connected_display_get(NULL);
+    Ecore_Wl2_Input*   input   = ecore_wl2_input_default_input_get(display);
+    Ecore_Wl2_Offer*   offer   = ecore_wl2_dnd_selection_get(input);
+
+    if(!offer)
+    {
+      DALI_LOG_ERROR("selection_get fail, request type:%s\n", mimeType.c_str());
+      return false;
+    }
+
+    Eina_Array*  availableTypes = ecore_wl2_offer_mimes_get(offer);
+    unsigned int typeCount      = (unsigned int)eina_array_count((Eina_Array *)availableTypes);
+
+    for(unsigned int i = 0; i < typeCount; ++i)
+    {
+      char* availableType = (char*)eina_array_data_get((Eina_Array *)availableTypes, i);
+      if(!mimeType.compare(availableType))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
   bool SetData(const Dali::Clipboard::ClipData& clipData)
   {
     mMimeType = clipData.GetMimeType();
@@ -395,6 +421,11 @@ Dali::Clipboard::DataSelectedSignalType& Clipboard::DataSelectedSignal()
   return mImpl->mDataSelectedSignal;
 }
 
+bool Clipboard::HasType(const std::string& mimeType)
+{
+  return mImpl->HasType(mimeType);
+}
+
 bool Clipboard::SetData(const Dali::Clipboard::ClipData& clipData)
 {
   return mImpl->SetData(clipData);
@@ -407,8 +438,8 @@ uint32_t Clipboard::GetData(const std::string &mimeType)
 
 size_t Clipboard::NumberOfItems()
 {
-  // TODO: We should to check if the data is empty in the clipboard service.
-  return 1u;
+  bool isItem = HasType(MIME_TYPE_TEXT_PLAIN) || HasType(MIME_TYPE_HTML) || HasType(MIME_TYPE_TEXT_URI);
+  return isItem ? 1u : 0u;
 }
 
 void Clipboard::ShowClipboard()
index 2681ea9..9c15021 100644 (file)
@@ -43,6 +43,11 @@ struct Clipboard::Impl
     mApplicationWindow = ecoreXwin;
   }
 
+  bool HasType(const std::string& mimeType)
+  {
+    return mMimeType == mimeType ? true : false;
+  }
+
   bool SetData(const Dali::Clipboard::ClipData& clipData)
   {
     mMimeType = clipData.GetMimeType();
@@ -173,6 +178,11 @@ Dali::Clipboard::DataSelectedSignalType& Clipboard::DataSelectedSignal()
   return mImpl->mDataSelectedSignal;
 }
 
+bool Clipboard::HasType(const std::string& mimeType)
+{
+  return mImpl->HasType(mimeType);
+}
+
 bool Clipboard::SetData(const Dali::Clipboard::ClipData& clipData)
 {
   return mImpl->SetData(clipData);
@@ -185,8 +195,8 @@ uint32_t Clipboard::GetData(const std::string &mimeType)
 
 size_t Clipboard::NumberOfItems()
 {
-  // TODO: We should to check if the data is empty in the clipboard service.
-  return 1u;
+  bool isItem = HasType(MIME_TYPE_TEXT_PLAIN) || HasType(MIME_TYPE_HTML) || HasType(MIME_TYPE_TEXT_URI);
+  return isItem ? 1u : 0u;
 }
 
 void Clipboard::ShowClipboard()