[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - 2 commits - desktop/source include/LibreOfficeKit include/vcl sw/inc sw/source

Miklos Vajna vmiklos at collabora.co.uk
Thu Jun 18 03:49:13 PDT 2015


 desktop/source/lib/init.cxx               |   19 +++++++++++++
 include/LibreOfficeKit/LibreOfficeKit.h   |    4 ++
 include/LibreOfficeKit/LibreOfficeKit.hxx |   10 +++++++
 include/vcl/ITiledRenderable.hxx          |    7 +++++
 sw/inc/unotxdoc.hxx                       |    2 +
 sw/source/uibase/dochdl/swdtflvr.cxx      |    3 +-
 sw/source/uibase/uno/unotxdoc.cxx         |   42 ++++++++++++++++++++++++++++++
 7 files changed, 86 insertions(+), 1 deletion(-)

New commits:
commit 1a1d15b422bc9bb787f939c28e520ca23debe28b
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Jun 17 18:00:01 2015 +0200

    LOK: add lok::Document::getTextSelection()
    
    I.e. the copy part of copy&paste. Only the Writer bits for now.
    
    Change-Id: Ia003e76e3b234735f472cdef125514f9771d8640
    (cherry picked from commit cfc4375158ee174e8dcb4df319b82c0bdd6f31cc)

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 71e9431..89fe2db 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -215,6 +215,8 @@ static void doc_setTextSelection (LibreOfficeKitDocument* pThis,
                                   int nType,
                                   int nX,
                                   int nY);
+static char* doc_getTextSelection(LibreOfficeKitDocument* pThis,
+                                        const char* pMimeType);
 static void doc_setGraphicSelection (LibreOfficeKitDocument* pThis,
                                   int nType,
                                   int nX,
@@ -251,6 +253,7 @@ struct LibLODocument_Impl : public _LibreOfficeKitDocument
             m_pDocumentClass->postMouseEvent = doc_postMouseEvent;
             m_pDocumentClass->postUnoCommand = doc_postUnoCommand;
             m_pDocumentClass->setTextSelection = doc_setTextSelection;
+            m_pDocumentClass->getTextSelection = doc_getTextSelection;
             m_pDocumentClass->setGraphicSelection = doc_setGraphicSelection;
             m_pDocumentClass->resetSelection = doc_resetSelection;
 
@@ -788,6 +791,22 @@ static void doc_setTextSelection(LibreOfficeKitDocument* pThis, int nType, int n
     pDoc->setTextSelection(nType, nX, nY);
 }
 
+static char* doc_getTextSelection(LibreOfficeKitDocument* pThis, const char* pMimeType)
+{
+    ITiledRenderable* pDoc = getTiledRenderable(pThis);
+    if (!pDoc)
+    {
+        gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering";
+        return 0;
+    }
+
+    OString aRet = pDoc->getTextSelection(pMimeType);
+
+    char* pMemory = static_cast<char*>(malloc(aRet.getLength() + 1));
+    strcpy(pMemory, aRet.getStr());
+    return pMemory;
+}
+
 static void doc_setGraphicSelection(LibreOfficeKitDocument* pThis, int nType, int nX, int nY)
 {
     ITiledRenderable* pDoc = getTiledRenderable(pThis);
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h
index 7eb42e8..7fbf71b 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/include/LibreOfficeKit/LibreOfficeKit.h
@@ -146,6 +146,10 @@ struct _LibreOfficeKitDocumentClass
                               int nX,
                               int nY);
 
+    /// @see lok::Document::getTextSelection
+    char* (*getTextSelection) (LibreOfficeKitDocument* pThis,
+                               const char* pMimeType);
+
     /// @see lok::Document::setGraphicSelection
     void (*setGraphicSelection) (LibreOfficeKitDocument* pThis,
                                  int nType,
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx
index bd8832a..2b562b2 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -217,6 +217,16 @@ public:
     }
 
     /**
+     * Gets the currently selected text.
+     *
+     * @param pMimeType determines the return format, for example text/plain;charset=utf-8.
+     */
+    inline char* getTextSelection(const char* pMimeType)
+    {
+        return mpDoc->pClass->getTextSelection(mpDoc, pMimeType);
+    }
+
+    /**
      * Adjusts the graphic selection.
      *
      * @param nType @see LibreOfficeKitSetGraphicSelectionType
diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx
index 5cac9b6..7de3c32 100644
--- a/include/vcl/ITiledRenderable.hxx
+++ b/include/vcl/ITiledRenderable.hxx
@@ -122,6 +122,13 @@ public:
     virtual void setTextSelection(int nType, int nX, int nY) = 0;
 
     /**
+     * Gets the text selection.
+     *
+     * @see lok::Document::getTextSelection().
+     */
+    virtual OString getTextSelection(const char* /*pMimeType*/) { return OString(); }
+
+    /**
      * Adjusts the graphic selection.
      *
      * @see lok::Document::setGraphicSelection().
diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx
index 90e7f02..a90272a 100644
--- a/sw/inc/unotxdoc.hxx
+++ b/sw/inc/unotxdoc.hxx
@@ -417,6 +417,8 @@ public:
     virtual void postMouseEvent(int nType, int nX, int nY, int nCount) SAL_OVERRIDE;
     /// @see vcl::ITiledRenderable::setTextSelection().
     virtual void setTextSelection(int nType, int nX, int nY) SAL_OVERRIDE;
+    /// @see vcl::ITiledRenderable::getTextSelection().
+    virtual OString getTextSelection(const char* pMimeType) SAL_OVERRIDE;
     /// @see vcl::ITiledRenderable::setGraphicSelection().
     virtual void setGraphicSelection(int nType, int nX, int nY) SAL_OVERRIDE;
     /// @see vcl::ITiledRenderable::resetSelection().
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index b2cdfac..4e96b6c 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -133,6 +133,7 @@
 #include <view.hxx>
 #include <srcview.hxx>
 #include <edtwin.hxx>
+#include <swdtflvr.hxx>
 
 #include <svtools/langtab.hxx>
 #include <map>
@@ -3255,6 +3256,47 @@ void SwXTextDocument::setTextSelection(int nType, int nX, int nY)
     }
 }
 
+OString SwXTextDocument::getTextSelection(const char* pMimeType)
+{
+    SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+    uno::Reference<datatransfer::XTransferable> xTransferable(new SwTransferable(*pWrtShell));
+
+    // Take care of UTF-8 text here.
+    OString aMimeType(pMimeType);
+    bool bConvert = false;
+    sal_Int32 nIndex = 0;
+    if (aMimeType.getToken(0, ';', nIndex) == "text/plain")
+    {
+        if (aMimeType.getToken(0, ';', nIndex) == "charset=utf-8")
+        {
+            aMimeType = "text/plain;charset=utf-16";
+            bConvert = true;
+        }
+    }
+
+    datatransfer::DataFlavor aFlavor;
+    aFlavor.MimeType = OUString::fromUtf8(aMimeType.getStr());
+    if (aMimeType == "text/plain;charset=utf-16")
+        aFlavor.DataType = cppu::UnoType<OUString>::get();
+    else
+        aFlavor.DataType = cppu::UnoType< uno::Sequence<sal_Int8> >::get();
+
+    uno::Any aAny(xTransferable->getTransferData(aFlavor));
+
+    OString aRet;
+    if (aFlavor.DataType == cppu::UnoType<OUString>::get())
+    {
+        OUString aString;
+        aAny >>= aString;
+        if (bConvert)
+            aRet = OUStringToOString(aString, RTL_TEXTENCODING_UTF8);
+        else
+            aRet = OString(reinterpret_cast<const sal_Char *>(aString.getStr()), aString.getLength() * sizeof(sal_Unicode));
+    }
+
+    return aRet;
+}
+
 void SwXTextDocument::setGraphicSelection(int nType, int nX, int nY)
 {
     SolarMutexGuard aGuard;
commit 4f6eea0e6f85a0b90843734aa6f288b8fa92d887
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Jun 17 16:17:24 2015 +0200

    sw tiled rendering: fix always empty copy&paste format list
    
    Change-Id: I0c6390b54d0e9bb1cad7c30ff24ddb109d88e03b
    (cherry picked from commit c4e5a14b1c8d2d85476791c519ac7df8b13f02df)

diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx
index 70dbd74..8dc91dd1 100644
--- a/sw/source/uibase/dochdl/swdtflvr.cxx
+++ b/sw/source/uibase/dochdl/swdtflvr.cxx
@@ -126,6 +126,7 @@
 
 #include <vcl/GraphicNativeTransform.hxx>
 #include <vcl/GraphicNativeMetadata.hxx>
+#include <comphelper/lok.hxx>
 
 #include <boost/scoped_array.hpp>
 #include <boost/scoped_ptr.hpp>
@@ -305,7 +306,7 @@ void SwTransferable::AddSupportedFormats()
 {
     // only need if we are the current XSelection Object
     SwModule *pMod = SW_MOD();
-    if( this == pMod->pXSelection )
+    if( this == pMod->pXSelection || comphelper::LibreOfficeKit::isActive())
     {
         SetDataForDragAndDrop( Point( 0,0) );
     }


More information about the Libreoffice-commits mailing list