sc/source/core/inc/interpre.hxx | 2 - sc/source/ui/optdlg/calcoptionsdlg.cxx | 57 +++++++++++++++++++++++++++++++-- sw/source/uibase/wrtsh/wrtsh2.cxx | 56 +++++++++++++++++++------------- 3 files changed, 89 insertions(+), 26 deletions(-)
New commits: commit 1ecf795ffaf8c63280ea92f776b53558b3227504 Author: Caolán McNamara <[email protected]> Date: Wed Jan 28 15:57:10 2015 +0000 Related: tdf#82942 multiple crashes on changing text in SwInputFields i.e. load doc keeping setting text of "LINE" + ok as each popup appears will crash eventually Change-Id: Ibc4bb8fe65bd5dd380c0fe833e5ece2b39de5dbe diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx index 44b9183..a11dda2 100644 --- a/sw/source/uibase/wrtsh/wrtsh2.cxx +++ b/sw/source/uibase/wrtsh/wrtsh2.cxx @@ -175,7 +175,34 @@ void SwWrtShell::UpdateInputFlds( SwInputFieldList* pLst ) class FieldDeletionModify : public SwModify { public: - FieldDeletionModify(AbstractFldInputDlg* pInputFieldDlg) : mpInputFieldDlg(pInputFieldDlg) {} + FieldDeletionModify(AbstractFldInputDlg* pInputFieldDlg, SwField* pFld) + : mpInputFieldDlg(pInputFieldDlg) + { + SwInputField *const pInputField(dynamic_cast<SwInputField*>(pFld)); + SwSetExpField *const pSetExpFld(dynamic_cast<SwSetExpField*>(pFld)); + + if (pInputField && pInputField->GetFmtFld()) + { + mpFmtFld = pInputField->GetFmtFld(); + } + else if (pSetExpFld && pSetExpFld->GetFmtFld()) + { + mpFmtFld = pSetExpFld->GetFmtFld(); + } + + // Register for possible field deletion while dialog is open + if (mpFmtFld) + mpFmtFld->Add(this); + } + + ~FieldDeletionModify() + { + if (mpFmtFld) + { + // Dialog closed, remove modification listener + mpFmtFld->Remove(this); + } + } void Modify( const SfxPoolItem* pOld, const SfxPoolItem *) SAL_OVERRIDE { @@ -186,6 +213,7 @@ class FieldDeletionModify : public SwModify { case RES_REMOVE_UNO_OBJECT: case RES_OBJECTDYING: + mpFmtFld = NULL; mpInputFieldDlg->EndDialog(RET_CANCEL); break; } @@ -193,10 +221,10 @@ class FieldDeletionModify : public SwModify } private: AbstractFldInputDlg* mpInputFieldDlg; + SwFmtFld* mpFmtFld; }; // Start input dialog for a specific field - bool SwWrtShell::StartInputFldDlg( SwField* pFld, bool bNextButton, vcl::Window* pParentWin, OString* pWindowState ) { @@ -208,29 +236,11 @@ bool SwWrtShell::StartInputFldDlg( SwField* pFld, bool bNextButton, if(pWindowState && !pWindowState->isEmpty()) pDlg->SetWindowState(*pWindowState); - FieldDeletionModify aModify(pDlg.get()); - SwInputField *const pInputField(dynamic_cast<SwInputField*>(pFld)); - SwSetExpField *const pSetExpFld(dynamic_cast<SwSetExpField*>(pFld)); - if (pInputField && pInputField->GetFmtFld()) - { - // Register for possible input field deletion while dialog is open - pInputField->GetFmtFld()->Add(&aModify); - } - else if (pSetExpFld && pSetExpFld->GetFmtFld()) - { - pSetExpFld->GetFmtFld()->Add(&aModify); - } - - bool bRet = RET_CANCEL == pDlg->Execute(); + bool bRet; - if (pInputField && pInputField->GetFmtFld()) - { - // Dialog closed, remove modification listener - pInputField->GetFmtFld()->Remove(&aModify); - } - else if (pSetExpFld && pSetExpFld->GetFmtFld()) { - pSetExpFld->GetFmtFld()->Remove(&aModify); + FieldDeletionModify aModify(pDlg.get(), pFld); + bRet = RET_CANCEL == pDlg->Execute(); } if(pWindowState) commit 3e964eff2d6f01bb69e10279504319d0d6cb5d79 Author: Tor Lillqvist <[email protected]> Date: Wed Jan 28 17:01:14 2015 +0200 Use minimum necessary value for nRows Just temporary (haha, let's see...), the Right Thing would be to turn the mnOpenCLMinimumFormulaGroupSize down to some small value for the duration of the test document's construction and calculation, and then return it to its prevous value once the document has been dismissed. Change-Id: I52e9813af1ceb2410ef74723fadee21b89cffe47 diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index 21da615..6483562 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -231,7 +231,7 @@ struct Area OUString msTitle; int mnRows; - Area(const OUString& rTitle, int nRows) : + Area(const OUString& rTitle, int nRows = ScInterpreter::GetGlobalConfig().mnOpenCLMinimumFormulaGroupSize + 1) : msTitle(rTitle), mnRows(nRows) { @@ -306,7 +306,7 @@ struct Op : Area const OUString& rOp, double nRangeLo, double nRangeHi, double nEpsilon) : - Area(rTitle, 200), + Area(rTitle), msOp(rOp), mnRangeLo(nRangeLo), mnRangeHi(nRangeHi), @@ -458,7 +458,7 @@ struct BinOp : Op struct Round : Area { Round() : - Area("Round", 200) + Area("Round") { } commit 691553c19f0a8abbdb595a4375de1cf9904df932 Author: Tor Lillqvist <[email protected]> Date: Wed Jan 28 17:00:30 2015 +0200 Make ScInterpreter::GetGlobalConfig() SC_DLLPUBLIC Change-Id: Idd27688055a08ffe9a6970c28cd7da6f6e1a7f66 diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index 6f9e1e6..ff7fb11 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -119,7 +119,7 @@ public: DECL_FIXEDMEMPOOL_NEWDEL( ScInterpreter ) static void SetGlobalConfig(const ScCalcConfig& rConfig); - static const ScCalcConfig& GetGlobalConfig(); + static SC_DLLPUBLIC const ScCalcConfig& GetGlobalConfig(); static void GlobalExit(); // called by ScGlobal::Clear() commit 0132711bce74c6e3a3658ddd35b4973ad2b4cce0 Author: Tor Lillqvist <[email protected]> Date: Wed Jan 28 16:49:18 2015 +0200 Add ROUND test Change-Id: Ifa0c2bc6767d9d2e9b27c5a6b30929463b20407c diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx index f816ab4..21da615 100644 --- a/sc/source/ui/optdlg/calcoptionsdlg.cxx +++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx @@ -455,6 +455,57 @@ struct BinOp : Op } }; +struct Round : Area +{ + Round() : + Area("Round", 200) + { + } + + virtual ~Round() + { + } + + virtual void addHeader(ScDocument *pDoc, int nTab) const SAL_OVERRIDE + { + pDoc->SetString(ScAddress(0,0,nTab), "x"); + pDoc->SetString(ScAddress(1,0,nTab), "n"); + pDoc->SetString(ScAddress(2,0,nTab), "ROUND(x,n)"); + pDoc->SetString(ScAddress(3,0,nTab), "expected"); + } + + virtual void addRow(ScDocument *pDoc, int nRow, int nTab) const SAL_OVERRIDE + { + const double nX(comphelper::rng::uniform_real_distribution(0, 100)); + const int nN(comphelper::rng::uniform_int_distribution(1, 10)); + + pDoc->SetValue(ScAddress(0,1+nRow,nTab), nX); + pDoc->SetValue(ScAddress(1,1+nRow,nTab), nN); + + pDoc->SetString(ScAddress(2,1+nRow,nTab), + "=ROUND(" + ScAddress(0,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) + + "," + ScAddress(1,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) + + ")"); + + pDoc->SetValue(ScAddress(3,1+nRow,nTab), ::rtl::math::round(nX, (short) nN, rtl_math_RoundingMode_Corrected)); + + pDoc->SetString(ScAddress(4,1+nRow,nTab), + "=IF(ABS(" + ScAddress(2,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) + + "-" + ScAddress(3,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) + + ")<=3e-10" + ",0,1)"); + } + + virtual OUString getSummaryFormula(ScDocument *pDoc, int nTab) const SAL_OVERRIDE + { + return "=SUM(" + + ScRange(ScAddress(4,1,nTab), + ScAddress(4,1+mnRows-1,nTab)).Format(SCA_VALID|SCA_TAB_3D|SCA_VALID_COL|SCA_VALID_ROW|SCA_VALID_TAB, pDoc) + + ")"; + } + +}; + struct Reduction : Op { int mnNum; @@ -629,6 +680,8 @@ IMPL_LINK( ScCalcOptionsDialog, TestClickHdl, PushButton*, ) return ScInterpreter::gaussinv(nArg); })); + xTestDocument->addTest(Round()); + xTestDocument->addTest(Reduction("Sum", "SUM", 100, 0, -1000, 1000, 3e-10, [] (double nAccum, double nArg) {
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
