summaryrefslogtreecommitdiffstats
path: root/sw/source/uibase
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2018-07-20 17:49:21 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-07-27 11:31:34 +0200
commit73bd150048d056fb6e00de3f8b91347b7f642e91 (patch)
tree49c58fed71c650735f4f6b4f9a0c2f4c0ea2458d /sw/source/uibase
parenttdf#109077 sw textbox: fix as-char shapes with custom print area in para (diff)
downloadcore-73bd150048d056fb6e00de3f8b91347b7f642e91.tar.gz
core-73bd150048d056fb6e00de3f8b91347b7f642e91.zip
tdf#37223 Writer: insert 1-cell tables as text instead of OLE object
to get a user-friendly solution to copy Calc cell content to a text document and to its native tables. NOTE: MSO does the same for copying 1-cell tables, while LibreOffice was able to do this only with paste special as RTF. Change-Id: I6156333055aa9bed4cf56ff12f913e89d3f5700c Reviewed-on: https://gerrit.libreoffice.org/57783 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org> Reviewed-on: https://gerrit.libreoffice.org/57814 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw/source/uibase')
-rw-r--r--sw/source/uibase/dochdl/swdtflvr.cxx23
1 files changed, 21 insertions, 2 deletions
diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx
index 4e69db27180e..2eac04a31e5d 100644
--- a/sw/source/uibase/dochdl/swdtflvr.cxx
+++ b/sw/source/uibase/dochdl/swdtflvr.cxx
@@ -1128,6 +1128,7 @@ bool SwTransferable::Paste(SwWrtShell& rSh, TransferableDataHelper& rData, RndSt
SotExchangeDest nDestination = SwTransferable::GetSotDestination( rSh );
SotClipboardFormatId nFormat = SotClipboardFormatId::NONE;
SotExchangeActionFlags nActionFlags = SotExchangeActionFlags::NONE;
+ bool bSingleCellTable = false;
if( GetSwTransferable( rData ) )
{
@@ -1153,8 +1154,26 @@ bool SwTransferable::Paste(SwWrtShell& rSh, TransferableDataHelper& rData, RndSt
&nActionFlags );
}
- // special case for tables from draw application
- if( EXCHG_OUT_ACTION_INSERT_DRAWOBJ == nAction )
+ // content of 1-cell tables is inserted as simple text
+ if( EXCHG_OUT_ACTION_INSERT_OLE == nAction && ( rData.HasFormat( SotClipboardFormatId::SYLK ) ||
+ rData.HasFormat( SotClipboardFormatId::SYLK_BIGCAPS ) ) )
+ {
+ OUString aExpand;
+ if( rData.GetString( SotClipboardFormatId::STRING, aExpand ))
+ {
+ const sal_Int32 nNewlines{comphelper::string::getTokenCount(aExpand, '\n')};
+ const sal_Int32 nRows = nNewlines ? nNewlines-1 : 0;
+ if ( nRows == 1 )
+ {
+ const sal_Int32 nCols = comphelper::string::getTokenCount(aExpand.getToken(0, '\n'), '\t');
+ if (nCols == 1)
+ bSingleCellTable = true;
+ }
+ }
+ }
+
+ // special case for tables from draw application or 1-cell tables
+ if( EXCHG_OUT_ACTION_INSERT_DRAWOBJ == nAction || bSingleCellTable )
{
if( rData.HasFormat( SotClipboardFormatId::RTF ) )
{