[Libreoffice-commits] core.git: officecfg/registry sd/CppunitTest_sd_misc_tests.mk sd/qa sd/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Feb 19 13:56:44 UTC 2019


 officecfg/registry/schema/org/openoffice/Office/Common.xcs |    9 
 sd/CppunitTest_sd_misc_tests.mk                            |    4 
 sd/qa/unit/misc-tests.cxx                                  |  141 +++++++++++--
 sd/source/ui/view/frmview.cxx                              |   20 +
 4 files changed, 148 insertions(+), 26 deletions(-)

New commits:
commit c40b39375dbc1248c8c067ee709ad3bdcb4a01ee
Author:     Regina Henschel <rb.henschel at t-online.de>
AuthorDate: Wed Feb 13 16:56:30 2019 +0100
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Tue Feb 19 14:56:18 2019 +0100

    tdf#123440 new expert option 'WriteLayerStateAsConfigItem'
    
    LibreOffice writes the ODF attributes 'display' and 'protected' of
    the 'layer' element since version 6.2. It can read the ODF
    attributes since version 6.2. But they are only evaluated if non of
    the config items VisibleLayers, PrintableLayers and LockedLayers
    exists. If the option is set to 'false' no config items are written
    and so reading of ODF attributes is forced. Version 6.1 is the last
    one which needs the config items. So until version 6.1 is end of
    life the default value is 'true'.
    The patch introduces this option and adapts the relevant unit
    tests to consider the option.
    
    Change-Id: I2f8fc61506b14820f6bee8bf153d89363690b9e8
    Reviewed-on: https://gerrit.libreoffice.org/67784
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 324f22055eb7..277960fe719d 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -5403,6 +5403,15 @@
         </info>
         <value>false</value>
       </prop>
+      <prop oor:name="WriteLayerStateAsConfigItem" oor:type="xs:boolean" oor:nillable="false">
+        <info>
+          <desc>If 'true', the config items VisibleLayers, PrintableLayers and
+          LockedLayers are written to 'office:settings' element, otherwise not.
+          Since LO 6.2 the ODF attributes of 'draw:layer' element are used on
+          file open, if these config items do not exist.</desc>
+        </info>
+        <value>true</value>
+      </prop>
       <prop oor:name="ExperimentalMode" oor:type="xs:boolean" oor:nillable="false">
         <info>
           <desc>Determines if various experimental, and potentially unstable
diff --git a/sd/CppunitTest_sd_misc_tests.mk b/sd/CppunitTest_sd_misc_tests.mk
index 5566bd3a090b..d4924c867605 100644
--- a/sd/CppunitTest_sd_misc_tests.mk
+++ b/sd/CppunitTest_sd_misc_tests.mk
@@ -118,6 +118,10 @@ $(eval $(call gb_CppunitTest_use_components,sd_misc_tests,\
     xmlsecurity/util/xmlsecurity \
 ))
 
+$(eval $(call gb_CppunitTest_use_custom_headers,sd_misc_tests,\
+	officecfg/registry \
+))
+
 $(eval $(call gb_CppunitTest_use_configuration,sd_misc_tests))
 
 # vim: set noet sw=4 ts=4:
diff --git a/sd/qa/unit/misc-tests.cxx b/sd/qa/unit/misc-tests.cxx
index 2a7404524614..ff89fb2fecf9 100644
--- a/sd/qa/unit/misc-tests.cxx
+++ b/sd/qa/unit/misc-tests.cxx
@@ -7,6 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <officecfg/Office/Common.hxx>
 #include "sdmodeltestbase.hxx"
 
 #include <vcl/svapp.hxx>
@@ -58,7 +59,6 @@
 #include <vcl/keycodes.hxx>
 
 
-
 using namespace ::com::sun::star;
 
 /// Impress miscellaneous tests.
@@ -72,8 +72,10 @@ public:
     void testFillGradient();
     void testTdf44774();
     void testTdf38225();
-    void testTdf101242_ODF();
-    void testTdf101242_settings();
+    void testTdf101242_ODF_no_settings();
+    void testTdf101242_ODF_add_settings();
+    void testTdf101242_settings_keep();
+    void testTdf101242_settings_remove();
     void testTdf119392();
     void testTdf67248();
     void testTdf119956();
@@ -87,8 +89,10 @@ public:
     CPPUNIT_TEST(testFillGradient);
     CPPUNIT_TEST(testTdf44774);
     CPPUNIT_TEST(testTdf38225);
-    CPPUNIT_TEST(testTdf101242_ODF);
-    CPPUNIT_TEST(testTdf101242_settings);
+    CPPUNIT_TEST(testTdf101242_ODF_no_settings);
+    CPPUNIT_TEST(testTdf101242_ODF_add_settings);
+    CPPUNIT_TEST(testTdf101242_settings_keep);
+    CPPUNIT_TEST(testTdf101242_settings_remove);
     CPPUNIT_TEST(testTdf119392);
     CPPUNIT_TEST(testTdf67248);
     CPPUNIT_TEST(testTdf119956);
@@ -471,17 +475,28 @@ void SdMiscTest::testTdf120527()
 
 /// Draw miscellaneous tests.
 
-void SdMiscTest::testTdf101242_ODF()
+// Since LO 6.2 the visible/printable/locked information for layers is always
+// written as ODF attributes draw:display and draw:protected. It is only read from
+// there, if the config items VisibleLayers, PrintableLayers and LockedLayers do
+// not exist. The user option WriteLayerStateAsConfigItem can be set to 'true' to
+// write these config items in addition to the ODF attributes for to produce
+// documents for older LO versions or Apache OpenOffice. With value 'false' no
+// config items are written. The 'testTdf101242_xyz' tests combinate source
+// files with and without config items with option values 'true' and 'false'.
+
+void SdMiscTest::testTdf101242_ODF_add_settings()
 {
     // Loads a document, which has the visible/printable/locked information for layers
-    // only in the ODF attributes draw:display and draw:protected.
-    // The resaved document should still have the ODF attributes and in addition (at least in a
-    // transition period) the Visible, Printable and Locked items in settings.xml.
-
-    // loading and saving document
+    // only in the ODF attributes draw:display and draw:protected. The resaved document
+    // should still have the ODF attributes and in addition the config items in settings.xml.
     // "Load" is needed for to handle layers, simple "loadURL" does not work.
     sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf101242_ODF.odg"), ODG);
     CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
+
+    // Saving including items in settings.xml
+    std::shared_ptr<comphelper::ConfigurationChanges> pBatch( comphelper::ConfigurationChanges::create() );
+    officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::set(true, pBatch);
+    pBatch->commit();
     utl::TempFile aTempFile;
     aTempFile.EnableKillingFile();
     save(xDocShRef.get(), getFormat(ODG), aTempFile );
@@ -520,16 +535,60 @@ void SdMiscTest::testTdf101242_ODF()
     xDocShRef->DoClose();
 }
 
-void SdMiscTest::testTdf101242_settings()
+void SdMiscTest::testTdf101242_ODF_no_settings()
 {
     // Loads a document, which has the visible/printable/locked information for layers
-    // only in the items in settings.xml That is the case for all old documents.
-    // The resaved document should still have these items in settings.xml (at least in a
-    // transition period) and in addition the ODF attributes draw:display and draw:protected.
+    // only in the ODF attributes draw:display and draw:protected. The resave document
+    // should have only the ODF attributes and no config items in settings.xml.
+    sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf101242_ODF.odg"), ODG);
+    CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
+
+    // Saving without items in settings.xml
+    std::shared_ptr<comphelper::ConfigurationChanges> pBatch( comphelper::ConfigurationChanges::create() );
+    officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::set(false, pBatch);
+    pBatch->commit();
+    utl::TempFile aTempFile;
+    aTempFile.EnableKillingFile();
+    save(xDocShRef.get(), getFormat(ODG), aTempFile );
+
+    // Verify, that the saved document still has the ODF attributes
+    xmlDocPtr pXmlDoc = parseExport(aTempFile, "styles.xml");
+    CPPUNIT_ASSERT_MESSAGE("Failed to get 'styles.xml'", pXmlDoc);
+    const OString sPathStart("/office:document-styles/office:master-styles/draw:layer-set/draw:layer");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='backgroundobjects' and @draw:protected='true']");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='controls' and @draw:display='screen']");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='measurelines' and @draw:display='printer']");
 
-    // loading and saving document
+    // Verify, that the saved document has no layer items in settings.xml
+    xmlDocPtr pXmlDoc2 = parseExport(aTempFile, "settings.xml");
+    CPPUNIT_ASSERT_MESSAGE("Failed to get 'settings.xml'", pXmlDoc2);
+    const OString sPathStart2("/office:document-settings/office:settings/config:config-item-set[@config:name='ooo:view-settings']/config:config-item-map-indexed[@config:name='Views']/config:config-item-map-entry");
+    xmlXPathObjectPtr pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='VisibleLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+    pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='PrintableLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+    pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='LockedLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+
+    xDocShRef->DoClose();
+}
+
+void SdMiscTest::testTdf101242_settings_keep()
+{
+    // Loads a document, which has the visible/printable/locked information for layers
+    // only in the config items in settings.xml. That is the case for all old documents.
+    // The resaved document should have the ODF attributes draw:display and draw:protected
+    // and should still have these config items in settings.xml.
     sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf101242_settings.odg"), ODG);
     CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
+
+    // Saving including items in settings.xml
+    std::shared_ptr<comphelper::ConfigurationChanges> pBatch( comphelper::ConfigurationChanges::create() );
+    officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::set(true, pBatch);
+    pBatch->commit();
     utl::TempFile aTempFile;
     aTempFile.EnableKillingFile();
     save(xDocShRef.get(), getFormat(ODG), aTempFile );
@@ -568,10 +627,56 @@ void SdMiscTest::testTdf101242_settings()
     xDocShRef->DoClose();
 }
 
+void SdMiscTest::testTdf101242_settings_remove()
+{
+    // Loads a document, which has the visible/printable/locked information for layers
+    // only in the config items in settings.xml. That is the case for all old documents.
+    // The resaved document should have only the ODF attributes draw:display and draw:protected
+    // and should have no config items in settings.xml.
+    sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("/sd/qa/unit/data/tdf101242_settings.odg"), ODG);
+    CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
+
+    // Saving without config items in settings.xml
+    std::shared_ptr<comphelper::ConfigurationChanges> pBatch( comphelper::ConfigurationChanges::create() );
+    officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::set(false, pBatch);
+    pBatch->commit();
+    utl::TempFile aTempFile;
+    aTempFile.EnableKillingFile();
+    save(xDocShRef.get(), getFormat(ODG), aTempFile );
+
+    // Verify, that the saved document has the ODF attributes
+    xmlDocPtr pXmlDoc = parseExport(aTempFile, "styles.xml");
+    CPPUNIT_ASSERT_MESSAGE("Failed to get 'styles.xml'", pXmlDoc);
+    const OString sPathStart("/office:document-styles/office:master-styles/draw:layer-set/draw:layer");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='backgroundobjects' and @draw:protected='true']");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='controls' and @draw:display='screen']");
+    assertXPath(pXmlDoc, sPathStart + "[@draw:name='measurelines' and @draw:display='printer']");
+
+    // Verify, that the saved document has no layer items in settings.xml
+    xmlDocPtr pXmlDoc2 = parseExport(aTempFile, "settings.xml");
+    CPPUNIT_ASSERT_MESSAGE("Failed to get 'settings.xml'", pXmlDoc2);
+    const OString sPathStart2("/office:document-settings/office:settings/config:config-item-set[@config:name='ooo:view-settings']/config:config-item-map-indexed[@config:name='Views']/config:config-item-map-entry");
+    xmlXPathObjectPtr pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='VisibleLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+    pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='PrintableLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+    pXmlObj=getXPathNode(pXmlDoc2, sPathStart2 + "/config:config-item[@config:name='LockedLayers']");
+    CPPUNIT_ASSERT_EQUAL(0, xmlXPathNodeSetGetLength(pXmlObj->nodesetval));
+    xmlXPathFreeObject(pXmlObj);
+
+    xDocShRef->DoClose();
+}
+
 void SdMiscTest::testTdf119392()
 {
     // Loads a document which has two user layers "V--" and "V-L". Inserts a new layer "-P-" between them.
-    // Checks, that the bitfields in the saved file have the bits in the correct order.
+    // Checks, that the bitfields in the saved file have the bits in the correct order, in case
+    // option WriteLayerAsConfigItem is true and the config items are written.
+    std::shared_ptr<comphelper::ConfigurationChanges> batch( comphelper::ConfigurationChanges::create() );
+    officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::set(true, batch);
+    batch->commit();
 
     sd::DrawDocShellRef xDocShRef = Load(m_directories.getURLFromSrc("sd/qa/unit/data/tdf119392_InsertLayer.odg"), ODG);
     CPPUNIT_ASSERT_MESSAGE("Failed to load file.", xDocShRef.is());
@@ -586,7 +691,7 @@ void SdMiscTest::testTdf119392()
     aTempFile.EnableKillingFile();
     save(xDocShRef.get(), getFormat(ODG), aTempFile );
 
-    // Verify correct bit order in bitfield in the items in settings.xml
+    // Verify correct bit order in bitfield in the config items in settings.xml
     xmlDocPtr pXmlDoc = parseExport(aTempFile, "settings.xml");
     CPPUNIT_ASSERT_MESSAGE("Failed to get 'settings.xml'", pXmlDoc);
     const OString sPathStart("/office:document-settings/office:settings/config:config-item-set[@config:name='ooo:view-settings']/config:config-item-map-indexed[@config:name='Views']/config:config-item-map-entry");
diff --git a/sd/source/ui/view/frmview.cxx b/sd/source/ui/view/frmview.cxx
index 287ea241ac45..8243d15768ee 100644
--- a/sd/source/ui/view/frmview.cxx
+++ b/sd/source/ui/view/frmview.cxx
@@ -42,6 +42,7 @@
 #include <framework/FrameworkHelper.hxx>
 #include <comphelper/processfactory.hxx>
 #include <sfx2/viewfrm.hxx>
+#include <officecfg/Office/Common.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -395,16 +396,19 @@ void FrameView::WriteUserDataSequence ( css::uno::Sequence < css::beans::Propert
     aUserData.addValue( sUNO_View_EliminatePolyPointLimitAngle, makeAny( static_cast<sal_Int32>(GetEliminatePolyPointLimitAngle()) ) );
     aUserData.addValue( sUNO_View_IsEliminatePolyPoints, makeAny( IsEliminatePolyPoints() ) );
 
-    SdrLayerAdmin& rLayerAdmin = getSdrModelFromSdrView().GetLayerAdmin();
-    Any aAny;
-    rLayerAdmin.QueryValue(GetVisibleLayers(), aAny);
-    aUserData.addValue( sUNO_View_VisibleLayers, aAny );
+    if ( officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::get() )
+    {
+        SdrLayerAdmin& rLayerAdmin = getSdrModelFromSdrView().GetLayerAdmin();
+        Any aAny;
+        rLayerAdmin.QueryValue(GetVisibleLayers(), aAny);
+        aUserData.addValue( sUNO_View_VisibleLayers, aAny );
 
-    rLayerAdmin.QueryValue(GetPrintableLayers(), aAny);
-    aUserData.addValue( sUNO_View_PrintableLayers, aAny );
+        rLayerAdmin.QueryValue(GetPrintableLayers(), aAny);
+        aUserData.addValue( sUNO_View_PrintableLayers, aAny );
 
-    rLayerAdmin.QueryValue(GetLockedLayers(), aAny);
-    aUserData.addValue( sUNO_View_LockedLayers, aAny );
+        rLayerAdmin.QueryValue(GetLockedLayers(), aAny);
+        aUserData.addValue( sUNO_View_LockedLayers, aAny );
+    }
 
     aUserData.addValue( sUNO_View_NoAttribs, makeAny( IsNoAttribs() ) );
     aUserData.addValue( sUNO_View_NoColors, makeAny( IsNoColors() ) );


More information about the Libreoffice-commits mailing list