diff options
author | Oliver Specht <oliver.specht@cib.de> | 2024-04-18 11:24:50 +0200 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2025-02-03 23:17:17 +0100 |
commit | cc0595e5598dd9bc0dac3f8815a2dabddf932b76 (patch) | |
tree | 70fb309f21b99663e1b2b3959fc21b7a17b6cb30 | |
parent | aaf14013a3fa97147f78159361d8b1148b91f5f4 (diff) |
tdf#146553 Enable additonal functions in editable section while in r/o mode
Insert/Edit table, insert lists, insert AutoText
automatic spell checking
Change-Id: Iccef3965316dc6079ea56a0283023c5a658512cc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165031
Tested-by: Jenkins
Tested-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
(cherry picked from commit 40436e1dfdad42690cc0cfc4781c38e5419e0dc5)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181001
Tested-by: allotropia jenkins <jenkins@allotropia.de>
-rw-r--r-- | sw/inc/viewopt.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/text/inftxt.cxx | 36 | ||||
-rw-r--r-- | sw/source/uibase/uiview/view.cxx | 4 | ||||
-rw-r--r-- | sw/source/uibase/uiview/view0.cxx | 2 |
4 files changed, 41 insertions, 3 deletions
diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx index 3a2148c7911c..a78cfb0aada8 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -343,7 +343,7 @@ public: { SetCoreOption(b, ViewOptFlags1::GridVisible); } bool IsOnlineSpell() const - { return !m_bReadonly && (m_nCoreOptions & ViewOptFlags1::OnlineSpell); } + { return bool(m_nCoreOptions & ViewOptFlags1::OnlineSpell); } void SetOnlineSpell( bool b ); bool IsViewMetaChars() const diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index c79567a33c7b..fd7093e7b8d7 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -49,14 +49,17 @@ #include <viewsh.hxx> #include <viewopt.hxx> #include <frmtool.hxx> +#include <fmteiro.hxx> #include <IDocumentSettingAccess.hxx> #include <IDocumentDeviceAccess.hxx> #include <IDocumentMarkAccess.hxx> #include <paratr.hxx> +#include <sectfrm.hxx> #include <rootfrm.hxx> #include "inftxt.hxx" #include <blink.hxx> #include <noteurl.hxx> +#include <flyfrm.hxx> #include "porftn.hxx" #include "porrst.hxx" #include "itratr.hxx" @@ -561,6 +564,30 @@ static bool lcl_IsDarkBackground( const SwTextPaintInfo& rInf ) return pCol->IsDark(); } +static bool lcl_IsFrameReadonly(SwTextFrame* pFrame) +{ + const SwFlyFrame* pFly; + const SwSection* pSection; + + if( pFrame && pFrame->IsInFly() && + (pFly = pFrame->FindFlyFrame())->GetFormat()->GetEditInReadonly().GetValue() && + pFly->Lower() && + !pFly->Lower()->IsNoTextFrame() ) + { + return false; + } + // edit in readonly sections + else if ( pFrame && pFrame->IsInSct() && + nullptr != ( pSection = pFrame->FindSctFrame()->GetSection() ) && + pSection->IsEditInReadonlyFlag() ) + { + return false; + } + + return true; +} + + void SwTextPaintInfo::DrawText_( const OUString &rText, const SwLinePortion &rPor, TextFrameIndex const nStart, TextFrameIndex const nLength, const bool bKern, const bool bWrong, @@ -617,7 +644,14 @@ void SwTextPaintInfo::DrawText_( const OUString &rText, const SwLinePortion &rPo bool bCfgIsAutoGrammar = false; SvtLinguConfig().GetProperty( UPN_IS_GRAMMAR_AUTO ) >>= bCfgIsAutoGrammar; const bool bBullet = OnWin() && GetOpt().IsBlank() && IsNoSymbol(); - const bool bTmpWrong = bWrong && OnWin() && GetOpt().IsOnlineSpell(); + bool bTmpWrong = bWrong && OnWin() && GetOpt().IsOnlineSpell(); + SfxObjectShell* pObjShell = m_pFrame->GetDoc().GetDocShell(); + if (bTmpWrong && pObjShell) + { + if (pObjShell->IsReadOnly() && lcl_IsFrameReadonly(m_pFrame)) + bTmpWrong = false; + } + const bool bTmpGrammarCheck = bGrammarCheck && OnWin() && bCfgIsAutoGrammar && GetOpt().IsOnlineSpell(); const bool bTmpSmart = bSmartTag && OnWin() && !GetOpt().IsPagePreview() && SwSmartTagMgr::Get().IsSmartTagsEnabled(); diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx index aee84c09aa3b..8703285ae7f3 100644 --- a/sw/source/uibase/uiview/view.cxx +++ b/sw/source/uibase/uiview/view.cxx @@ -438,6 +438,7 @@ void SwView::SelectShell() rDispatcher.Push( *m_pShell ); } m_pShell = new SwTextShell(*this); + rDispatcher.Push( *m_pShell ); if ( m_nSelectionType & SelectionType::Table ) { @@ -637,6 +638,9 @@ void SwView::CheckReadonlyState() SID_ATTR_PARA_MODEL, SID_PARA_DLG, FN_SELECT_PARA, SID_DEC_INDENT, SID_INC_INDENT, + FN_INSERT_TABLE, FN_FORMAT_TABLE_DLG, FN_EXPAND_GLOSSARY, + FN_NUM_BULLET_ON, FN_NUM_NUMBERING_ON, FN_SVX_SET_NUMBER, + FN_SVX_SET_BULLET, FN_SVX_SET_OUTLINE, SID_AUTOSPELL_CHECK, FN_SPELL_GRAMMAR_DIALOG }; static bool bFirst = true; diff --git a/sw/source/uibase/uiview/view0.cxx b/sw/source/uibase/uiview/view0.cxx index 79783e138496..a5a4f6306c94 100644 --- a/sw/source/uibase/uiview/view0.cxx +++ b/sw/source/uibase/uiview/view0.cxx @@ -227,7 +227,7 @@ void SwView::StateViewOptions(SfxItemSet &rSet) while(nWhich) { bool bReadonly = GetDocShell()->IsReadOnly(); - if ( bReadonly && nWhich != FN_VIEW_GRAPHIC ) + if ( bReadonly && nWhich != FN_VIEW_GRAPHIC && nWhich != SID_AUTOSPELL_CHECK ) { rSet.DisableItem(nWhich); nWhich = 0; |