[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.2' - svx/source sw/CppunitTest_sw_odfexport.mk sw/qa sw/source

Zolnai Tamás tamas.zolnai at collabora.com
Sun Nov 16 12:34:33 PST 2014


 svx/source/svdraw/svdograf.cxx                                            |    2 
 sw/CppunitTest_sw_odfexport.mk                                            |    4 
 sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt |binary
 sw/qa/extras/odfexport/odfexport.cxx                                      |   50 ++++++++++
 sw/source/core/graphic/ndgrf.cxx                                          |    4 
 5 files changed, 59 insertions(+), 1 deletion(-)

New commits:
commit 2080fad9ed431b9d78f292fa14d31fef2c244287
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Sun Nov 16 21:33:56 2014 +0100

    Related fdo#82953: Forget package URL of image after it is loaded
    
    It causes problems if we handle those imported images differently which
    are identified by a package URL, so after the first load remove
    this URL and handle images on the same way as inserted images.
    
    Some related bugs:
    * #i44367#
    * #i124946#
    * #i114361#
    * fdo#73270
    
    The image in the test document has a special ID which is different
    from that one which is generated by LO internally so after ODF export
    the new generated image URL is different from the imported one.
    
    (cherry picked from commit 286e2f5c6ec829bc0987b1be7016699f7ef03e5e)
    
    Change-Id: I4e7d3490674c5f86bec5c7c6e1c975dcafd7c265

diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 0446977..cb31fc2 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -1411,7 +1411,7 @@ IMPL_LINK( SdrGrafObj, ImpSwapHdl, GraphicObject*, pO )
                         const OUString aNewUserData( pGraphic->GetUserData() );
 
                         pGraphic->SetGraphic( aGraphic );
-                        pGraphic->SetUserData( aNewUserData );
+                        pGraphic->SetUserData();
 
                         // Graphic successfully swapped in.
                         pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
diff --git a/sw/CppunitTest_sw_odfexport.mk b/sw/CppunitTest_sw_odfexport.mk
index 8c0842e..1a08488 100644
--- a/sw/CppunitTest_sw_odfexport.mk
+++ b/sw/CppunitTest_sw_odfexport.mk
@@ -79,6 +79,10 @@ $(eval $(call gb_CppunitTest_use_components,sw_odfexport,\
     xmloff/util/xo \
 ))
 
+$(eval $(call gb_CppunitTest_use_custom_headers,sw_odfexport,\
+    officecfg/registry \
+))
+
 $(eval $(call gb_CppunitTest_use_configuration,sw_odfexport))
 
 $(eval $(call gb_CppunitTest_use_unittest_configuration,sw_odfexport))
diff --git a/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt b/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt
new file mode 100644
index 0000000..867c075
Binary files /dev/null and b/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 5ef7ca4..a0ddfe5 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -13,6 +13,9 @@
 #include <com/sun/star/awt/Gradient.hpp>
 #include <com/sun/star/drawing/FillStyle.hpp>
 #include <com/sun/star/table/ShadowFormat.hpp>
+#include <com/sun/star/awt/XBitmap.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <officecfg/Office/Common.hxx>
 
 class Test : public SwModelTestBase
 {
@@ -310,6 +313,53 @@ DECLARE_ODFEXPORT_TEST(testTextframeTransparentShadow, "textframe-transparent-sh
     CPPUNIT_ASSERT_EQUAL(sal_Int32(25), getProperty<sal_Int32>(xPicture, "ShadowTransparence"));
 }
 
+DECLARE_ODFEXPORT_TEST(testImageWithSpecialID, "document_with_two_images_with_special_IDs.odt")
+{
+    // Here the problem was that LO did not handle well those image URLs in the ODT file which are
+    // not match with that one which is generated by LO internaly (based on the image's size, type and so on)
+
+    // Trigger swap out mechanism to test swapped state factor too.
+    boost::shared_ptr< comphelper::ConfigurationChanges > batch(comphelper::ConfigurationChanges::create());
+    officecfg::Office::Common::Cache::GraphicManager::TotalCacheSize::set(sal_Int32(1), batch);
+    batch->commit();
+
+    uno::Reference<drawing::XShape> xImage = getShape(1);
+    uno::Reference< beans::XPropertySet > XPropSet( xImage, uno::UNO_QUERY_THROW );
+    // Check URL
+    {
+        OUString sURL;
+        XPropSet->getPropertyValue("GraphicURL") >>= sURL;
+        CPPUNIT_ASSERT(sURL != OUString("vnd.sun.star.GraphicObject:00000000000000000000000000000000"));
+    }
+    // Check size
+    {
+        uno::Reference<graphic::XGraphic> xGraphic;
+        XPropSet->getPropertyValue("Graphic") >>= xGraphic;
+        uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY);
+        CPPUNIT_ASSERT(xBitmap.is());
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(610), xBitmap->getSize().Width );
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(381), xBitmap->getSize().Height );
+    }
+    // Second Image
+    xImage = getShape(2);
+    XPropSet.set( xImage, uno::UNO_QUERY_THROW );
+    // Check URL
+    {
+        OUString sURL;
+        XPropSet->getPropertyValue("GraphicURL") >>= sURL;
+        CPPUNIT_ASSERT(sURL != OUString("vnd.sun.star.GraphicObject:00000000000000000000000000000000"));
+    }
+    // Check size
+    {
+        uno::Reference<graphic::XGraphic> xGraphic;
+        XPropSet->getPropertyValue("Graphic") >>= xGraphic;
+        uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY);
+        CPPUNIT_ASSERT(xBitmap.is());
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(900), xBitmap->getSize().Width );
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(600), xBitmap->getSize().Height );
+    }
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index c6d3c54..98a105a 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -575,6 +575,10 @@ short SwGrfNode::SwapIn( sal_Bool bWaitForData )
                     if ( ImportGraphic( *pStrm ) )
                         nRet = 1;
                     delete pStrm;
+                    if( nRet )
+                    {
+                        maGrfObj.SetUserData();
+                    }
                 }
             }
             catch (const uno::Exception&)


More information about the Libreoffice-commits mailing list