summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-05-11 19:16:06 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-05-12 18:03:06 +0200
commite5c33076ab2a4d995e312908ca482b56dd502189 (patch)
tree637d97878ee371578596c18a6fe0263674147cdf /sfx2
parent59b5be40056721218be7304607c4eeaa339b5cba (diff)
avoid cost of NamedValueCollection in SfxBaseModel::attachResource
which wants to construct a whole map just to extract some properties Change-Id: I79ea0e2d53c2b4aa8182b0622fe0cda2eaacef0f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134224 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/doc/sfxbasemodel.cxx69
1 files changed, 33 insertions, 36 deletions
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index c0f677ad5da6..4d95e47ba1be 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -857,50 +857,47 @@ sal_Bool SAL_CALL SfxBaseModel::attachResource( const OUString&
SfxObjectShell* pObjectShell = m_pData->m_pObjectShell.get();
- ::comphelper::NamedValueCollection aArgs( rArgs );
-
Sequence< sal_Int32 > aWinExtent;
- if ( ( aArgs.get( "WinExtent" ) >>= aWinExtent )&& ( aWinExtent.getLength() == 4 ) )
- {
- tools::Rectangle aVisArea( aWinExtent[0], aWinExtent[1], aWinExtent[2], aWinExtent[3] );
- aVisArea = OutputDevice::LogicToLogic(aVisArea, MapMode(MapUnit::Map100thMM), MapMode(pObjectShell->GetMapUnit()));
- pObjectShell->SetVisArea( aVisArea );
- }
-
- bool bBreakMacroSign = false;
- if ( aArgs.get( "BreakMacroSignature" ) >>= bBreakMacroSign )
+ for (const beans::PropertyValue & rProp : rArgs)
{
- pObjectShell->BreakMacroSign_Impl( bBreakMacroSign );
+ if (rProp.Name == "WinExtent" && (rProp.Value >>= aWinExtent) && ( aWinExtent.getLength() == 4 ) )
+ {
+ tools::Rectangle aVisArea( aWinExtent[0], aWinExtent[1], aWinExtent[2], aWinExtent[3] );
+ aVisArea = OutputDevice::LogicToLogic(aVisArea, MapMode(MapUnit::Map100thMM), MapMode(pObjectShell->GetMapUnit()));
+ pObjectShell->SetVisArea( aVisArea );
+ }
+ bool bBreakMacroSign = false;
+ if ( rProp.Name == "BreakMacroSignature" && (rProp.Value >>= bBreakMacroSign) )
+ {
+ pObjectShell->BreakMacroSign_Impl( bBreakMacroSign );
+ }
+ bool bMacroEventRead = false;
+ if ( rProp.Name == "MacroEventRead" && (rProp.Value >>= bMacroEventRead) && bMacroEventRead)
+ {
+ pObjectShell->SetMacroCallsSeenWhileLoading();
+ }
}
-
- bool bMacroEventRead = false;
- if ((aArgs.get("MacroEventRead") >>= bMacroEventRead) && bMacroEventRead)
+ Sequence<beans::PropertyValue> aStrippedArgs(rArgs.getLength());
+ beans::PropertyValue* pStripped = aStrippedArgs.getArray();
+ for (const beans::PropertyValue & rProp : rArgs)
{
- pObjectShell->SetMacroCallsSeenWhileLoading();
+ if (rProp.Name == "WinExtent"
+ || rProp.Name == "BreakMacroSignature"
+ || rProp.Name == "MacroEventRead"
+ || rProp.Name == "Stream"
+ || rProp.Name == "InputStream"
+ || rProp.Name == "URL"
+ || rProp.Name == "Frame"
+ || rProp.Name == "Password"
+ || rProp.Name == "EncryptionData")
+ continue;
+ *pStripped++ = rProp;
}
-
- static constexpr OUStringLiteral sWinExtent = u"WinExtent";
- static constexpr OUStringLiteral sBreakMacroSignature = u"BreakMacroSignature";
- static constexpr OUStringLiteral sMacroEventRead = u"MacroEventRead";
- static constexpr OUStringLiteral sStream = u"Stream";
- static constexpr OUStringLiteral sInputStream = u"InputStream";
- static constexpr OUStringLiteral sURL = u"URL";
- static constexpr OUStringLiteral sFrame = u"Frame";
- static constexpr OUStringLiteral sPassword = u"Password";
- static constexpr OUStringLiteral sEncryptionData = u"EncryptionData";
- aArgs.remove( sWinExtent );
- aArgs.remove( sBreakMacroSignature );
- aArgs.remove( sMacroEventRead );
- aArgs.remove( sStream );
- aArgs.remove( sInputStream );
- aArgs.remove( sURL );
- aArgs.remove( sFrame );
- aArgs.remove( sPassword );
- aArgs.remove( sEncryptionData );
+ aStrippedArgs.realloc(pStripped - aStrippedArgs.getArray());
// TODO/LATER: all the parameters that are accepted by ItemSet of the DocShell must be removed here
- m_pData->m_seqArguments = aArgs.getPropertyValues();
+ m_pData->m_seqArguments = aStrippedArgs;
SfxMedium* pMedium = pObjectShell->GetMedium();
if ( pMedium )