summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2016-02-01 22:00:37 +0100
committerJan-Marek Glogowski <glogow@fbihome.de>2016-03-24 22:40:58 +0100
commitc0e1567f9415f7b2605f12e322f19b1436e2c81a (patch)
treec11f41b451fc10151595e99f325a1cf14693f381
parentc2cdb65373eb25719a606c06ddb11ed198257627 (diff)
MM: remove lock from saved documents
Actually we have to call DoSaveCompleted to get rid of the locking. Instead this adds a parameter to skip the recent file registration used in non bCreateSingleFile modes. Change-Id: I57151f08ad8d737007da84c4566685cc37612dfb
-rw-r--r--include/sfx2/objsh.hxx2
-rw-r--r--sc/source/ui/docshell/docsh.cxx4
-rw-r--r--sc/source/ui/inc/docsh.hxx2
-rw-r--r--sfx2/source/doc/objstor.cxx5
-rw-r--r--sw/source/uibase/dbui/dbmgr.cxx11
5 files changed, 13 insertions, 11 deletions
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index 9f2f71a4529f..ccc72134f2d7 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -327,7 +327,7 @@ public:
bool DoSaveObjectAs( SfxMedium &rNewStor, bool bCommit );
// TODO/LATER: currently only overridden in Calc, should be made non-virtual
- virtual bool DoSaveCompleted( SfxMedium* pNewStor=nullptr );
+ virtual bool DoSaveCompleted( SfxMedium* pNewStor=nullptr, bool bRegisterRecent=true );
bool LoadOwnFormat( SfxMedium& pMedium );
virtual bool SaveAsOwnFormat( SfxMedium& pMedium );
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 22f3af51e2d1..10d054008d2f 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -2449,9 +2449,9 @@ bool ScDocShell::SaveCompleted( const uno::Reference < embed::XStorage >& xStor
return SfxObjectShell::SaveCompleted( xStor );
}
-bool ScDocShell::DoSaveCompleted( SfxMedium * pNewStor )
+bool ScDocShell::DoSaveCompleted( SfxMedium * pNewStor, bool bRegisterRecent )
{
- bool bRet = SfxObjectShell::DoSaveCompleted( pNewStor );
+ bool bRet = SfxObjectShell::DoSaveCompleted( pNewStor, bRegisterRecent );
// SC_HINT_DOC_SAVED for change ReadOnly -> Read/Write
Broadcast( SfxSimpleHint( SC_HINT_DOC_SAVED ) );
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index 69421be79811..079b542e68dc 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -203,7 +203,7 @@ public:
virtual void LoadStyles( SfxObjectShell &rSource ) override;
virtual bool SaveCompleted( const css::uno::Reference< css::embed::XStorage >& ) override; // SfxInPlaceObject
- virtual bool DoSaveCompleted( SfxMedium * pNewStor) override; // SfxObjectShell
+ virtual bool DoSaveCompleted( SfxMedium * pNewStor, bool bRegisterRecent ) override; // SfxObjectShell
virtual bool QuerySlotExecutable( sal_uInt16 nSlotId ) override;
virtual void Draw( OutputDevice *, const JobSetup & rSetup,
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index b6de496cd083..62edc749a5de 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -1942,7 +1942,7 @@ bool SfxObjectShell::DoSaveAs( SfxMedium& rMedium )
}
-bool SfxObjectShell::DoSaveCompleted( SfxMedium* pNewMed )
+bool SfxObjectShell::DoSaveCompleted( SfxMedium* pNewMed, bool bRegisterRecent )
{
bool bOk = true;
bool bMedChanged = pNewMed && pNewMed!=pMedium;
@@ -2092,7 +2092,8 @@ bool SfxObjectShell::DoSaveCompleted( SfxMedium* pNewMed )
pMedium->ClearBackup_Impl();
pMedium->LockOrigFileOnDemand( true, false );
- AddToRecentlyUsedList();
+ if (bRegisterRecent)
+ AddToRecentlyUsedList();
return bOk;
}
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index cd2d4f93ec6c..517051f05f9f 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -858,7 +858,10 @@ static void lcl_SaveDebugDoc( SfxObjectShell *xTargetDocShell,
SfxMedium* pDstMed = new SfxMedium(
aTempFileURL.GetMainURL( INetURLObject::NO_DECODE ),
STREAM_STD_READWRITE );
- if( !xTargetDocShell->DoSaveAs( *pDstMed ) )
+ bool bAnyError = !xTargetDocShell->DoSaveAs( *pDstMed );
+ // xObjectShell->DoSaveCompleted crashes the mail merge unit tests, so skip it
+ bAnyError |= (0 != xTargetDocShell->GetError());
+ if( bAnyError )
SAL_WARN( "sw.mailmerge", "Error saving: " << aTempFile.GetURL() );
else
SAL_INFO( "sw.mailmerge", "Saved doc as: " << aTempFile.GetURL() );
@@ -898,12 +901,10 @@ static bool lcl_SaveDoc(
rWorkShell.ConvertFieldsToText();
bool bAnyError = !xObjectShell->DoSaveAs(*pDstMed);
-
// Actually this should be a bool... so in case of email and individual
// files, where this is set, we skip the the recently used handling
- if( !decodedURL )
- xObjectShell->DoSaveCompleted( pDstMed );
- bAnyError = bAnyError || xObjectShell->GetError();
+ bAnyError |= !xObjectShell->DoSaveCompleted( pDstMed, !decodedURL );
+ bAnyError |= (0 != xObjectShell->GetError());
if( bAnyError )
{
// error message ??