vcl/osx/DataFlavorMapping.cxx |   18 ++++++++++++++++++
 vcl/osx/OSXTransferable.cxx   |    8 ++++++--
 vcl/osx/OSXTransferable.hxx   |    2 +-
 vcl/osx/clipboard.cxx         |    6 +++++-
 4 files changed, 30 insertions(+), 4 deletions(-)

New commits:
commit a1709cb29a5f2f7a75f88335b6255249fd457d6f
Author:     Ujjawal Kumar <[email protected]>
AuthorDate: Thu Feb 26 04:09:32 2026 +0530
Commit:     Mike Kaganski <[email protected]>
CommitDate: Wed Mar 4 10:49:22 2026 +0100

    Add Markdown under paste special for osx backend.
    
    Change-Id: I24ef76b60eee6028499dbc599677201415c28290
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200360
    Reviewed-by: Tor Lillqvist <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/vcl/osx/DataFlavorMapping.cxx b/vcl/osx/DataFlavorMapping.cxx
index 855f6db9a287..19dfa59f7d42 100644
--- a/vcl/osx/DataFlavorMapping.cxx
+++ b/vcl/osx/DataFlavorMapping.cxx
@@ -739,6 +739,10 @@ NSArray* 
DataFlavorMapper::flavorSequenceToTypesArray(const css::uno::Sequence<c
       {
           [array addObject: NSPasteboardTypeTIFF];
       }
+      else if (flavors[i].MimeType == "text/markdown")
+      {
+          [array addObject: NSPasteboardTypeString];
+      }
       else
       {
           const NSString* str = openOfficeToSystemFlavor(flavors[i], 
bNeedDummyInternalFlavor, bIsSystemClipboard);
@@ -763,12 +767,16 @@ css::uno::Sequence<css::datatransfer::DataFlavor> 
DataFlavorMapper::typesArrayTo
 {
   int nFormats = [types count];
   Sequence<DataFlavor> flavors;
+  bool bHaveText = false;
 
   for (int i = 0; i < nFormats; i++)
   {
       NSString* sysFormat = [types objectAtIndex: i];
       DataFlavor oOOFlavor = systemToOpenOfficeFlavor(sysFormat);
 
+      if (oOOFlavor.MimeType == u"text/plain;charset=utf-16")
+          bHaveText = true;
+
       if (isValidFlavor(oOOFlavor))
       {
           flavors.realloc(flavors.getLength() + 1);
@@ -776,6 +784,16 @@ css::uno::Sequence<css::datatransfer::DataFlavor> 
DataFlavorMapper::typesArrayTo
       }
   }
 
+  if (bHaveText)
+  {
+      DataFlavor aFlavor;
+      aFlavor.MimeType = u"text/markdown"_ustr;
+      aFlavor.DataType = cppu::UnoType<OUString>::get();
+      assert(isValidFlavor(aFlavor));
+      flavors.realloc(flavors.getLength() + 1);
+      flavors.getArray()[flavors.getLength() - 1] = aFlavor;
+  }
+
   return flavors;
 }
 
diff --git a/vcl/osx/OSXTransferable.cxx b/vcl/osx/OSXTransferable.cxx
index 725c56537a46..ed3aa69e7835 100644
--- a/vcl/osx/OSXTransferable.cxx
+++ b/vcl/osx/OSXTransferable.cxx
@@ -100,14 +100,18 @@ OSXTransferable::~OSXTransferable()
   [mPasteboard release];
 }
 
-Any SAL_CALL OSXTransferable::getTransferData( const DataFlavor& aFlavor )
+Any SAL_CALL OSXTransferable::getTransferData( const DataFlavor& rFlavor )
 {
-  if (!isValidFlavor(aFlavor) || !isDataFlavorSupported(aFlavor))
+  if (!isValidFlavor(rFlavor) || !isDataFlavorSupported(rFlavor))
   {
       throw UnsupportedFlavorException("AquaClipboard: Unsupported data 
flavor",
                                        static_cast<XTransferable*>(this));
   }
 
+  DataFlavor aFlavor(rFlavor);
+  if (aFlavor.MimeType == "text/markdown")
+      aFlavor.MimeType = u"text/plain;charset=utf-16"_ustr;
+
   bool bInternal(false);
   NSString const * sysFormat =
       (aFlavor.MimeType.startsWith("image/png"))
diff --git a/vcl/osx/OSXTransferable.hxx b/vcl/osx/OSXTransferable.hxx
index e4a00b880eb6..9725a598ecf7 100644
--- a/vcl/osx/OSXTransferable.hxx
+++ b/vcl/osx/OSXTransferable.hxx
@@ -46,7 +46,7 @@ public:
 
   // XTransferable
 
-  virtual css::uno::Any SAL_CALL getTransferData( const 
css::datatransfer::DataFlavor& aFlavor ) override;
+  virtual css::uno::Any SAL_CALL getTransferData( const 
css::datatransfer::DataFlavor& rFlavor ) override;
 
   virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL 
getTransferDataFlavors(  ) override;
 
diff --git a/vcl/osx/clipboard.cxx b/vcl/osx/clipboard.cxx
index f5be6f86c339..9437dab7eb26 100644
--- a/vcl/osx/clipboard.cxx
+++ b/vcl/osx/clipboard.cxx
@@ -319,7 +319,11 @@ void SAL_CALL AquaClipboard::flushClipboard()
 
         for (sal_uInt32 i = 0; i < nFlavors; i++)
         {
-            const NSString* sysType = 
mpDataFlavorMapper->openOfficeToSystemFlavor(flavorList[i], bInternal);
+            datatransfer::DataFlavor aFlavor = flavorList[i];
+            if (aFlavor.MimeType == "text/markdown")
+                aFlavor.MimeType = u"text/plain;charset=utf-16"_ustr;
+
+            const NSString* sysType = 
mpDataFlavorMapper->openOfficeToSystemFlavor(aFlavor, bInternal);
 
             if (sysType != nullptr)
             {

Reply via email to