diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-11 10:50:29 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-11 11:16:00 -0400 |
commit | a0bd5587a5ac62974bdb10731d3fd21584521a72 (patch) | |
tree | cfd7fc3ebd11f7e830551529a1be86b0d387d61b /svx | |
parent | 4cb52136220b417f09eb2156e11436ee0a06729f (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.
Change-Id: I2312e86c9376d3699ef4aa1e0cf2f4c04f706c1e
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdetc.cxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdoole2.cxx | 16 |
2 files changed, 9 insertions, 11 deletions
diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx index fad9bf8f01a1..b68c76fbdf16 100644 --- a/svx/source/svdraw/svdetc.cxx +++ b/svx/source/svdraw/svdetc.cxx @@ -167,10 +167,6 @@ void OLEObjCache::UnloadOnDemand() void OLEObjCache::InsertObj(SdrOle2Obj* pObj) { - if (!pObj->IsUnloadable()) - // This OLE object is exempt from automatic unloading. - return; - if (!maObjs.empty()) { SdrOle2Obj* pExistingObj = maObjs.front(); diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx index bcb7b762e81b..0d3ed8a27113 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> @@ -1956,6 +1957,14 @@ void SdrOle2Obj::NbcMove(const Size& rSize) 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; + } + bool bResult = false; sal_Int32 nState = xObj->getCurrentState(); @@ -2178,13 +2187,6 @@ bool SdrOle2Obj::IsCalc() const return 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; |