tdf#126241: make sure to fill input stream before LockOrigFileOnDemand

Otherwise, the function returns early, without providing lock file
information to the caller.

Change-Id: I1740ff0f5a982f7b22f9e3dcdf97631ab6ea6fe0
Reviewed-on: https://gerrit.libreoffice.org/75465
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2019-07-12 15:46:45 +10:00
parent af4b31f55c
commit 60dffd8046

View File

@@ -484,10 +484,21 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
}
pMed->CloseAndRelease();
pMed->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, !( nOpenMode & StreamMode::WRITE ) ) );
pMed->SetOpenMode( nOpenMode );
// We need to clear the SID_DOC_READONLY item from the set, to allow
// MediaDescriptor::impl_openStreamWithURL (called indirectly by
// SfxMedium::CompleteReOpen) to properly fill input stream of the
// descriptor, even when the file can't be open in read-write mode.
// Only then can following call to SfxMedium::LockOrigFileOnDemand
// return proper information about who has locked the file, to show
// in the SfxQueryOpenAsTemplate box below; otherwise it exits right
// after call to SfxMedium::GetMedium_Impl. This mimics what happens
// when the file is opened initially, when filter detection code also
// calls MediaDescriptor::impl_openStreamWithURL without the item set.
pMed->GetItemSet()->ClearItem(SID_DOC_READONLY);
pMed->CompleteReOpen();
pMed->GetItemSet()->Put(
SfxBoolItem(SID_DOC_READONLY, !(nOpenMode & StreamMode::WRITE)));
if ( nOpenMode & StreamMode::WRITE )
{
auto eResult = pMed->LockOrigFileOnDemand(