From 0adf52a644aaf85ba2bd666147c62c134234ffbb Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 14 Mar 2021 14:42:15 +0300 Subject: tdf#141011: Postpone SwFieldDBPage::Reset to tab activation This way, it will only ask for password when dialog is switched to that tab. Change-Id: Ie2a453b0b6867ceb1ef3728a8565de4f6cbf4757 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112469 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- include/sfx2/tabdlg.hxx | 2 ++ sfx2/source/dialog/tabdlg.cxx | 7 ++++++- sw/source/ui/fldui/flddb.cxx | 4 ++++ sw/source/ui/fldui/flddb.hxx | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/sfx2/tabdlg.hxx b/include/sfx2/tabdlg.hxx index 6397868a21d0..daa092b8d9b7 100644 --- a/include/sfx2/tabdlg.hxx +++ b/include/sfx2/tabdlg.hxx @@ -213,6 +213,8 @@ public: virtual bool FillItemSet( SfxItemSet* ); virtual void Reset( const SfxItemSet* ); + // Allows to postpone some initialization to the first activation + virtual bool DeferResetToFirstActivation(); bool HasExchangeSupport() const { return bHasExchangeSupport; } diff --git a/sfx2/source/dialog/tabdlg.cxx b/sfx2/source/dialog/tabdlg.cxx index 6f71e91fea88..47fa332390db 100644 --- a/sfx2/source/dialog/tabdlg.cxx +++ b/sfx2/source/dialog/tabdlg.cxx @@ -169,6 +169,8 @@ void SfxTabPage::Reset( const SfxItemSet* ) { } +bool SfxTabPage::DeferResetToFirstActivation() { return false; } + void SfxTabPage::ActivatePage( const SfxItemSet& ) /* [Description] @@ -920,7 +922,10 @@ void SfxTabDialogController::CreatePages() pDataObject->xTabPage->SetUserData(sUserData); PageCreated(pDataObject->sId, *pDataObject->xTabPage); - pDataObject->xTabPage->Reset(m_pSet.get()); + if (pDataObject->xTabPage->DeferResetToFirstActivation()) + pDataObject->bRefresh = true; // Reset will be called in ActivatePageHdl + else + pDataObject->xTabPage->Reset(m_pSet.get()); } } diff --git a/sw/source/ui/fldui/flddb.cxx b/sw/source/ui/fldui/flddb.cxx index 963e1834533e..14492377629b 100644 --- a/sw/source/ui/fldui/flddb.cxx +++ b/sw/source/ui/fldui/flddb.cxx @@ -178,6 +178,10 @@ void SwFieldDBPage::Reset(const SfxItemSet*) } } +// SwFieldDBPage may ask for password to select current document's data source, +// so only do that when activating the page, not when dialog is creating all pages +bool SwFieldDBPage::DeferResetToFirstActivation() { return true; } + bool SwFieldDBPage::FillItemSet(SfxItemSet* ) { OUString sTableName; diff --git a/sw/source/ui/fldui/flddb.hxx b/sw/source/ui/fldui/flddb.hxx index e507fcb86ee0..b25c38699234 100644 --- a/sw/source/ui/fldui/flddb.hxx +++ b/sw/source/ui/fldui/flddb.hxx @@ -70,6 +70,7 @@ public: virtual bool FillItemSet( SfxItemSet* rSet ) override; virtual void Reset( const SfxItemSet* rSet ) override; + virtual bool DeferResetToFirstActivation() override; virtual void FillUserData() override; void ActivateMailMergeAddress(); -- cgit v1.2.3