diff options
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/filter/html/htmlform.cxx | 16 | ||||
-rw-r--r-- | sw/source/filter/html/htmlgrin.cxx | 19 | ||||
-rw-r--r-- | sw/source/filter/html/swhtml.cxx | 1 | ||||
-rw-r--r-- | sw/source/filter/html/swhtml.hxx | 3 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par.cxx | 13 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par.hxx | 2 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par5.cxx | 2 |
7 files changed, 52 insertions, 4 deletions
diff --git a/sw/source/filter/html/htmlform.cxx b/sw/source/filter/html/htmlform.cxx index 78c8d820df34..74ae9f78b1a9 100644 --- a/sw/source/filter/html/htmlform.cxx +++ b/sw/source/filter/html/htmlform.cxx @@ -18,6 +18,7 @@ */ #include <hintids.hxx> +#include <comphelper/documentinfo.hxx> #include <comphelper/string.hxx> #include <vcl/svapp.hxx> #include <vcl/wrkwin.hxx> @@ -733,7 +734,7 @@ void SwHTMLParser::SetControlSize( const uno::Reference< drawing::XShape >& rSha rShape->setSize( aSz ); } -static void lcl_html_setEvents( +static bool lcl_html_setEvents( const uno::Reference< script::XEventAttacherManager > & rEvtMn, sal_uInt32 nPos, const SvxMacroTableDtor& rMacroTable, const std::vector<OUString>& rUnoMacroTable, @@ -762,7 +763,7 @@ static void lcl_html_setEvents( } if( 0==nEvents ) - return; + return false; Sequence<script::ScriptEventDescriptor> aDescs( nEvents ); script::ScriptEventDescriptor* pDescs = aDescs.getArray(); @@ -820,6 +821,7 @@ static void lcl_html_setEvents( } } rEvtMn->registerScriptEvents( nPos, aDescs ); + return true; } static void lcl_html_getEvents( const OUString& rOption, const OUString& rValue, @@ -1188,10 +1190,12 @@ uno::Reference< drawing::XShape > SwHTMLParser::InsertControl( // To prevent previous JavaScript-Events from being called, these events will only be set retroactively if( !rMacroTable.empty() || !rUnoMacroTable.empty() ) { - lcl_html_setEvents( m_pFormImpl->GetControlEventManager(), + bool bHasEvents = lcl_html_setEvents( m_pFormImpl->GetControlEventManager(), rFormComps->getCount() - 1, rMacroTable, rUnoMacroTable, rUnoMacroParamTable, GetScriptTypeString(m_pFormImpl->GetHeaderAttrs()) ); + if (bHasEvents) + NotifyMacroEventRead(); } if( bSetFCompPropSet ) @@ -1353,10 +1357,14 @@ void SwHTMLParser::NewForm( bool bAppend ) Any aAny( &xForm, cppu::UnoType<XForm>::get()); rForms->insertByIndex( rForms->getCount(), aAny ); if( !aMacroTable.empty() ) - lcl_html_setEvents( m_pFormImpl->GetFormEventManager(), + { + bool bHasEvents = lcl_html_setEvents( m_pFormImpl->GetFormEventManager(), rForms->getCount() - 1, aMacroTable, aUnoMacroTable, aUnoMacroParamTable, rDfltScriptType ); + if (bHasEvents) + NotifyMacroEventRead(); + } } void SwHTMLParser::EndForm( bool bAppend ) diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx index 9ca5a22dcc00..85991d6e0888 100644 --- a/sw/source/filter/html/htmlgrin.cxx +++ b/sw/source/filter/html/htmlgrin.cxx @@ -20,6 +20,7 @@ #include <memory> #include <hintids.hxx> #include <comphelper/string.hxx> +#include <comphelper/documentinfo.hxx> #include <vcl/svapp.hxx> #include <vcl/wrkwin.hxx> #include <svx/svxids.hrc> @@ -871,7 +872,10 @@ IMAGE_SETEVENT: } if( !aMacroItem.GetMacroTable().empty() ) + { + NotifyMacroEventRead(); pFlyFormat->SetFormatAttr( aMacroItem ); + } // tdf#87083 If the graphic has not been loaded yet, then load it now. // Otherwise it may be loaded during the first paint of the object and it @@ -1304,7 +1308,10 @@ ANCHOR_SETEVENT: aINetFormat.SetName( aName ); if( !aMacroTable.empty() ) + { + NotifyMacroEventRead(); aINetFormat.SetMacroTable( &aMacroTable ); + } // set the default attribute InsertAttr(&m_xAttrTab->pINetFormat, aINetFormat, xCntxt.get()); @@ -1516,4 +1523,16 @@ void SwHTMLParser::StripTrailingPara() } } +void SwHTMLParser::NotifyMacroEventRead() +{ + if (m_bNotifyMacroEventRead) + return; + SwDocShell *pDocSh = m_xDoc->GetDocShell(); + if (!pDocSh) + return; + uno::Reference<frame::XModel> const xModel(pDocSh->GetBaseModel()); + comphelper::DocumentInfo::notifyMacroEventRead(xModel); + m_bNotifyMacroEventRead = true; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx index 0a9f87b2f5bb..546040c6dcb1 100644 --- a/sw/source/filter/html/swhtml.cxx +++ b/sw/source/filter/html/swhtml.cxx @@ -311,6 +311,7 @@ SwHTMLParser::SwHTMLParser( SwDoc* pD, SwPaM& rCursor, SvStream& rIn, m_bRemoveHidden( false ), m_bBodySeen( false ), m_bReadingHeaderOrFooter( false ), + m_bNotifyMacroEventRead( false ), m_isInTableStructure(false), m_nTableDepth( 0 ), m_pTempViewFrame(nullptr) diff --git a/sw/source/filter/html/swhtml.hxx b/sw/source/filter/html/swhtml.hxx index 6aa702995615..b931042a3fe7 100644 --- a/sw/source/filter/html/swhtml.hxx +++ b/sw/source/filter/html/swhtml.hxx @@ -452,6 +452,7 @@ class SwHTMLParser : public SfxHTMLParser, public SwClient bool m_bBodySeen : 1; bool m_bReadingHeaderOrFooter : 1; + bool m_bNotifyMacroEventRead : 1; bool m_isInTableStructure; sal_Int32 m_nTableDepth; @@ -923,6 +924,8 @@ public: bool IsReqIF() const; + void NotifyMacroEventRead(); + /// Strips query and fragment from a URL path if base URL is a file:// one. static OUString StripQueryFromPath(const OUString& rBase, const OUString& rPath); }; diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index 11712b8520d6..c1ac48f408fe 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -42,6 +42,7 @@ #include <unotools/tempfile.hxx> #include <comphelper/docpasswordrequest.hxx> +#include <comphelper/documentinfo.hxx> #include <comphelper/propertysequence.hxx> #include <editeng/outlobj.hxx> @@ -4308,6 +4309,7 @@ SwWW8ImplReader::SwWW8ImplReader(sal_uInt8 nVersionPara, SotStorage* pStorage, , m_aTOXEndCps() , m_aCurrAttrCP(-1) , m_bOnLoadingMain(false) + , m_bNotifyMacroEventRead(false) { m_pStrm->SetEndian( SvStreamEndian::LITTLE ); m_aApos.push_back(false); @@ -4698,6 +4700,8 @@ void SwWW8ImplReader::StoreMacroCmds() try { + NotifyMacroEventRead(); + uno::Reference < io::XStream > xStream = xRoot->openStreamElement( SL::aMSMacroCmds, embed::ElementModes::READWRITE ); std::unique_ptr<SvStream> xOutStream(::utl::UcbStreamHelper::CreateStream(xStream)); @@ -6555,4 +6559,13 @@ std::unique_ptr<SfxItemSet> SwWW8ImplReader::SetCurrentItemSet(std::unique_ptr<S return xRet; } +void SwWW8ImplReader::NotifyMacroEventRead() +{ + if (m_bNotifyMacroEventRead) + return; + uno::Reference<frame::XModel> const xModel(m_rDoc.GetDocShell()->GetBaseModel()); + comphelper::DocumentInfo::notifyMacroEventRead(xModel); + m_bNotifyMacroEventRead = true; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index 097b330c0c74..f043d44b9a08 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -1376,6 +1376,7 @@ private: cp_vector m_aEndParaPos; WW8_CP m_aCurrAttrCP; bool m_bOnLoadingMain:1; + bool m_bNotifyMacroEventRead:1; const SprmReadInfo& GetSprmReadInfo(sal_uInt16 nId) const; @@ -1911,6 +1912,7 @@ public: // really private, but can only be done public void PostProcessAttrs(); void ReadEmbeddedData(SvStream& rStrm, SwDocShell const * pDocShell, struct HyperLinksTable& hlStr); + void NotifyMacroEventRead(); }; bool CanUseRemoteLink(const OUString &rGrfName); diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index 8b276eab3138..2d708ff1128e 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -2272,6 +2272,8 @@ eF_ResT SwWW8ImplReader::Read_F_Macro( WW8FieldDesc*, OUString& rStr) if( aName.isEmpty() ) return eF_ResT::TAGIGN; // makes no sense without Macro-Name + NotifyMacroEventRead(); + //try converting macro symbol according to macro name bool bApplyWingdings = ConvertMacroSymbol( aName, aVText ); aName = "StarOffice.Standard.Modul1." + aName; |