summaryrefslogtreecommitdiff
path: root/comphelper
diff options
context:
space:
mode:
authorAndre Fischer <af@apache.org>2012-07-09 14:39:47 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-05-12 20:11:39 +0100
commitdbec45e8136a6de7968d93b2fc891d7409133b13 (patch)
treea1576f807590f16cdc0451b08b795dbeefb13a4d /comphelper
parent5de5a073e0c64699e716d71e1d6b700380eeced6 (diff)
Resolves: #i120168# Do not call storeOwn() when not necessary
Patch by: lizh.fee Review by: Andre Fischer (cherry picked from commit 822661c165198467b56fa2a1034ddc002ba99f7e) Change-Id: Ibb8e39b98360ef918890a627449c654e311f0f21
Diffstat (limited to 'comphelper')
-rw-r--r--comphelper/source/container/embeddedobjectcontainer.cxx24
1 files changed, 23 insertions, 1 deletions
diff --git a/comphelper/source/container/embeddedobjectcontainer.cxx b/comphelper/source/container/embeddedobjectcontainer.cxx
index 870eb281d8f8..6acf6d800c94 100644
--- a/comphelper/source/container/embeddedobjectcontainer.cxx
+++ b/comphelper/source/container/embeddedobjectcontainer.cxx
@@ -1508,7 +1508,29 @@ sal_Bool EmbeddedObjectContainer::StoreChildren(sal_Bool _bOasisFormat,sal_Bool
try
{
//TODO/LATER: only storing if changed!
- xPersist->storeOwn();
+ //xPersist->storeOwn(); //commented, i120168
+
+ // begin:all charts will be persited as xml format on disk when saving, which is time consuming.
+ // '_bObjectsOnly' mean we are storing to alien formats.
+ // 'isStorageElement' mean current object is NOT an MS OLE format. (may also include in future), i120168
+ if (_bObjectsOnly && (nCurState == embed::EmbedStates::LOADED || nCurState == embed::EmbedStates::RUNNING)
+ && (pImpl->mxStorage->isStorageElement( *pIter ) ))
+ {
+ uno::Reference< util::XModifiable > xModifiable( xObj->getComponent(), uno::UNO_QUERY );
+ if ( xModifiable.is() && xModifiable->isModified())
+ {
+ xPersist->storeOwn();
+ }
+ else
+ {
+ //do nothing.embeded model is not modified, no need to persist.
+ }
+ }
+ else //the embeded object is in active status, always store back it.
+ {
+ xPersist->storeOwn();
+ }
+ //end i120168
}
catch (const uno::Exception&)
{