From: Bowon Ryu Date: Thu, 18 Apr 2024 07:46:14 +0000 (+0900) Subject: [Tizen] Add HasType to Clipboard X-Git-Tag: accepted/tizen/8.0/unified/20240509.175858^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7ca504aedaf8e4fb35f22ac448646ab008a3c002;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git [Tizen] Add HasType to Clipboard Change-Id: Ifeeb380f8da7d24f2febdc5f271d10d7bdafd52a Signed-off-by: Bowon Ryu --- diff --git a/dali/devel-api/adaptor-framework/clipboard.cpp b/dali/devel-api/adaptor-framework/clipboard.cpp index e69c0a7..a070d00 100644 --- a/dali/devel-api/adaptor-framework/clipboard.cpp +++ b/dali/devel-api/adaptor-framework/clipboard.cpp @@ -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); diff --git a/dali/devel-api/adaptor-framework/clipboard.h b/dali/devel-api/adaptor-framework/clipboard.h index 3096b2d..707b936 100644 --- a/dali/devel-api/adaptor-framework/clipboard.h +++ b/dali/devel-api/adaptor-framework/clipboard.h @@ -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. diff --git a/dali/internal/clipboard/common/clipboard-impl.h b/dali/internal/clipboard/common/clipboard-impl.h index d4e36c1..cf508ea 100644 --- a/dali/internal/clipboard/common/clipboard-impl.h +++ b/dali/internal/clipboard/common/clipboard-impl.h @@ -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); diff --git a/dali/internal/clipboard/generic/clipboard-impl-generic.cpp b/dali/internal/clipboard/generic/clipboard-impl-generic.cpp index c4bef69..ce788bd 100644 --- a/dali/internal/clipboard/generic/clipboard-impl-generic.cpp +++ b/dali/internal/clipboard/generic/clipboard-impl-generic.cpp @@ -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; diff --git a/dali/internal/clipboard/tizen-wayland/clipboard-impl-ecore-wl.cpp b/dali/internal/clipboard/tizen-wayland/clipboard-impl-ecore-wl.cpp index fdd3657..0dc2949 100644 --- a/dali/internal/clipboard/tizen-wayland/clipboard-impl-ecore-wl.cpp +++ b/dali/internal/clipboard/tizen-wayland/clipboard-impl-ecore-wl.cpp @@ -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() diff --git a/dali/internal/clipboard/ubuntu-x11/clipboard-impl-x.cpp b/dali/internal/clipboard/ubuntu-x11/clipboard-impl-x.cpp index 2681ea9..9c15021 100644 --- a/dali/internal/clipboard/ubuntu-x11/clipboard-impl-x.cpp +++ b/dali/internal/clipboard/ubuntu-x11/clipboard-impl-x.cpp @@ -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()