tdf#141217: Improve plain text pasting on iOS
Handle public.utf8-plain-text. That is the actual concrete UTI for
UTF-8 text. For instance if you copy text from the Safari address bar,
public.utf8-plain-text is the only type put on the pasteboard.
Previously we were not able to paste than into the iOS app at all.
Change-Id: Idbdd3870431f3b9a312cc9b672ffe1f16d13edbd
Signed-off-by: Tor Lillqvist <tml@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113042
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113045
diff --git a/vcl/ios/DataFlavorMapping.cxx b/vcl/ios/DataFlavorMapping.cxx
index e64b6b8..6a3815c 100644
--- a/vcl/ios/DataFlavorMapping.cxx
+++ b/vcl/ios/DataFlavorMapping.cxx
@@ -74,9 +74,7 @@
return [NSString stringWithCString:utf8Str.getStr() encoding:NSUTF8StringEncoding];
}
NSString* PBTYPE_PLAINTEXT = (__bridge NSString*)kUTTypePlainText;
// Nope. See commented-out use below.
// NSString* PBTYPE_UTF8PLAINTEXT = (__bridge NSString*)kUTTypeUTF8PlainText;
NSString* PBTYPE_UTF8PLAINTEXT = (__bridge NSString*)kUTTypeUTF8PlainText;
NSString* PBTYPE_RTF = (__bridge NSString*)kUTTypeRTF;
NSString* PBTYPE_PNG = (__bridge NSString*)kUTTypePNG;
NSString* PBTYPE_JPEG = (__bridge NSString*)kUTTypeJPEG;
@@ -118,9 +116,7 @@
// lcl_TestFormat() in sc/source/ui/view/cellsh.cxx.
static const FlavorMap flavorMap[]
= { { PBTYPE_PLAINTEXT, "text/plain;charset=utf-16", "Unicode Text (UTF-16)", true },
// Nope. The LO code does not understand text/plain in UTF-8. Which is a shame.
// PBTYPE_UTF8PLAINTEXT, "text/plain;charset=utf-8", "Unicode Text (UTF-8)", false },
= { { PBTYPE_UTF8PLAINTEXT, "text/plain;charset=utf-16", "Unicode Text (UTF-16)", true },
{ PBTYPE_RTF, "text/rtf", "Rich Text Format", false },
{ PBTYPE_PNG, "image/png", "Portable Network Graphics", false },
{ PBTYPE_JPEG, "image/jpeg", "JPEG", false },
@@ -183,27 +179,27 @@
}
}
class UniDataProvider : public DataProviderBaseImpl
class Utf8DataProvider : public DataProviderBaseImpl
{
public:
UniDataProvider(const Any& data);
UniDataProvider(NSData* data);
Utf8DataProvider(const Any& data);
Utf8DataProvider(NSData* data);
NSData* getSystemData() override;
Any getOOoData() override;
};
UniDataProvider::UniDataProvider(const Any& data)
Utf8DataProvider::Utf8DataProvider(const Any& data)
: DataProviderBaseImpl(data)
{
}
UniDataProvider::UniDataProvider(NSData* data)
Utf8DataProvider::Utf8DataProvider(NSData* data)
: DataProviderBaseImpl(data)
{
}
NSData* UniDataProvider::getSystemData()
NSData* Utf8DataProvider::getSystemData()
{
OUString ustr;
mData >>= ustr;
@@ -214,7 +210,7 @@
return [NSData dataWithBytes:strUtf8.getStr() length:strUtf8.getLength()];
}
Any UniDataProvider::getOOoData()
Any Utf8DataProvider::getOOoData()
{
Any oOOData;
@@ -464,7 +460,7 @@
else // Must be OUString type
{
SAL_WARN_IF(!isOUStringType(data.getValueType()), "vcl", "must be OUString type");
dp = DataProviderPtr_t(new UniDataProvider(data));
dp = DataProviderPtr_t(new Utf8DataProvider(data));
}
}
catch (const UnsupportedFlavorException& e)
@@ -483,9 +479,12 @@
{
DataProviderPtr_t dp;
if ([systemFlavor caseInsensitiveCompare:PBTYPE_PLAINTEXT] == NSOrderedSame)
if (systemData == nil)
return dp;
if ([systemFlavor caseInsensitiveCompare:PBTYPE_UTF8PLAINTEXT] == NSOrderedSame)
{
dp = DataProviderPtr_t(new UniDataProvider(systemData));
dp = DataProviderPtr_t(new Utf8DataProvider(systemData));
}
else if ([systemFlavor caseInsensitiveCompare:PBTYPE_HTML] == NSOrderedSame)
{