include/sfx2/objsh.hxx | 14 ++++++++++++++ sfx2/source/doc/objstor.cxx | 2 ++ sw/inc/docsh.hxx | 13 ++++++++----- sw/source/uibase/app/docsh.cxx | 10 ++++------ 4 files changed, 28 insertions(+), 11 deletions(-)
New commits: commit ee8ba74cdec6b081bb42bcb3167087f43b07be00 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Wed Jul 29 17:45:03 2020 +0300 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Mar 22 11:37:26 2021 +0100 tdf#135244: move LockAllViews to SfxObjectShell ... so that it may be called from SfxObjectShell::SaveTo_Impl, and handle export cases in addition to save (as) handled in tdf#41063. Change-Id: Ie39196656dd1a95dcb6bab3ae8138c2f5c8729e6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99714 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112825 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx index 2d6a4c3cd2d3..9c331092bda1 100644 --- a/include/sfx2/objsh.hxx +++ b/include/sfx2/objsh.hxx @@ -218,6 +218,13 @@ protected: // helper method void AddToRecentlyUsedList(); + // Parent class for actual guard objects that would do useful work + class LockAllViewsGuard + { + public: + virtual ~LockAllViewsGuard() {} + }; + public: SFX_DECL_INTERFACE(SFX_INTERFACE_SFXDOCSH) @@ -770,6 +777,13 @@ public: /// Gets the certificate that is already picked by the user but not yet used for signing. css::uno::Reference<css::security::XCertificate> GetSignPDFCertificate() const; + + // Lock all unlocked views, and returns a guard object which unlocks those views when destructed + virtual std::unique_ptr<LockAllViewsGuard> LockAllViews() + { + return std::make_unique<LockAllViewsGuard>(); + } + }; #define SFX_GLOBAL_CLASSID \ diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index 2141a590b212..9e54c3771f92 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -1128,6 +1128,8 @@ bool SfxObjectShell::SaveTo_Impl UpdateDocInfoForSave(); ModifyBlocker_Impl aMod(this); + // tdf#41063, tdf#135244: prevent jumping to cursor at any temporary modification + auto aViewGuard(LockAllViews()); std::shared_ptr<const SfxFilter> pFilter = rMedium.GetFilter(); if ( !pFilter ) diff --git a/sw/inc/docsh.hxx b/sw/inc/docsh.hxx index 08eaf82c3e67..7c94345ba7d3 100644 --- a/sw/inc/docsh.hxx +++ b/sw/inc/docsh.hxx @@ -320,16 +320,19 @@ public: void CallAutomationDocumentEventSinks(const OUString& Method, css::uno::Sequence< css::uno::Any >& Arguments); void RegisterAutomationDocumentObject(css::uno::Reference< ooo::vba::word::XDocument > const& xDocument); - class LockAllViewsGuard + // Lock all unlocked views, and returns a guard object which unlocks those views when destructed + virtual std::unique_ptr<LockAllViewsGuard> LockAllViews() override; + +protected: + class LockAllViewsGuard_Impl : public LockAllViewsGuard { std::vector<SwViewShell*> m_aViewWasUnLocked; public: - explicit LockAllViewsGuard(SwViewShell* pViewShell); - ~LockAllViewsGuard(); + explicit LockAllViewsGuard_Impl(SwViewShell* pViewShell); + ~LockAllViewsGuard_Impl(); }; - // Lock all unlocked views, and returns a guard object which unlocks those views when destructed - std::unique_ptr<LockAllViewsGuard> LockAllViews(); + }; /** Find the right DocShell and create a new one: diff --git a/sw/source/uibase/app/docsh.cxx b/sw/source/uibase/app/docsh.cxx index 151770695eeb..3704184eaf26 100644 --- a/sw/source/uibase/app/docsh.cxx +++ b/sw/source/uibase/app/docsh.cxx @@ -379,7 +379,7 @@ bool SwDocShell::Save() return !nErr.IsError(); } -SwDocShell::LockAllViewsGuard::LockAllViewsGuard(SwViewShell* pViewShell) +SwDocShell::LockAllViewsGuard_Impl::LockAllViewsGuard_Impl(SwViewShell* pViewShell) { if (!pViewShell) return; @@ -393,23 +393,21 @@ SwDocShell::LockAllViewsGuard::LockAllViewsGuard(SwViewShell* pViewShell) } } -SwDocShell::LockAllViewsGuard::~LockAllViewsGuard() +SwDocShell::LockAllViewsGuard_Impl::~LockAllViewsGuard_Impl() { for (SwViewShell* pShell : m_aViewWasUnLocked) pShell->LockView(false); } -std::unique_ptr<SwDocShell::LockAllViewsGuard> SwDocShell::LockAllViews() +std::unique_ptr<SfxObjectShell::LockAllViewsGuard> SwDocShell::LockAllViews() { - return std::make_unique<LockAllViewsGuard>(GetEditShell()); + return std::make_unique<LockAllViewsGuard_Impl>(GetEditShell()); } // Save using the Defaultformat bool SwDocShell::SaveAs( SfxMedium& rMedium ) { SwWait aWait( *this, true ); - // tdf#41063: prevent jumping to cursor at any temporary modification - auto aViewGuard(LockAllViews()); //#i3370# remove quick help to prevent saving of autocorrection suggestions if (m_pView) m_pView->GetEditWin().StopQuickHelp(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits