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)

Reply via email to