cui/source/factory/dlgfact.cxx | 2 - cui/source/factory/dlgfact.hxx | 2 - cui/source/inc/cuitabarea.hxx | 2 + cui/source/tabpages/tphatch.cxx | 57 +++++++++++++++++++++++----------------- 4 files changed, 37 insertions(+), 26 deletions(-)
New commits: commit fffb25cee3a366819da86f336fe7af8432911a80 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Jan 20 12:35:53 2026 +0000 Commit: Miklos Vajna <[email protected]> CommitDate: Wed Jan 21 14:10:27 2026 +0100 name hatch add and retry message async Change-Id: I323767ab25f0d5a0c7e4b12741bb97d26b8c214d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197663 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index 5cc0ed5ab423..9570d4887c59 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -122,7 +122,7 @@ IMPL_ABSTDLG_CLASS(AbstractSecurityOptionsDialog) IMPL_ABSTDLG_CLASS(AbstractSvxHpLinkDlg) IMPL_ABSTDLG_CLASS(AbstractSvxJSearchOptionsDialog) IMPL_ABSTDLG_CLASS(AbstractSvxMultiPathDialog) -IMPL_ABSTDLG_CLASS(AbstractSvxNameDialog) +IMPL_ABSTDLG_CLASS_ASYNC(AbstractSvxNameDialog, SvxNameDialog) IMPL_ABSTDLG_CLASS(AbstractSvxNewDictionaryDialog) IMPL_ABSTDLG_CLASS_ASYNC(AbstractSvxObjectNameDialog, SvxObjectNameDialog) IMPL_ABSTDLG_CLASS_ASYNC(AbstractSvxObjectTitleDescDialog, SvxObjectTitleDescDialog) diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index 65524bd88bfb..041c515cf0d3 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -275,7 +275,7 @@ DECL_ABSTDLG_CLASS(AbstractSvxNewDictionaryDialog,SvxNewDictionaryDialog) }; // AbstractSvxNameDialog_Impl -DECL_ABSTDLG_CLASS(AbstractSvxNameDialog,SvxNameDialog) +DECL_ABSTDLG_CLASS_ASYNC(AbstractSvxNameDialog,SvxNameDialog) virtual OUString GetName() override; virtual void SetCheckNameHdl( const Link<AbstractSvxNameDialog&,bool>& rLink ) override ; virtual void SetCheckNameTooltipHdl( const Link<AbstractSvxNameDialog&, OUString>& rLink ) override ; diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx index 911bb1120587..7b73d54b1c48 100644 --- a/cui/source/inc/cuitabarea.hxx +++ b/cui/source/inc/cuitabarea.hxx @@ -29,6 +29,7 @@ #define NO_BUTTON_SELECTED -1 +class AbstractSvxNameDialog; class ColorListBox; class SdrModel; class SvxBitmapCtl; @@ -514,6 +515,7 @@ private: void ClickDeleteHdl(); void AddHatch(const OUString& aName, tools::Long nCount); + void runNameDialog(VclPtr<AbstractSvxNameDialog> pDlg, tools::Long nCount); public: SvxHatchTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs); diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx index 3f368ce23fef..f5646875b0a3 100644 --- a/cui/source/tabpages/tphatch.cxx +++ b/cui/source/tabpages/tphatch.cxx @@ -458,6 +458,37 @@ void SvxHatchTabPage::AddHatch(const OUString& aName, tools::Long nCount) ChangeHatchHdl_Impl(); } +void SvxHatchTabPage::runNameDialog(VclPtr<AbstractSvxNameDialog> pDlg, tools::Long nCount) +{ + pDlg->StartExecuteAsync([pDlg, nCount, this](sal_Int32 nResult) { + if (nResult != RET_OK) + { + pDlg->disposeOnce(); + return; + } + + OUString aName = pDlg->GetName(); + + bool bValidHatchName = (SearchHatchList(aName) == -1); + if( bValidHatchName ) + { + pDlg->disposeOnce(); + AddHatch(aName, nCount); + return; + } + + // Offer to try again + auto xWarnBox = std::make_shared<weld::MessageDialogController>(GetFrameWeld(), + "cui/ui/queryduplicatedialog.ui", "DuplicateNameDialog"); + weld::DialogController::runAsync(xWarnBox, [pDlg, nCount, this](sal_Int32 nWarnResult) { + if (nWarnResult == RET_OK) + runNameDialog(pDlg, nCount); + else + pDlg->disposeOnce(); + }); + }); +} + IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl, weld::Button&, void) { OUString aNewName( SvxResId( RID_SVXSTR_HATCH ) ); @@ -475,31 +506,9 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl, weld::Button&, void) } SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc)); - sal_uInt16 nError = 1; - - while( pDlg->Execute() == RET_OK ) - { - aName = pDlg->GetName(); - - bValidHatchName = (SearchHatchList(aName) == -1); - if( bValidHatchName ) - { - nError = 0; - break; - } - - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), u"cui/ui/queryduplicatedialog.ui"_ustr)); - std::unique_ptr<weld::MessageDialog> xWarnBox(xBuilder->weld_message_dialog(u"DuplicateNameDialog"_ustr)); - if (xWarnBox->run() != RET_OK) - break; - } - pDlg.disposeAndClear(); - - if( nError ) - return; + VclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc)); - AddHatch(aName, nCount); + runNameDialog(pDlg, nCount); } IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl, weld::Button&, void)
