[Libreoffice-commits] core.git: include/sfx2 sfx2/source
Stephan Bergmann
sbergman at redhat.com
Wed Aug 24 13:18:30 UTC 2016
include/sfx2/docfile.hxx | 12 +++++++++---
include/sfx2/objsh.hxx | 1 +
sfx2/source/doc/docfile.cxx | 12 +++++++++---
sfx2/source/doc/objmisc.cxx | 5 +++++
sfx2/source/view/viewfrm.cxx | 3 ++-
5 files changed, 26 insertions(+), 7 deletions(-)
New commits:
commit 191c0a9e7719b777146430486d703641aaff43bf
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Wed Aug 24 15:14:38 2016 +0200
tdf#93630: Remember whether a doc was originally requested to be opened r/o
...so it'll be opened r/o again on SID_RELOAD. Needs addition of yet another
m_bOriginallyLoadedReadOnly state, after
a199cad8376a5470c50125def2738b44b55ec018 "tdf#65498, tdf#87545: Don't confuse
logically r/o doc with physically r/o" already added m_bOriginallyReadOnly.
Change-Id: I9c7129a6f1b0e7618be616d5897ee6ef29e0abb7
diff --git a/include/sfx2/docfile.hxx b/include/sfx2/docfile.hxx
index a08c22b..37576d1 100644
--- a/include/sfx2/docfile.hxx
+++ b/include/sfx2/docfile.hxx
@@ -178,11 +178,17 @@ public:
GetVersionList( bool _bNoReload = false );
SAL_WARN_UNUSED_RESULT bool IsReadOnly() const;
- // Whether the medium had originally been opened r/o, independent of later
- // changes via SetOpenMode; used to keep track of the "true" state of the
- // medium across toggles via SID_EDITDOC (which do change SetOpenMode):
+ // Whether the medium had originally been opened r/o (either because it is
+ // "physically" r/o, or because it was requested to be opended r/o,
+ // independent of later changes via SetOpenMode; used to keep track of the
+ // "true" state of the medium across toggles via SID_EDITDOC (which do
+ // change SetOpenMode):
SAL_WARN_UNUSED_RESULT bool IsOriginallyReadOnly() const;
+ // Whether the medium had originally been requested to be opened r/o,
+ // independent of later changes via SetOpenMode; used for SID_RELOAD:
+ SAL_WARN_UNUSED_RESULT bool IsOriginallyLoadedReadOnly() const;
+
css::uno::Reference< css::io::XInputStream > GetInputStream();
void CreateTempFile( bool bReplace = true );
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index b4fecfe..5a145df 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -283,6 +283,7 @@ public:
bool IsReadOnly() const;
bool IsReadOnlyMedium() const;
bool IsOriginallyReadOnlyMedium() const;
+ bool IsOriginallyLoadedReadOnlyMedium() const;
void SetReadOnlyUI( bool bReadOnly = true );
bool IsReadOnlyUI() const;
void SetNoName();
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 366a2f3..301a026 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -188,6 +188,7 @@ public:
bool m_bGotDateTime:1;
bool m_bRemoveBackup:1;
bool m_bOriginallyReadOnly:1;
+ bool m_bOriginallyLoadedReadOnly:1;
bool m_bTriedStorage:1;
bool m_bRemote:1;
bool m_bInputStreamIsReadOnly:1;
@@ -266,6 +267,7 @@ SfxMedium_Impl::SfxMedium_Impl() :
m_bGotDateTime( false ),
m_bRemoveBackup( false ),
m_bOriginallyReadOnly(false),
+ m_bOriginallyLoadedReadOnly(false),
m_bTriedStorage(false),
m_bRemote(false),
m_bInputStreamIsReadOnly(false),
@@ -3019,15 +3021,15 @@ SfxMedium::SfxMedium( const uno::Sequence<beans::PropertyValue>& aArgs ) :
}
}
- bool readOnly = false;
const SfxBoolItem* pReadOnlyItem = SfxItemSet::GetItem<SfxBoolItem>(pImpl->m_pSet, SID_DOC_READONLY, false);
if ( pReadOnlyItem && pReadOnlyItem->GetValue() )
- readOnly = true;
+ pImpl->m_bOriginallyLoadedReadOnly = true;
const SfxStringItem* pFileNameItem = SfxItemSet::GetItem<SfxStringItem>(pImpl->m_pSet, SID_FILE_NAME, false);
if (!pFileNameItem) throw uno::RuntimeException();
pImpl->m_aLogicName = pFileNameItem->GetValue();
- pImpl->m_nStorOpenMode = readOnly ? SFX_STREAM_READONLY : SFX_STREAM_READWRITE;
+ pImpl->m_nStorOpenMode = pImpl->m_bOriginallyLoadedReadOnly
+ ? SFX_STREAM_READONLY : SFX_STREAM_READWRITE;
Init_Impl();
}
@@ -3334,6 +3336,10 @@ bool SfxMedium::IsOriginallyReadOnly() const
return pImpl->m_bOriginallyReadOnly;
}
+bool SfxMedium::IsOriginallyLoadedReadOnly() const
+{
+ return pImpl->m_bOriginallyLoadedReadOnly;
+}
bool SfxMedium::SetWritableForUserOnly( const OUString& aURL )
{
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index 57551b7..201664b 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -382,6 +382,11 @@ bool SfxObjectShell::IsOriginallyReadOnlyMedium() const
return pMedium == nullptr || pMedium->IsOriginallyReadOnly();
}
+bool SfxObjectShell::IsOriginallyLoadedReadOnlyMedium() const
+{
+ return pMedium != nullptr && pMedium->IsOriginallyLoadedReadOnly();
+}
+
void SfxObjectShell::SetReadOnlyUI( bool bReadOnly )
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index a98f891..f1c93d8 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -615,7 +615,8 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
// let the current security settings be checked again
pNewSet->Put( SfxUInt16Item( SID_MACROEXECMODE, document::MacroExecMode::USE_CONFIG ) );
- if ( pSh->IsOriginallyReadOnlyMedium() )
+ if ( pSh->IsOriginallyReadOnlyMedium()
+ || pSh->IsOriginallyLoadedReadOnlyMedium() )
// edit mode is switched or reload of readonly document
pNewSet->Put( SfxBoolItem( SID_DOC_READONLY, true ) );
else
More information about the Libreoffice-commits
mailing list