sc/source/ui/attrdlg/scdlgfact.cxx |   35 +++++++++++++++++++
 sc/source/ui/attrdlg/scdlgfact.hxx |   39 ++++++++++++---------
 sc/source/ui/docshell/arealink.cxx |   30 +++++++++-------
 sc/source/ui/docshell/docsh4.cxx   |   23 ++++++++----
 sc/source/ui/drawfunc/drawsh.cxx   |   54 +++++++++++++++++------------
 sc/source/ui/pagedlg/tphfedit.cxx  |   27 ++++++++------
 sc/source/ui/view/cellsh1.cxx      |   67 ++++++++++++++++++++++++-------------
 sc/source/ui/view/cellsh2.cxx      |   10 +++--
 sc/source/ui/view/gridwin2.cxx     |   42 +++++++++++++----------
 sc/source/ui/view/pivotsh.cxx      |   42 +++++++++++++----------
 sc/source/ui/view/tabvwshb.cxx     |    9 +++-
 11 files changed, 246 insertions(+), 132 deletions(-)

New commits:
commit 76e9023c8abc823447b1128056e55238f90da8d6
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Mon Jan 22 08:36:28 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Jan 24 06:58:14 2024 +0100

    convert more calc dialogs to async
    
    Change-Id: I6349942f0a4d6156ef59f43a6e96049128f47524
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162360
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx 
b/sc/source/ui/attrdlg/scdlgfact.cxx
index 7fe3435d1bce..24fecf8e9966 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -148,6 +148,11 @@ short AbstractScDataFormDlg_Impl::Execute()
     return m_xDlg->run();
 }
 
+bool AbstractScDataFormDlg_Impl::StartExecuteAsync(AsyncContext& rCtx)
+{
+    return ScDataFormDlg::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 BitmapEx AbstractScDataFormDlg_Impl::createScreenshot() const
 {
     VclPtr<VirtualDevice> xDialogSurface(m_xDlg->getDialog()->screenshot());
@@ -245,6 +250,11 @@ short AbstractScPivotFilterDlg_Impl::Execute()
     return m_xDlg->run();
 }
 
+bool 
AbstractScPivotFilterDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext
 &rCtx)
+{
+    return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractScDPFunctionDlg_Impl::Execute()
 {
     return m_xDlg->run();
@@ -270,21 +280,41 @@ short AbstractScDPNumGroupDlg_Impl::Execute()
     return m_xDlg->run();
 }
 
+bool 
AbstractScDPNumGroupDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext 
&rCtx)
+{
+    return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractScDPDateGroupDlg_Impl::Execute()
 {
     return m_xDlg->run();
 }
 
+bool 
AbstractScDPDateGroupDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext
 &rCtx)
+{
+    return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractScDPShowDetailDlg_Impl::Execute()
 {
     return m_xDlg->run();
 }
 
+bool AbstractScDPShowDetailDlg_Impl::StartExecuteAsync(AsyncContext& rCtx)
+{
+    return ScDPShowDetailDlg::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractScNewScenarioDlg_Impl::Execute()
 {
     return m_xDlg->run();
 }
 
+bool AbstractScNewScenarioDlg_Impl::StartExecuteAsync(AsyncContext& rCtx)
+{
+    return ScNewScenarioDlg::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 short AbstractScShowTabDlg_Impl::Execute()
 {
     return m_xDlg->run();
@@ -334,6 +364,11 @@ short AbstractScLinkedAreaDlg_Impl::Execute()
     return m_xDlg->run();
 }
 
+bool AbstractScLinkedAreaDlg_Impl::StartExecuteAsync(AsyncContext& rCtx)
+{
+    return ScLinkedAreaDlg::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
 void AbstractScImportAsciiDlg_Impl::GetOptions( ScAsciiOptions& rOpt )
 {
     m_xDlg->GetOptions( rOpt );
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx 
b/sc/source/ui/attrdlg/scdlgfact.hxx
index 880c1f153652..954e58f0f2a8 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -176,7 +176,7 @@ class AbstractScDeleteCellDlg_Impl : public 
AbstractScDeleteCellDlg
 {
     std::shared_ptr<ScDeleteCellDlg> m_xDlg;
 public:
-    explicit AbstractScDeleteCellDlg_Impl(std::unique_ptr<ScDeleteCellDlg> p)
+    explicit AbstractScDeleteCellDlg_Impl(std::shared_ptr<ScDeleteCellDlg> p)
         : m_xDlg(std::move(p))
     {
     }
@@ -192,13 +192,14 @@ public:
 //for dataform
 class AbstractScDataFormDlg_Impl : public AbstractScDataFormDlg
 {
-    std::unique_ptr<ScDataFormDlg> m_xDlg;
+    std::shared_ptr<ScDataFormDlg> m_xDlg;
 public:
-    explicit AbstractScDataFormDlg_Impl(std::unique_ptr<ScDataFormDlg> p)
+    explicit AbstractScDataFormDlg_Impl(std::shared_ptr<ScDataFormDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short Execute() override;
+    virtual bool  StartExecuteAsync(AsyncContext& rCtx) override;
 
     // screenshotting
     virtual BitmapEx createScreenshot() const override;
@@ -258,7 +259,7 @@ class AbstractScInsertCellDlg_Impl : public 
AbstractScInsertCellDlg
 {
     std::shared_ptr<ScInsertCellDlg> m_xDlg;
 public:
-    explicit AbstractScInsertCellDlg_Impl(std::unique_ptr<ScInsertCellDlg> p)
+    explicit AbstractScInsertCellDlg_Impl(std::shared_ptr<ScInsertCellDlg> p)
         : m_xDlg(std::move(p))
     {
     }
@@ -328,14 +329,15 @@ public:
 
 class AbstractScLinkedAreaDlg_Impl : public AbstractScLinkedAreaDlg
 {
-    std::unique_ptr<ScLinkedAreaDlg> m_xDlg;
+    std::shared_ptr<ScLinkedAreaDlg> m_xDlg;
 public:
-    explicit AbstractScLinkedAreaDlg_Impl(std::unique_ptr<ScLinkedAreaDlg> p)
+    explicit AbstractScLinkedAreaDlg_Impl(std::shared_ptr<ScLinkedAreaDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual                 ~AbstractScLinkedAreaDlg_Impl() override;
     virtual short           Execute() override;
+    virtual bool            StartExecuteAsync(AsyncContext& rCtx) override;
     virtual void            InitFromOldLink( const OUString& rFile, const 
OUString& rFilter,
                                         const OUString& rOptions, const 
OUString& rSource,
                                         sal_Int32 nRefreshDelaySeconds ) 
override;
@@ -412,13 +414,14 @@ public:
 
 class AbstractScPivotFilterDlg_Impl : public AbstractScPivotFilterDlg
 {
-    std::unique_ptr<ScPivotFilterDlg> m_xDlg;
+    std::shared_ptr<ScPivotFilterDlg> m_xDlg;
 public:
-    explicit AbstractScPivotFilterDlg_Impl(std::unique_ptr<ScPivotFilterDlg> p)
+    explicit AbstractScPivotFilterDlg_Impl(std::shared_ptr<ScPivotFilterDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short Execute() override;
+    virtual bool  StartExecuteAsync(AsyncContext& rCtx) override;
     virtual const ScQueryItem&  GetOutputItem() override;
 };
 
@@ -454,50 +457,54 @@ public:
 
 class AbstractScDPNumGroupDlg_Impl : public AbstractScDPNumGroupDlg
 {
-    std::unique_ptr<ScDPNumGroupDlg> m_xDlg;
+    std::shared_ptr<ScDPNumGroupDlg> m_xDlg;
 public:
-    explicit AbstractScDPNumGroupDlg_Impl(std::unique_ptr<ScDPNumGroupDlg> p)
+    explicit AbstractScDPNumGroupDlg_Impl(std::shared_ptr<ScDPNumGroupDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short Execute() override;
+    virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) 
override;
     virtual ScDPNumGroupInfo GetGroupInfo() const override;
 };
 
 class AbstractScDPDateGroupDlg_Impl : public AbstractScDPDateGroupDlg
 {
-    std::unique_ptr<ScDPDateGroupDlg> m_xDlg;
+    std::shared_ptr<ScDPDateGroupDlg> m_xDlg;
 public:
-    explicit AbstractScDPDateGroupDlg_Impl(std::unique_ptr<ScDPDateGroupDlg> p)
+    explicit AbstractScDPDateGroupDlg_Impl(std::shared_ptr<ScDPDateGroupDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short Execute() override;
+    virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) 
override;
     virtual ScDPNumGroupInfo GetGroupInfo() const override;
     virtual sal_Int32 GetDatePart() const override;
 };
 
 class AbstractScDPShowDetailDlg_Impl : public AbstractScDPShowDetailDlg
 {
-    std::unique_ptr<ScDPShowDetailDlg> m_xDlg;
+    std::shared_ptr<ScDPShowDetailDlg> m_xDlg;
 public:
-    explicit AbstractScDPShowDetailDlg_Impl(std::unique_ptr<ScDPShowDetailDlg> 
p)
+    explicit AbstractScDPShowDetailDlg_Impl(std::shared_ptr<ScDPShowDetailDlg> 
p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short Execute() override;
+    virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) 
override;
     virtual OUString GetDimensionName() const override;
 };
 
 class AbstractScNewScenarioDlg_Impl : public AbstractScNewScenarioDlg
 {
-    std::unique_ptr<ScNewScenarioDlg> m_xDlg;
+    std::shared_ptr<ScNewScenarioDlg> m_xDlg;
 public:
-    explicit AbstractScNewScenarioDlg_Impl(std::unique_ptr<ScNewScenarioDlg> p)
+    explicit AbstractScNewScenarioDlg_Impl(std::shared_ptr<ScNewScenarioDlg> p)
         : m_xDlg(std::move(p))
     {
     }
     virtual short           Execute() override;
+    virtual bool            StartExecuteAsync(AsyncContext& rCtx) override;
 
     virtual void SetScenarioData( const OUString& rName, const OUString& 
rComment,
                             const Color& rColor, ScScenarioFlags nFlags ) 
override;
diff --git a/sc/source/ui/docshell/arealink.cxx 
b/sc/source/ui/docshell/arealink.cxx
index 31636bd148af..1ebd60763654 100644
--- a/sc/source/ui/docshell/arealink.cxx
+++ b/sc/source/ui/docshell/arealink.cxx
@@ -77,19 +77,25 @@ void ScAreaLink::Edit(weld::Window* pParent, const 
Link<SvBaseLink&,void>& /* rE
     //  use own dialog instead of SvBaseLink::Edit...
     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
 
-    ScopedVclPtr<AbstractScLinkedAreaDlg> 
pDlg(pFact->CreateScLinkedAreaDlg(pParent));
+    VclPtr<AbstractScLinkedAreaDlg> 
pDlg(pFact->CreateScLinkedAreaDlg(pParent));
     pDlg->InitFromOldLink( aFileName, aFilterName, aOptions, aSourceArea, 
GetRefreshDelaySeconds() );
-    if ( pDlg->Execute() == RET_OK )
-    {
-        aOptions = pDlg->GetOptions();
-        Refresh( pDlg->GetURL(), pDlg->GetFilter(),
-                 pDlg->GetSource(), pDlg->GetRefreshDelaySeconds() );
-
-        //  copy source data from members (set in Refresh) into link name for 
dialog
-        OUString aNewLinkName;
-        sfx2::MakeLnkName( aNewLinkName, nullptr, aFileName, aSourceArea, 
&aFilterName );
-        SetName( aNewLinkName );
-    }
+    pDlg->StartExecuteAsync(
+        [this, pDlg] (sal_Int32 nResult)->void
+        {
+            if (nResult == RET_OK)
+            {
+                aOptions = pDlg->GetOptions();
+                Refresh( pDlg->GetURL(), pDlg->GetFilter(),
+                         pDlg->GetSource(), pDlg->GetRefreshDelaySeconds() );
+
+                //  copy source data from members (set in Refresh) into link 
name for dialog
+                OUString aNewLinkName;
+                sfx2::MakeLnkName( aNewLinkName, nullptr, aFileName, 
aSourceArea, &aFilterName );
+                SetName( aNewLinkName );
+            }
+            pDlg->disposeOnce();
+        }
+    );
 }
 
 ::sfx2::SvBaseLink::UpdateResult ScAreaLink::DataChanged(
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index e6fa6417dacb..9396b59518fe 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -973,14 +973,23 @@ void ScDocShell::Execute( SfxRequest& rReq )
 
                                 ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
 
-                                ScopedVclPtr<AbstractScNewScenarioDlg> 
pNewDlg(pFact->CreateScNewScenarioDlg(GetActiveDialogParent(), aName, true, 
bSheetProtected));
+                                VclPtr<AbstractScNewScenarioDlg> 
pNewDlg(pFact->CreateScNewScenarioDlg(GetActiveDialogParent(), aName, true, 
bSheetProtected));
                                 pNewDlg->SetScenarioData( aName, aComment, 
aColor, nFlags );
-                                if ( pNewDlg->Execute() == RET_OK )
-                                {
-                                    pNewDlg->GetScenarioData( aName, aComment, 
aColor, nFlags );
-                                    ModifyScenario( nTab, aName, aComment, 
aColor, nFlags );
-                                    rReq.Done();
-                                }
+                                pNewDlg->StartExecuteAsync(
+                                    [this, pNewDlg, nTab] (sal_Int32 
nResult)->void
+                                    {
+                                        if (nResult == RET_OK)
+                                        {
+                                            OUString aName2, aComment2;
+                                            Color aColor2;
+                                            ScScenarioFlags nFlags2;
+                                            pNewDlg->GetScenarioData( aName2, 
aComment2, aColor2, nFlags2 );
+                                            ModifyScenario( nTab, aName2, 
aComment2, aColor2, nFlags2 );
+                                        }
+                                        pNewDlg->disposeOnce();
+                                    }
+                                );
+                                rReq.Done();
                             }
                         }
                     }
diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx
index 43ef902ddd6b..dfc3d94ef79f 100644
--- a/sc/source/ui/drawfunc/drawsh.cxx
+++ b/sc/source/ui/drawfunc/drawsh.cxx
@@ -557,20 +557,25 @@ void ScDrawShell::ExecuteTextAttrDlg( SfxRequest& rReq )
 
     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     weld::Window* pWin = rViewData.GetDialogParent();
-    ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateTextTabDialog(pWin, 
&aNewAttr, pView));
+    VclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateTextTabDialog(pWin, 
&aNewAttr, pView));
 
-    sal_uInt16 nResult = pDlg->Execute();
+    pDlg->StartExecuteAsync(
+        [pDlg, bHasMarked, pView] (sal_Int32 nResult)->void
+        {
+            if (nResult == RET_OK)
+            {
+                if ( bHasMarked )
+                    pView->SetAttributes( *pDlg->GetOutputItemSet() );
+                else
+                    pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false );
 
-    if ( RET_OK == nResult )
-    {
-        if ( bHasMarked )
-            pView->SetAttributes( *pDlg->GetOutputItemSet() );
-        else
-            pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false );
+                pView->InvalidateAttribs();
+            }
+            pDlg->disposeOnce();
+        }
+    );
 
-        pView->InvalidateAttribs();
-        rReq.Done();
-    }
+    rReq.Done();
 }
 
 void ScDrawShell::ExecuteMeasureDlg( SfxRequest& rReq )
@@ -584,20 +589,25 @@ void ScDrawShell::ExecuteMeasureDlg( SfxRequest& rReq )
 
     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     weld::Window* pWin = rViewData.GetDialogParent();
-    ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog(pWin, 
aNewAttr, pView, RID_SVXPAGE_MEASURE));
+    VclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog(pWin, aNewAttr, 
pView, RID_SVXPAGE_MEASURE));
 
-    sal_uInt16 nResult = pDlg->Execute();
+    pDlg->StartExecuteAsync(
+        [pDlg, bHasMarked, pView] (sal_Int32 nResult)->void
+        {
+            if (nResult == RET_OK)
+            {
+                if ( bHasMarked )
+                    pView->SetAttrToMarked( *pDlg->GetOutputItemSet(), false );
+                else
+                    pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false );
 
-    if ( RET_OK == nResult )
-    {
-        if ( bHasMarked )
-            pView->SetAttrToMarked( *pDlg->GetOutputItemSet(), false );
-        else
-            pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false );
+                pView->InvalidateAttribs();
+            }
+            pDlg->disposeOnce();
+        }
+    );
 
-        pView->InvalidateAttribs();
-        rReq.Done();
-    }
+    rReq.Done();
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/pagedlg/tphfedit.cxx 
b/sc/source/ui/pagedlg/tphfedit.cxx
index 617f2208a9f9..ffcdd167ae32 100644
--- a/sc/source/ui/pagedlg/tphfedit.cxx
+++ b/sc/source/ui/pagedlg/tphfedit.cxx
@@ -189,21 +189,26 @@ void ScEditWindow::SetCharAttributes()
 
     if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(true);
 
-    SfxItemSet aSet( m_xEditView->GetAttribs() );
+    std::shared_ptr<SfxItemSet> xSet = std::make_shared<SfxItemSet>( 
m_xEditView->GetAttribs() );
 
     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
 
-    ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateScCharDlg(
-        mpDialog,  &aSet, pDocSh, false));
+    VclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateScCharDlg(
+        mpDialog,  xSet.get(), pDocSh, false));
     pDlg->SetText( ScResId( STR_TEXTATTRS ) );
-    if ( pDlg->Execute() == RET_OK )
-    {
-        aSet.ClearItem();
-        aSet.Put( *pDlg->GetOutputItemSet() );
-        m_xEditView->SetAttribs( aSet );
-    }
-
-    if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(false);
+    pDlg->StartExecuteAsync(
+        [this, pDlg, pTabViewSh, xSet] (sal_Int32 nResult)->void
+        {
+            if (nResult == RET_OK)
+            {
+                xSet->ClearItem();
+                xSet->Put( *pDlg->GetOutputItemSet() );
+                m_xEditView->SetAttribs( *xSet );
+            }
+            pDlg->disposeOnce();
+            if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(false);
+        }
+    );
 }
 
 bool ScEditWindow::KeyInput( const KeyEvent& rKEvt )
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index ea9c1d948cc6..b54837ea763a 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -1213,13 +1213,19 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
                     if ( pTabViewShell->HasSelectionForDrillDown( nOrientation 
) )
                     {
                         ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
-                        ScopedVclPtr<AbstractScDPShowDetailDlg> pDlg( 
pFact->CreateScDPShowDetailDlg(
+                        VclPtr<AbstractScDPShowDetailDlg> pDlg( 
pFact->CreateScDPShowDetailDlg(
                             pTabViewShell->GetFrameWeld(), *pDPObj, 
nOrientation ) );
-                        if ( pDlg->Execute() == RET_OK )
-                        {
-                            OUString aNewDimName( pDlg->GetDimensionName() );
-                            pTabViewShell->SetDataPilotDetails( true, 
&aNewDimName );
-                        }
+                        pDlg->StartExecuteAsync(
+                            [pDlg, pTabViewShell] (sal_Int32 nResult)->void
+                            {
+                                if (nResult == RET_OK)
+                                {
+                                    OUString aNewDimName( 
pDlg->GetDimensionName() );
+                                    pTabViewShell->SetDataPilotDetails( true, 
&aNewDimName );
+                                }
+                                pDlg->disposeOnce();
+                            }
+                        );
                     }
                     else if ( !pDPObj->IsServiceData() &&
                                pDPObj->GetDataFieldPositionData(
@@ -1252,22 +1258,31 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
                     {
                         ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
                         const Date& rNullDate( 
GetViewData().GetDocument().GetFormatTable()->GetNullDate() );
-                        ScopedVclPtr<AbstractScDPDateGroupDlg> pDlg( 
pFact->CreateScDPDateGroupDlg(
+                        VclPtr<AbstractScDPDateGroupDlg> pDlg( 
pFact->CreateScDPDateGroupDlg(
                             pTabViewShell->GetFrameWeld(),
                             aNumInfo, nParts, rNullDate ) );
-                        if( pDlg->Execute() == RET_OK )
-                        {
-                            aNumInfo = pDlg->GetGroupInfo();
-                            pTabViewShell->DateGroupDataPilot( aNumInfo, 
pDlg->GetDatePart() );
-                        }
+                        pDlg->StartExecuteAsync(
+                            [pDlg, pTabViewShell] (sal_Int32 nResult)->void
+                            {
+                                if (nResult == RET_OK)
+                                    pTabViewShell->DateGroupDataPilot( 
pDlg->GetGroupInfo(), pDlg->GetDatePart() );
+                                pDlg->disposeOnce();
+                            }
+                        );
                     }
                     else if ( pTabViewShell->HasSelectionForNumGroup( aNumInfo 
) )
                     {
                         ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
-                        ScopedVclPtr<AbstractScDPNumGroupDlg> pDlg( 
pFact->CreateScDPNumGroupDlg(
+                        VclPtr<AbstractScDPNumGroupDlg> pDlg( 
pFact->CreateScDPNumGroupDlg(
                             pTabViewShell->GetFrameWeld(), aNumInfo ) );
-                        if( pDlg->Execute() == RET_OK )
-                            pTabViewShell->NumGroupDataPilot( 
pDlg->GetGroupInfo() );
+                        pDlg->StartExecuteAsync(
+                            [pDlg, pTabViewShell] (sal_Int32 nResult)->void
+                            {
+                                if (nResult == RET_OK)
+                                    pTabViewShell->NumGroupDataPilot( 
pDlg->GetGroupInfo() );
+                                pDlg->disposeOnce();
+                            }
+                        );
                     }
                     else
                         pTabViewShell->GroupDataPilot();
@@ -1719,14 +1734,20 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
                     ScAddress aCellPos(nPosX, nPosY, GetViewData().GetTabNo());
                     auto pObj = 
std::make_shared<ScImportExport>(GetViewData().GetDocument(), aCellPos);
                     pObj->SetOverwriting(true);
-                    if (pDlg->Execute()) {
-                        ScAsciiOptions aOptions;
-                        pDlg->GetOptions(aOptions);
-                        pDlg->SaveParameters();
-                        pObj->SetExtOptions(aOptions);
-                        pObj->ImportString(sStrBuffer, format);
-                    }
-                    pDlg->disposeOnce();
+                    pDlg->StartExecuteAsync(
+                        [pDlg, pObj, sStrBuffer, format] (sal_Int32 
nResult)->void
+                        {
+                            if (nResult)
+                            {
+                                ScAsciiOptions aOptions;
+                                pDlg->GetOptions(aOptions);
+                                pDlg->SaveParameters();
+                                pObj->SetExtOptions(aOptions);
+                                pObj->ImportString(sStrBuffer, format);
+                            }
+                            pDlg->disposeOnce();
+                        }
+                    );
                     rReq.SetReturnValue(SfxInt16Item(nSlot, 1)); // 1 = 
success, 0 = fail
                     rReq.Done();
                 }
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 71bcd6cac315..8911cb33fbc1 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -355,10 +355,14 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
             {
                 ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
 
-                ScopedVclPtr<AbstractScDataFormDlg> 
pDlg(pFact->CreateScDataFormDlg(
+                VclPtr<AbstractScDataFormDlg> pDlg(pFact->CreateScDataFormDlg(
                     pTabViewShell->GetFrameWeld(), pTabViewShell));
-
-                pDlg->Execute();
+                pDlg->StartExecuteAsync(
+                    [pDlg] (sal_Int32 /*nResult*/)->void
+                    {
+                        pDlg->disposeOnce();
+                    }
+                );
 
                 rReq.Done();
             }
diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx
index 01f5f39dd7d3..c6af2c2cd74f 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -150,10 +150,9 @@ bool ScGridWindow::DoAutoFilterButton( SCCOL nCol, SCROW 
nRow, const MouseEvent&
 
 void ScGridWindow::DoPushPivotButton( SCCOL nCol, SCROW nRow, const 
MouseEvent& rMEvt, bool bButton, bool bPopup, bool bMultiField )
 {
-    ScDocument& rDoc = mrViewData.GetDocument();
     SCTAB nTab = mrViewData.GetTabNo();
 
-    ScDPObject* pDPObj  = rDoc.GetDPAtCursor(nCol, nRow, nTab);
+    ScDPObject* pDPObj  = mrViewData.GetDocument().GetDPAtCursor(nCol, nRow, 
nTab);
 
     if (pDPObj)
     {
@@ -211,24 +210,31 @@ void ScGridWindow::DoPushPivotButton( SCCOL nCol, SCROW 
nRow, const MouseEvent&
 
             ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
 
-            ScopedVclPtr<AbstractScPivotFilterDlg> pDlg(
+            VclPtr<AbstractScPivotFilterDlg> pDlg(
                 pFact->CreateScPivotFilterDlg(
                     mrViewData.GetViewShell()->GetFrameWeld(), aArgSet, 
nSrcTab));
-            if ( pDlg->Execute() == RET_OK )
-            {
-                ScSheetSourceDesc aNewDesc(&rDoc);
-                if (pDesc)
-                    aNewDesc = *pDesc;
-
-                const ScQueryItem& rQueryItem = pDlg->GetOutputItem();
-                aNewDesc.SetQueryParam(rQueryItem.GetQueryData());
-
-                ScDPObject aNewObj( *pDPObj );
-                aNewObj.SetSheetDesc( aNewDesc );
-                ScDBDocFunc aFunc( *mrViewData.GetDocShell() );
-                aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false );
-                mrViewData.GetView()->CursorPosChanged();       // shells may 
be switched
-            }
+            pDlg->StartExecuteAsync(
+                [this, pDlg, pDesc, pDPObj] (sal_Int32 nResult)->void
+                {
+                    if (nResult == RET_OK)
+                    {
+                        ScDocument& rDoc = mrViewData.GetDocument();
+                        ScSheetSourceDesc aNewDesc(&rDoc);
+                        if (pDesc)
+                            aNewDesc = *pDesc;
+
+                        const ScQueryItem& rQueryItem = pDlg->GetOutputItem();
+                        aNewDesc.SetQueryParam(rQueryItem.GetQueryData());
+
+                        ScDPObject aNewObj( *pDPObj );
+                        aNewObj.SetSheetDesc( aNewDesc );
+                        ScDBDocFunc aFunc( *mrViewData.GetDocShell() );
+                        aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false );
+                        mrViewData.GetView()->CursorPosChanged();       // 
shells may be switched
+                    }
+                    pDlg->disposeOnce();
+                }
+            );
         }
     }
     else
diff --git a/sc/source/ui/view/pivotsh.cxx b/sc/source/ui/view/pivotsh.cxx
index b4ef807ffa46..efef27ba8a9c 100644
--- a/sc/source/ui/view/pivotsh.cxx
+++ b/sc/source/ui/view/pivotsh.cxx
@@ -93,30 +93,36 @@ void ScPivotShell::Execute( const SfxRequest& rReq )
                     nSrcTab = pDesc->GetSourceRange().aStart.Tab();
                 }
 
-                ScViewData& rViewData = pViewShell->GetViewData();
                 SfxItemSetFixed<SCITEM_QUERYDATA, SCITEM_QUERYDATA> aArgSet( 
pViewShell->GetPool() );
-                aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &rViewData, 
&aQueryParam ) );
+                aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, 
&pViewShell->GetViewData(), &aQueryParam ) );
 
                 ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
 
-                ScopedVclPtr<AbstractScPivotFilterDlg> 
pDlg(pFact->CreateScPivotFilterDlg(
+                VclPtr<AbstractScPivotFilterDlg> 
pDlg(pFact->CreateScPivotFilterDlg(
                     pViewShell->GetFrameWeld(), aArgSet, nSrcTab));
 
-                if( pDlg->Execute() == RET_OK )
-                {
-                    ScSheetSourceDesc aNewDesc(&rViewData.GetDocument());
-                    if( pDesc )
-                        aNewDesc = *pDesc;
-
-                    const ScQueryItem& rQueryItem = pDlg->GetOutputItem();
-                    aNewDesc.SetQueryParam(rQueryItem.GetQueryData());
-
-                    ScDPObject aNewObj( *pDPObj );
-                    aNewObj.SetSheetDesc( aNewDesc );
-                    ScDBDocFunc aFunc( *rViewData.GetDocShell() );
-                    aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false );
-                    rViewData.GetView()->CursorPosChanged();       // shells 
may be switched
-                }
+                pDlg->StartExecuteAsync(
+                    [this, pDlg, pDesc, pDPObj] (sal_Int32 nResult)->void
+                    {
+                        if (nResult == RET_OK)
+                        {
+                            ScViewData& rViewData = pViewShell->GetViewData();
+                            ScSheetSourceDesc 
aNewDesc(&rViewData.GetDocument());
+                            if( pDesc )
+                                aNewDesc = *pDesc;
+
+                            const ScQueryItem& rQueryItem = 
pDlg->GetOutputItem();
+                            aNewDesc.SetQueryParam(rQueryItem.GetQueryData());
+
+                            ScDPObject aNewObj( *pDPObj );
+                            aNewObj.SetSheetDesc( aNewDesc );
+                            ScDBDocFunc aFunc( *rViewData.GetDocShell() );
+                            aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, 
false );
+                            rViewData.GetView()->CursorPosChanged();       // 
shells may be switched
+                        }
+                        pDlg->disposeOnce();
+                    }
+                );
             }
         }
         break;
diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx
index 098ea68d33d5..57fb7f63b72d 100644
--- a/sc/source/ui/view/tabvwshb.cxx
+++ b/sc/source/ui/view/tabvwshb.cxx
@@ -443,9 +443,14 @@ void ScTabViewShell::ExecDrawIns(SfxRequest& rReq)
                 const uno::Reference<frame::XModel> xModel( 
GetViewData().GetDocShell()->GetBaseModel() );
 
                 VclAbstractDialogFactory* pFact = 
VclAbstractDialogFactory::Create();
-                ScopedVclPtr<AbstractQrCodeGenDialog> 
pDialog(pFact->CreateQrCodeGenDialog(
+                VclPtr<AbstractQrCodeGenDialog> 
pDialog(pFact->CreateQrCodeGenDialog(
                     pWin->GetFrameWeld(), xModel, rReq.GetSlot() == 
SID_EDIT_QRCODE));
-                pDialog->Execute();
+                pDialog->StartExecuteAsync(
+                    [pDialog] (sal_Int32 /*nResult*/)->void
+                    {
+                        pDialog->disposeOnce();
+                    }
+                );
                 break;
             }
 

Reply via email to