diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-01-10 14:42:36 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2019-09-19 14:13:42 +0200 |
commit | 594498091c425e1e7ec09e69784f34723ea25c4d (patch) | |
tree | cb39cf751f0ce9be367d54d63f855c9053e5cfdf /sc | |
parent | 1fb358bcd50d6729dde8071c857206ce7560f1a0 (diff) |
make Format->Conditional Formatting->Manage dialog async
Change-Id: I13a40c13340ea34cbcbde11289d3420855a7264f
Reviewed-on: https://gerrit.libreoffice.org/66097
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit f548dfa29239913fd71be67eadc2905010cabd95)
Reviewed-on: https://gerrit.libreoffice.org/79121
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/condformat/condformatmgr.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 65 |
2 files changed, 36 insertions, 33 deletions
diff --git a/sc/source/ui/condformat/condformatmgr.cxx b/sc/source/ui/condformat/condformatmgr.cxx index ccd569a90c70..4a6bc1713774 100644 --- a/sc/source/ui/condformat/condformatmgr.cxx +++ b/sc/source/ui/condformat/condformatmgr.cxx @@ -171,7 +171,9 @@ IMPL_LINK_NOARG(ScCondFormatManagerDlg, EditBtnClickHdl, Button*, void) { mbModified = true; EditBtnHdl(nullptr); - UpdateButtonSensitivity(); + // EditBtnHdl() might call EndDialog which will blow us away + if (!IsDisposed()) + UpdateButtonSensitivity(); } IMPL_LINK_NOARG(ScCondFormatManagerDlg, EditBtnHdl, SvTreeListBox*, bool) { diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index b401cffe5b96..07e6ad15a44e 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -2547,44 +2547,45 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) if (!pList) pList = pDoc->GetCondFormList( aPos.Tab() ); - ScopedVclPtr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( + VclPtr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( pTabViewShell->GetDialogParent(), pDoc, pList)); if (pDlgItem) pDlg->SetModified(); - short nRet = pDlg->Execute(); - std::unique_ptr<ScConditionalFormatList> pCondFormatList = pDlg->GetConditionalFormatList(); - if(nRet == RET_OK && pDlg->CondFormatsChanged()) - { - pData->GetDocShell()->GetDocFunc().SetConditionalFormatList(pCondFormatList.release(), aPos.Tab()); - } - else if(nRet == DLG_RET_ADD) - { - // Put the xml string parameter to initialize the - // Conditional Format Dialog. ( add new ) - pTabViewShell->GetPool().Put(ScCondFormatDlgItem( - std::shared_ptr<ScConditionalFormatList>(pCondFormatList.release()), -1, true)); - // Queue message to open Conditional Format Dialog - GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON ); - } - else if (nRet == DLG_RET_EDIT) - { - ScConditionalFormat* pFormat = pDlg->GetCondFormatSelected(); - sal_Int32 nIndex = pFormat ? pFormat->GetKey() : -1; - // Put the xml string parameter to initialize the - // Conditional Format Dialog. ( edit selected conditional format ) - pTabViewShell->GetPool().Put(ScCondFormatDlgItem( - std::shared_ptr<ScConditionalFormatList>(pCondFormatList.release()), nIndex, true)); - - // Queue message to open Conditional Format Dialog - GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON ); - } - else - pCondFormatList.reset(); + pDlg->StartExecuteAsync([this, pDlg, pData, pTabViewShell, pDlgItem, aPos](sal_Int32 nRet){ + std::unique_ptr<ScConditionalFormatList> pCondFormatList = pDlg->GetConditionalFormatList(); + if(nRet == RET_OK && pDlg->CondFormatsChanged()) + { + pData->GetDocShell()->GetDocFunc().SetConditionalFormatList(pCondFormatList.release(), aPos.Tab()); + } + else if(nRet == DLG_RET_ADD) + { + // Put the xml string parameter to initialize the + // Conditional Format Dialog. ( add new ) + pTabViewShell->GetPool().Put(ScCondFormatDlgItem( + std::shared_ptr<ScConditionalFormatList>(pCondFormatList.release()), -1, true)); + // Queue message to open Conditional Format Dialog + GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON ); + } + else if (nRet == DLG_RET_EDIT) + { + ScConditionalFormat* pFormat = pDlg->GetCondFormatSelected(); + sal_Int32 nIndex = pFormat ? pFormat->GetKey() : -1; + // Put the xml string parameter to initialize the + // Conditional Format Dialog. ( edit selected conditional format ) + pTabViewShell->GetPool().Put(ScCondFormatDlgItem( + std::shared_ptr<ScConditionalFormatList>(pCondFormatList.release()), nIndex, true)); + + // Queue message to open Conditional Format Dialog + GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON ); + } + else + pCondFormatList.reset(); - if (pDlgItem) - pTabViewShell->GetPool().Remove(*pDlgItem); + if (pDlgItem) + pTabViewShell->GetPool().Remove(*pDlgItem); + }); } break; |