From 7cc353df4f0993228984fcda3efb2c9181dddafb Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Thu, 13 Aug 2020 12:02:39 +0300 Subject: tdf#77794 writerfilter: compat15 - always bLayoutInCell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on observation (no documentation found), MS Word 2013 ignores the actual value of LayoutInCell and always considers it to be true. The UI shows it, but it is grayed out when CompatibilityMode == 15. The code's default value of bLayoutInCell is also true, so compatMode only needs to be checked if the property is actually set in the document. I probably could have left off the IsInTable() check, but decided to just be as safe as possible. I assume it doesn't apply, but LayoutInCell sets a IsFollowingTextFlow property - which might have meaning outside of a table in SW - I don't know. Change-Id: Ief073ea96c6c61efb3bcbbc11d114d739b04c3af Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100651 Tested-by: Jenkins Reviewed-by: László Németh Reviewed-by: Justin Luth --- writerfilter/source/dmapper/DomainMapper.cxx | 5 +++++ writerfilter/source/dmapper/DomainMapper.hxx | 2 ++ writerfilter/source/dmapper/GraphicImport.cxx | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'writerfilter/source') diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 1fa3d39a9b9b..b3cae27dd228 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3901,6 +3901,11 @@ StyleSheetTablePtr const & DomainMapper::GetStyleSheetTable( ) return m_pImpl->GetStyleSheetTable( ); } +SettingsTablePtr const & DomainMapper::GetSettingsTable() +{ + return m_pImpl->GetSettingsTable(); +} + GraphicZOrderHelper* DomainMapper::graphicZOrderHelper() { if (zOrderHelper == nullptr) diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index d84638f75840..34066b95cff1 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -22,6 +22,7 @@ #include #include "LoggedResources.hxx" #include "PropertyMap.hxx" +#include "SettingsTable.hxx" #include #include @@ -103,6 +104,7 @@ public: OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ); StyleSheetTablePtr const & GetStyleSheetTable( ); + SettingsTablePtr const & GetSettingsTable(); GraphicZOrderHelper* graphicZOrderHelper(); GraphicNamingHelper& GetGraphicNamingHelper(); diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index cf27a30c49f3..dde3e1adb3b7 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -625,7 +625,9 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) case NS_ooxml::LN_CT_Anchor_locked: // 90990; - ignored break; case NS_ooxml::LN_CT_Anchor_layoutInCell: // 90991; - ignored - m_pImpl->bLayoutInCell = nIntValue != 0; + // Starting in MSO 2013, anchors are ALWAYS considered to be laid out in table cell. + m_pImpl->bLayoutInCell = nIntValue != 0 || + (m_pImpl->rDomainMapper.GetSettingsTable()->GetWordCompatibilityMode() > 14 && m_pImpl->rDomainMapper.IsInTable()); break; case NS_ooxml::LN_CT_Anchor_hidden: // 90992; - ignored break; -- cgit