summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-07-11 10:50:29 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-07-11 11:56:58 -0400
commitabaa319d3bfe3d50c978835c92aea600fddd5241 (patch)
treeffe14d31aa70f364cea54dc55c077c63b05592bf /svx
parent4467e9243818b111286fa013bba5b84cc0187160 (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 4a7ecf00303e..f52d1c70c09c 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>
@@ -1938,6 +1939,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();
@@ -2171,13 +2180,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;