diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-16 21:33:56 +0100 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-11-16 21:33:56 +0100 |
commit | 2080fad9ed431b9d78f292fa14d31fef2c244287 (patch) | |
tree | b9bf7fed77749589cb929b69b5c428016988fb9e | |
parent | bc20268b0290cc1a3968121c12257c4be9fe3645 (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.
(cherry picked from commit 286e2f5c6ec829bc0987b1be7016699f7ef03e5e)
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 044697706228..cb31fc2c896f 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 8c0842eab28b..1a08488c8309 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 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 5ef7ca408499..a0ddfe5be393 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 c6d3c54504bf..98a105a180a9 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&) |