[Libreoffice-commits] core.git: comphelper/source

Andre Fischer af at apache.org
Sun May 12 12:13:58 PDT 2013


 comphelper/source/container/embeddedobjectcontainer.cxx |   24 +++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

New commits:
commit dbec45e8136a6de7968d93b2fc891d7409133b13
Author: Andre Fischer <af at apache.org>
Date:   Mon Jul 9 14:39:47 2012 +0000

    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

diff --git a/comphelper/source/container/embeddedobjectcontainer.cxx b/comphelper/source/container/embeddedobjectcontainer.cxx
index 870eb28..6acf6d8 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&)
                 {


More information about the Libreoffice-commits mailing list