summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-07-11 10:50:29 -0400
committerAndras Timar <andras.timar@collabora.com>2014-07-21 18:50:17 +0200
commit9ba9d810d9e17a7e3a3e0885235924f4c480c3b0 (patch)
tree936162e29e77789b546b1348ac1f6be6ae43d1f6 /svx
parentb7bd1b66287d9d337234ac1b9b50a1fafba7dd1e (diff)
bnc#883684: Better fix for this.
Instead of making all chart objects exempt from unloading, check each OLE object on whether or not it already has its persistent storage created. If not, don't unload it else it would have nothing to load back from once unloaded. (cherry picked from commit a0bd5587a5ac62974bdb10731d3fd21584521a72) Conflicts: svx/source/svdraw/svdetc.cxx embeddedobj/source/commonembedding/miscobj.cxx embeddedobj/source/commonembedding/persistence.cxx include/svx/svdoole2.hxx svx/source/svdraw/svdoole2.cxx Change-Id: I2312e86c9376d3699ef4aa1e0cf2f4c04f706c1e
Diffstat (limited to 'svx')
-rw-r--r--svx/source/svdraw/svdetc.cxx4
-rw-r--r--svx/source/svdraw/svdoole2.cxx16
2 files changed, 9 insertions, 11 deletions
diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx
index afcc792aa992..4caca9417a72 100644
--- a/svx/source/svdraw/svdetc.cxx
+++ b/svx/source/svdraw/svdetc.cxx
@@ -165,10 +165,6 @@ void OLEObjCache::UnloadOnDemand()
void OLEObjCache::InsertObj(SdrOle2Obj* pObj)
{
- if (!pObj->IsUnloadable())
- // This OLE object is exempt from automatic unloading.
- return;
-
if ( !empty() )
{
SdrOle2Obj* pExistingObj = front();
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index f68f5d795623..f1f27a833371 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -25,6 +25,7 @@
#include <com/sun/star/embed/ElementModes.hpp>
#include <com/sun/star/embed/EmbedMisc.hpp>
#include <com/sun/star/embed/Aspects.hpp>
+#include <com/sun/star/embed/XEmbedPersist2.hpp>
#include <com/sun/star/embed/XInplaceClient.hpp>
#include <com/sun/star/embed/XInplaceObject.hpp>
#include <com/sun/star/embed/XLinkageSupport.hpp>
@@ -1926,6 +1927,14 @@ void SdrOle2Obj::NbcMove(const Size& rSize)
sal_Bool SdrOle2Obj::CanUnloadRunningObj( const uno::Reference< embed::XEmbeddedObject >& xObj, sal_Int64 nAspect )
{
+ uno::Reference<embed::XEmbedPersist2> xPersist(xObj, uno::UNO_QUERY);
+ if (xPersist.is())
+ {
+ if (!xPersist->isStored())
+ // It doesn't have persistent storage. We can't unload this.
+ return false;
+ }
+
sal_Bool bResult = sal_False;
sal_Int32 nState = xObj->getCurrentState();
@@ -2159,13 +2168,6 @@ sal_Bool SdrOle2Obj::IsCalc() const
return sal_False;
}
-bool SdrOle2Obj::IsUnloadable() const
-{
- // Right now, chart OLE objects are the only ones exempt from automatic
- // unloading.
- return !IsChart();
-}
-
uno::Reference< frame::XModel > SdrOle2Obj::GetParentXModel() const
{
uno::Reference< frame::XModel > xDoc;