summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-09-13 15:26:41 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-09-15 11:55:28 +0000
commit74844277cc2194c9e43f5bd7a6f78a9603da32f3 (patch)
tree71fe0efd482ee745fb203481447ddbec44d4a769
parentf78ad80e5562567e8612269b8bed1283bafb6198 (diff)
disable generation of ole previews in ODF format until after load
so the user update links dialog can control their generation SdrEmbedObjectLink becomes exposed to calc so it can detect if the link dialog needs to be used to update ole links. Change-Id: Id1dd7ea17342140eab9307d546528747e3a98090 Reviewed-on: https://gerrit.libreoffice.org/28879 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--embeddedobj/source/commonembedding/visobj.cxx5
-rw-r--r--include/svx/svdoole2.hxx16
-rw-r--r--sc/inc/documentlinkmgr.hxx5
-rw-r--r--sc/source/ui/docshell/docsh.cxx7
-rw-r--r--sc/source/ui/docshell/docsh4.cxx12
-rw-r--r--sc/source/ui/docshell/documentlinkmgr.cxx26
-rw-r--r--sc/source/ui/view/tabvwsh4.cxx2
-rw-r--r--sd/source/core/drawdoc.cxx6
-rw-r--r--sd/source/ui/docshell/docshel4.cxx4
-rw-r--r--svx/source/svdraw/svdoole2.cxx16
-rw-r--r--sw/source/core/doc/DocumentLinksAdministrationManager.cxx21
-rw-r--r--sw/source/uibase/app/docshini.cxx5
12 files changed, 90 insertions, 35 deletions
diff --git a/embeddedobj/source/commonembedding/visobj.cxx b/embeddedobj/source/commonembedding/visobj.cxx
index fea7c3a2cf0a..6bf9c49e84e2 100644
--- a/embeddedobj/source/commonembedding/visobj.cxx
+++ b/embeddedobj/source/commonembedding/visobj.cxx
@@ -174,7 +174,10 @@ embed::VisualRepresentation SAL_CALL OCommonEmbeddedObject::getPreferredVisualRe
bool bBackToLoaded = false;
if ( m_nObjectState == embed::EmbedStates::LOADED )
{
- changeState( embed::EmbedStates::RUNNING );
+ awt::Size aOrigSize = getVisualAreaSize(nAspect);
+ changeState(embed::EmbedStates::RUNNING);
+ if (aOrigSize != getVisualAreaSize(nAspect))
+ setVisualAreaSize(nAspect, aOrigSize);
// the links should be switched back to loaded state for now to avoid locking problems
bBackToLoaded = m_bIsLink;
diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx
index 3d78224af842..345f6ebba16b 100644
--- a/include/svx/svdoole2.hxx
+++ b/include/svx/svdoole2.hxx
@@ -22,6 +22,7 @@
#include <svx/svdorect.hxx>
#include <svx/svxdllapi.h>
+#include <sfx2/linkmgr.hxx>
#include <com/sun/star/uno/Reference.h>
@@ -175,6 +176,21 @@ public:
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
};
+class SVX_DLLPUBLIC SdrEmbedObjectLink : public sfx2::SvBaseLink
+{
+ SdrOle2Obj* pObj;
+
+public:
+ explicit SdrEmbedObjectLink(SdrOle2Obj* pObj);
+ virtual ~SdrEmbedObjectLink() override;
+
+ virtual void Closed() override;
+ virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(
+ const OUString& rMimeType, const css::uno::Any & rValue ) override;
+
+ bool Connect() { return GetRealObject() != nullptr; }
+};
+
#endif // INCLUDED_SVX_SVDOOLE2_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/documentlinkmgr.hxx b/sc/inc/documentlinkmgr.hxx
index 4553470af3e8..d5d801a4aeb2 100644
--- a/sc/inc/documentlinkmgr.hxx
+++ b/sc/inc/documentlinkmgr.hxx
@@ -55,14 +55,17 @@ public:
bool idleCheckLinks();
bool hasDdeLinks() const;
+ bool hasDdeOrOleLinks() const;
- bool updateDdeLinks( vcl::Window* pWin );
+ bool updateDdeOrOleLinks(vcl::Window* pWin);
void updateDdeLink( const OUString& rAppl, const OUString& rTopic, const OUString& rItem );
size_t getDdeLinkCount() const;
void disconnectDdeLinks();
+private:
+ bool hasDdeOrOleLinks(bool bDde, bool bOle) const;
};
}
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 175059a09ada..dadb9c5c22d4 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -567,9 +567,12 @@ bool ScDocShell::Load( SfxMedium& rMedium )
GetUndoManager()->Clear();
- bool bRet = SfxObjectShell::Load( rMedium );
- if( bRet )
+ bool bRet = SfxObjectShell::Load(rMedium);
+ if (bRet)
{
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = getEmbeddedObjectContainer();
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false);
+
if (GetMedium())
{
const SfxUInt16Item* pUpdateDocItem = SfxItemSet::GetItem<SfxUInt16Item>(rMedium.GetItemSet(), SID_UPDATEDOCMODE, false);
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index 9d3fcb3b08b7..6d0f62a2e3d3 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -30,6 +30,7 @@ using namespace ::com::sun::star;
#include "scitems.hxx"
#include <editeng/flstitem.hxx>
#include <sfx2/fcontnr.hxx>
+#include <sfx2/linkmgr.hxx>
#include <sfx2/objface.hxx>
#include <sfx2/docfile.hxx>
#include <svtools/ehdl.hxx>
@@ -42,6 +43,7 @@ using namespace ::com::sun::star;
#include <svx/dataaccessdescriptor.hxx>
#include <svx/drawitem.hxx>
#include <svx/fmshell.hxx>
+#include <svx/svdoole2.hxx>
#include <sfx2/passwd.hxx>
#include <sfx2/filedlghelper.hxx>
#include <sfx2/dispatch.hxx>
@@ -402,6 +404,9 @@ void ScDocShell::Execute( SfxRequest& rReq )
break;
case SID_UPDATETABLINKS:
{
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = getEmbeddedObjectContainer();
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(true);
+
ScDocument& rDoc = GetDocument();
ScLkUpdMode nSet = rDoc.GetLinkMode();
@@ -445,9 +450,9 @@ void ScDocShell::Execute( SfxRequest& rReq )
ReloadTabLinks();
aDocument.UpdateExternalRefLinks(GetActiveDialogParent());
- bool bAny = aDocument.GetDocLinkManager().updateDdeLinks(GetActiveDialogParent());
+ bool bAnyDde = aDocument.GetDocLinkManager().updateDdeOrOleLinks(GetActiveDialogParent());
- if (bAny)
+ if (bAnyDde)
{
// Formeln berechnen und painten wie im TrackTimeHdl
aDocument.TrackFormulas();
@@ -463,7 +468,10 @@ void ScDocShell::Execute( SfxRequest& rReq )
rReq.Done();
}
else
+ {
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false);
rReq.Ignore();
+ }
}
break;
diff --git a/sc/source/ui/docshell/documentlinkmgr.cxx b/sc/source/ui/docshell/documentlinkmgr.cxx
index 02f00e9068df..520b8542afc0 100644
--- a/sc/source/ui/docshell/documentlinkmgr.cxx
+++ b/sc/source/ui/docshell/documentlinkmgr.cxx
@@ -23,7 +23,7 @@
#include <sc.hrc>
#include <scresid.hxx>
-#include <sfx2/linkmgr.hxx>
+#include <svx/svdoole2.hxx>
#include <vcl/layout.hxx>
#include <memory>
@@ -115,6 +115,16 @@ bool DocumentLinkManager::idleCheckLinks()
bool DocumentLinkManager::hasDdeLinks() const
{
+ return hasDdeOrOleLinks(true, false);
+}
+
+bool DocumentLinkManager::hasDdeOrOleLinks() const
+{
+ return hasDdeOrOleLinks(true, true);
+}
+
+bool DocumentLinkManager::hasDdeOrOleLinks(bool bDde, bool bOle) const
+{
if (!mpImpl->mpLinkManager)
return false;
@@ -122,14 +132,16 @@ bool DocumentLinkManager::hasDdeLinks() const
for (const auto & rLink : rLinks)
{
sfx2::SvBaseLink* pBase = rLink.get();
- if (dynamic_cast<ScDdeLink*>(pBase))
+ if (bDde && dynamic_cast<ScDdeLink*>(pBase))
+ return true;
+ if (bOle && dynamic_cast<SdrEmbedObjectLink*>(pBase))
return true;
}
return false;
}
-bool DocumentLinkManager::updateDdeLinks( vcl::Window* pWin )
+bool DocumentLinkManager::updateDdeOrOleLinks( vcl::Window* pWin )
{
if (!mpImpl->mpLinkManager)
return false;
@@ -143,6 +155,14 @@ bool DocumentLinkManager::updateDdeLinks( vcl::Window* pWin )
for (const auto & rLink : rLinks)
{
sfx2::SvBaseLink* pBase = rLink.get();
+
+ SdrEmbedObjectLink* pOleLink = dynamic_cast<SdrEmbedObjectLink*>(pBase);
+ if (pOleLink)
+ {
+ pOleLink->Update();
+ continue;
+ }
+
ScDdeLink* pDdeLink = dynamic_cast<ScDdeLink*>(pBase);
if (!pDdeLink)
continue;
diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx
index 7e7dba3106d1..6da7a8a0f784 100644
--- a/sc/source/ui/view/tabvwsh4.cxx
+++ b/sc/source/ui/view/tabvwsh4.cxx
@@ -1566,7 +1566,7 @@ void ScTabViewShell::Construct( TriState nForceDesignMode )
if (!bLink)
{
const sc::DocumentLinkManager& rMgr = rDoc.GetDocLinkManager();
- if (rMgr.hasDdeLinks() || rDoc.HasAreaLinks())
+ if (rMgr.hasDdeOrOleLinks() || rDoc.HasAreaLinks())
bLink = true;
}
if (bLink)
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index c448609864e9..809ed3e61daf 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -720,6 +720,12 @@ void SdDrawDocument::UpdateAllLinks()
{
s_pDocLockedInsertingLinks = this; // lock inserting links. only links in this document should by resolved
+ if (mpDocSh)
+ {
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = mpDocSh->getEmbeddedObjectContainer();
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(true);
+ }
+
pLinkManager->UpdateAllLinks(); // query box: update all links?
if (s_pDocLockedInsertingLinks == this)
diff --git a/sd/source/ui/docshell/docshel4.cxx b/sd/source/ui/docshell/docshel4.cxx
index 71746fdaf002..3668a9588d0e 100644
--- a/sd/source/ui/docshell/docshel4.cxx
+++ b/sd/source/ui/docshell/docshel4.cxx
@@ -293,8 +293,10 @@ bool DrawDocShell::Load( SfxMedium& rMedium )
}
bRet = SfxObjectShell::Load( rMedium );
- if( bRet )
+ if (bRet)
{
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = getEmbeddedObjectContainer();
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false);
bRet = SdXMLFilter( rMedium, *this, SDXMLMODE_Normal, SotStorage::GetVersion( rMedium.GetStorage() ) ).Import( nError );
}
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 4bc6459ae437..2c9bdca4c8d1 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -58,7 +58,6 @@
#include <comphelper/classids.hxx>
#include <sot/formats.hxx>
-#include <sfx2/linkmgr.hxx>
#include <svtools/transfer.hxx>
#include <cppuhelper/implbase.hxx>
@@ -569,21 +568,6 @@ void SdrLightEmbeddedClient_Impl::setWindow(const uno::Reference< awt::XWindow >
m_xWindow = _xWindow;
}
-class SdrEmbedObjectLink : public sfx2::SvBaseLink
-{
- SdrOle2Obj* pObj;
-
-public:
- explicit SdrEmbedObjectLink(SdrOle2Obj* pObj);
- virtual ~SdrEmbedObjectLink() override;
-
- virtual void Closed() override;
- virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(
- const OUString& rMimeType, const css::uno::Any & rValue ) override;
-
- bool Connect() { return GetRealObject() != nullptr; }
-};
-
SdrEmbedObjectLink::SdrEmbedObjectLink(SdrOle2Obj* pObject):
::sfx2::SvBaseLink( ::SfxLinkUpdateMode::ONCALL, SotClipboardFormatId::SVXB ),
pObj(pObject)
diff --git a/sw/source/core/doc/DocumentLinksAdministrationManager.cxx b/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
index ea88e9a81753..0949aa77d582 100644
--- a/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
+++ b/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
@@ -201,12 +201,6 @@ void DocumentLinksAdministrationManager::UpdateLinks()
{
if (!m_rDoc.GetDocShell())
return;
- sal_uInt16 nLinkMode = m_rDoc.GetDocumentSettingManager().getLinkUpdateMode(true);
- sal_uInt16 nUpdateDocMode = m_rDoc.GetDocShell()->GetUpdateDocMode();
- if (nLinkMode == NEVER && nUpdateDocMode != document::UpdateDocMode::FULL_UPDATE)
- return;
- if (GetLinkManager().GetLinks().empty())
- return;
SfxObjectCreateMode eMode = m_rDoc.GetDocShell()->GetCreateMode();
if (eMode == SfxObjectCreateMode::INTERNAL)
return;
@@ -216,6 +210,12 @@ void DocumentLinksAdministrationManager::UpdateLinks()
return;
if (m_rDoc.GetDocShell()->IsPreview())
return;
+ if (GetLinkManager().GetLinks().empty())
+ return;
+ sal_uInt16 nLinkMode = m_rDoc.GetDocumentSettingManager().getLinkUpdateMode(true);
+ sal_uInt16 nUpdateDocMode = m_rDoc.GetDocShell()->GetUpdateDocMode();
+ if (nLinkMode == NEVER && nUpdateDocMode != document::UpdateDocMode::FULL_UPDATE)
+ return;
bool bAskUpdate = nLinkMode == MANUAL;
bool bUpdate = true;
@@ -234,14 +234,21 @@ void DocumentLinksAdministrationManager::UpdateLinks()
bAskUpdate = true;
}
}
- if( bUpdate )
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = m_rDoc.GetDocShell()->getEmbeddedObjectContainer();
+ if (bUpdate)
{
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(true);
+
SfxMedium* pMedium = m_rDoc.GetDocShell()->GetMedium();
SfxFrame* pFrame = pMedium ? pMedium->GetLoadTargetFrame() : nullptr;
vcl::Window* pDlgParent = pFrame ? &pFrame->GetWindow() : nullptr;
GetLinkManager().UpdateAllLinks( bAskUpdate, true, false, pDlgParent );
}
+ else
+ {
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false);
+ }
}
bool DocumentLinksAdministrationManager::GetData( const OUString& rItem, const OUString& rMimeType,
diff --git a/sw/source/uibase/app/docshini.cxx b/sw/source/uibase/app/docshini.cxx
index 5cb5c5c88dba..51955a3b4c3a 100644
--- a/sw/source/uibase/app/docshini.cxx
+++ b/sw/source/uibase/app/docshini.cxx
@@ -500,8 +500,11 @@ bool SwDocShell::Load( SfxMedium& rMedium )
m_pDoc->getIDocumentDrawModelAccess().GetDrawModel()->SetAnchoredTextOverflowLegacy(true);
}
- if( SfxObjectShell::Load( rMedium ))
+ if (SfxObjectShell::Load(rMedium))
{
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = getEmbeddedObjectContainer();
+ rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false);
+
SAL_INFO( "sw.ui", "after SfxInPlaceObject::Load" );
if (m_pDoc) // for last version!!
RemoveLink(); // release the existing