diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-16 15:12:54 +0100 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-16 20:30:57 +0100 |
commit | 286e2f5c6ec829bc0987b1be7016699f7ef03e5e (patch) | |
tree | 2fc69714c8ed08cb0827b09b27585676d21ddd21 | |
parent | c454a0cd0cc7b315b1353b151a2e95654df72c69 (diff) |
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.
Change-Id: I4e7d3490674c5f86bec5c7c6e1c975dcafd7c265
-rw-r--r-- | svx/source/svdraw/svdograf.cxx | 2 | ||||
-rw-r--r-- | sw/CppunitTest_sw_odfexport.mk | 4 | ||||
-rw-r--r-- | sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt | bin | 0 -> 169400 bytes | |||
-rw-r--r-- | sw/qa/extras/odfexport/odfexport.cxx | 50 | ||||
-rw-r--r-- | sw/source/core/graphic/ndgrf.cxx | 4 |
5 files changed, 59 insertions, 1 deletions
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index c2bbeb1135e6..40d652b3ba99 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -1351,7 +1351,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 080a840aa8ff..97398af0a756 100644 --- a/sw/CppunitTest_sw_odfexport.mk +++ b/sw/CppunitTest_sw_odfexport.mk @@ -80,6 +80,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 Binary files differnew file mode 100644 index 000000000000..867c075c41b4 --- /dev/null +++ b/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx index c1405407d5d0..d7360ba7651a 100644 --- a/sw/qa/extras/odfexport/odfexport.cxx +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -17,6 +17,9 @@ #include <com/sun/star/text/RelOrientation.hpp> #include <com/sun/star/text/XDocumentIndex.hpp> #include <com/sun/star/drawing/TextVerticalAdjust.hpp> +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> +#include <officecfg/Office/Common.hxx> class Test : public SwModelTestBase { @@ -401,6 +404,53 @@ DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt") CPPUNIT_ASSERT_EQUAL(OUString("a"), xCell->getString()); } +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 f9cbb9cf016b..c6013af64a99 100644 --- a/sw/source/core/graphic/ndgrf.cxx +++ b/sw/source/core/graphic/ndgrf.cxx @@ -581,6 +581,10 @@ bool SwGrfNode::SwapIn( bool bWaitForData ) { bRet = ImportGraphic( *pStrm ); delete pStrm; + if( bRet ) + { + maGrfObj.SetUserData(); + } } } catch (const uno::Exception&) |