diff options
author | Jan Holesovsky <kendy@collabora.com> | 2018-01-24 12:47:20 +0100 |
---|---|---|
committer | Aron Budea <aron.budea@collabora.com> | 2018-01-24 14:59:55 +0100 |
commit | e0487fc331b02b5145dd11a9d786409800f5e780 (patch) | |
tree | 0273f36df0a7a25ff8617b68640ad78efe979249 /sw | |
parent | 20459ed3996781788ca7581d21d8c25b0c2b85d0 (diff) |
lokdialog: Convert the Tools -> Thesaurus... to async exec.
Change-Id: Iee25e3fa970e5e28a14a95cfc8804ce944d4f762
Reviewed-on: https://gerrit.libreoffice.org/48498
Reviewed-by: Aron Budea <aron.budea@collabora.com>
Tested-by: Aron Budea <aron.budea@collabora.com>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/uibase/uiview/viewling.cxx | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/sw/source/uibase/uiview/viewling.cxx b/sw/source/uibase/uiview/viewling.cxx index d1c2054d95b1..b0a596ce2210 100644 --- a/sw/source/uibase/uiview/viewling.cxx +++ b/sw/source/uibase/uiview/viewling.cxx @@ -27,6 +27,7 @@ #include <comphelper/lok.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/propertyvalue.hxx> +#include <comphelper/scopeguard.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/msgbox.hxx> #include <svtools/ehdl.hxx> @@ -563,8 +564,9 @@ void SwView::StartThesaurus() } SwViewOption* pVOpt = const_cast<SwViewOption*>(m_pWrtShell->GetViewOptions()); - bool bOldIdle = pVOpt->IsIdle(); + const bool bOldIdle = pVOpt->IsIdle(); pVOpt->SetIdle( false ); + comphelper::ScopeGuard guard([&]() { pVOpt->SetIdle(bOldIdle); }); // restore when leaving scope // get initial LookUp text const bool bSelection = static_cast<SwCursorShell*>(m_pWrtShell)->HasSelection(); @@ -576,20 +578,27 @@ void SwView::StartThesaurus() SpellError( eLang ); else { - ScopedVclPtr<AbstractThesaurusDialog> pDlg; + VclPtr<AbstractThesaurusDialog> pDlg; // create dialog { //Scope for SwWait-Object SwWait aWait( *GetDocShell(), true ); // load library with dialog only on demand ... SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - pDlg.disposeAndReset(pFact->CreateThesaurusDialog( &GetEditWin(), xThes, aTmp, eLang )); + pDlg.reset(pFact->CreateThesaurusDialog(&GetEditWin(), xThes, aTmp, eLang)); } - if ( pDlg->Execute()== RET_OK ) - InsertThesaurusSynonym( pDlg->GetWord(), aTmp, bSelection ); - } + if (pDlg) + { + guard.dismiss(); // ignore, we'll call SetIdle() explictly after the dialog ends - pVOpt->SetIdle( bOldIdle ); + pDlg->StartExecuteAsync([=](sal_Int32 nResult){ + if (nResult == RET_OK ) + InsertThesaurusSynonym(pDlg->GetWord(), aTmp, bSelection); + + pVOpt->SetIdle(bOldIdle); + }); + } + } } // Offer online suggestions |