sc/source/core/tool/interpr4.cxx | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-)
New commits: commit 4831e2e8dd746e491edf47cae769b56a8925e2ee Author: Eike Rathke <[email protected]> AuthorDate: Sat Jun 1 00:18:46 2019 +0200 Commit: Eike Rathke <[email protected]> CommitDate: Sat Jun 1 02:27:06 2019 +0200 Resolves: tdf#101473 handle volatile Add-In results without formula cell ... while temporarily interpreting from within the Function Wizard. Change-Id: I88e7e062989ed395accd50ed9bfe1b76b3b297ea Reviewed-on: https://gerrit.libreoffice.org/73290 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Jenkins (cherry picked from commit 7272b9f752cb74757d6ed504202eefccc589f804) Reviewed-on: https://gerrit.libreoffice.org/73299 Tested-by: Eike Rathke <[email protected]> diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 8cd191c6e00b..bb6583a2c460 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -3023,12 +3023,21 @@ void ScInterpreter::ScExternal() rArr.AddRecalcMode( ScRecalcMode::ONLOAD_LENIENT ); uno::Reference<sheet::XVolatileResult> xRes = aCall.GetVarRes(); ScAddInListener* pLis = ScAddInListener::Get( xRes ); + // In case there is no pMyFormulaCell, i.e. while interpreting + // temporarily from within the Function Wizard, try to obtain a + // valid result from an existing listener for that volatile, or + // create a new and hope for an immediate result. If none + // available that should lead to a void result and thus #N/A. + bool bTemporaryListener = false; if ( !pLis ) { pLis = ScAddInListener::CreateListener( xRes, pDok ); - pMyFormulaCell->StartListening( *pLis ); + if (pMyFormulaCell) + pMyFormulaCell->StartListening( *pLis ); + else + bTemporaryListener = true; } - else + else if (pMyFormulaCell) { pMyFormulaCell->StartListening( *pLis ); if ( !pLis->HasDocument( pDok ) ) @@ -3038,6 +3047,20 @@ void ScInterpreter::ScExternal() } aCall.SetResult( pLis->GetResult() ); // use result from async + + if (bTemporaryListener) + { + try + { + // EventObject can be any, not evaluated by + // ScAddInListener::disposing() + css::lang::EventObject aEvent; + pLis->disposing(aEvent); // pLis is dead hereafter + } + catch (const uno::Exception&) + { + } + } } if ( aCall.GetErrCode() != FormulaError::NONE ) _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
