formula/source/core/api/FormulaCompiler.cxx | 8 ++- include/formula/FormulaCompiler.hxx | 1 sc/source/core/tool/token.cxx | 59 ++++++++++++++++++++++++++++ sc/source/filter/oox/pagesettings.cxx | 2 sc/source/ui/docshell/docsh4.cxx | 7 +++ sd/source/ui/view/drviews6.cxx | 17 +++----- sfx2/source/sidebar/ResourceManager.cxx | 5 +- sw/inc/calc.hxx | 8 ++- sw/qa/extras/uiwriter/uiwriter.cxx | 18 ++++++++ sw/source/core/bastyp/calc.cxx | 8 +++ sw/source/core/layout/ftnfrm.cxx | 3 - sw/source/uibase/dbui/dbmgr.cxx | 8 +++ sw/source/uibase/inc/uivwimp.hxx | 2 sw/source/uibase/uiview/uivwimp.cxx | 21 +++++---- vcl/unx/gtk3/gtk3gtkframe.cxx | 9 ++-- 15 files changed, 145 insertions(+), 31 deletions(-)
New commits: commit f2569b85c850aca8b92dfc92aa658c351444b1da Author: Jan-Marek Glogowski <glo...@fbihome.de> Date: Tue Jul 4 17:15:14 2017 +0200 tdf#108873 fix merge data handling in fields This is a regression from tdf#70346 / commit 4851cde7b98226b0f82ae2b191c290173e9b06c6 It added the whole DB row as variables to the SwCalc hash set. This works correct for conditionals when hiding sections, but not for conditionals used in fields - actually they break. Previously the field would do a fallback to query the DB again, if no variable was in the dict and the only possible variables in the dict could have been user-defined fields. This handles the added variables correctly for fields. Also fixes a bug to store the DB number values as number variables and adds the record number, as SwCalc::VarLook does. Change-Id: Ib0dbeda68234e671768ede55b2012235a3680276 Reviewed-on: https://gerrit.libreoffice.org/39509 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> (cherry picked from commit f54c6938f73b94fb6f722f3ea68454fee424e62e) Reviewed-on: https://gerrit.libreoffice.org/39613 (cherry picked from commit 5cde0b62fd074bca132caf6b6010aa002ccf7c87) diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx index 8f54ab3bb385..4bf0ec2580cb 100644 --- a/sw/inc/calc.hxx +++ b/sw/inc/calc.hxx @@ -102,10 +102,11 @@ enum SwCalcError class SwSbxValue : public SbxValue { bool bVoid; + bool bDBvalue; public: // always default to a number. otherwise it will become a SbxEMPTY - SwSbxValue( long n = 0 ) : bVoid(false) { PutLong( n ); } - SwSbxValue( const double& rD ) : bVoid(false) { PutDouble( rD ); } + SwSbxValue( long n = 0 ) : bVoid(false), bDBvalue(false) { PutLong( n ); } + SwSbxValue( const double& rD ) : bVoid(false), bDBvalue(false) { PutDouble( rD ); } bool GetBool() const; double GetDouble() const; @@ -113,6 +114,9 @@ public: bool IsVoidValue() {return bVoid;} void SetVoidValue(bool bSet) {bVoid = bSet;} + + bool IsDBvalue() {return bDBvalue;} + void SetDBvalue(bool bSet) {bDBvalue = bSet;} }; // Calculate HashTables for VarTable und Operations diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx index 3f2d0ba89781..a8090a3423dd 100644 --- a/sw/source/core/bastyp/calc.cxx +++ b/sw/source/core/bastyp/calc.cxx @@ -499,6 +499,14 @@ SwCalcExp* SwCalc::VarLook( const OUString& rStr, bool bIns ) pFndExp->nValue.PutDouble( pUField->GetValue() ); } } + else if ( !pFndExp->pFieldType && pFndExp->nValue.IsDBvalue() ) + { + if ( pFndExp->nValue.IsString() ) + m_aErrExpr.nValue.PutString( pFndExp->nValue.GetOUString() ); + else if ( pFndExp->nValue.IsDouble() ) + m_aErrExpr.nValue.PutDouble( pFndExp->nValue.GetDouble() ); + pFndExp = &m_aErrExpr; + } return pFndExp; } diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx index 9adf98c24340..991b6127c251 100644 --- a/sw/source/uibase/dbui/dbmgr.cxx +++ b/sw/source/uibase/dbui/dbmgr.cxx @@ -2164,6 +2164,10 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, const OUString* pColNames = aColNames.getConstArray(); OUString aString; + // add the "record number" variable, as SwCalc::VarLook would. + rCalc.VarChange( GetAppCharClass().lowercase( + SwFieldType::GetTypeStr(TYP_DBSETNUMBERFLD) ), GetSelectedRecordId() ); + for( int nCol = 0; nCol < aColNames.getLength(); nCol++ ) { // get the column type @@ -2189,7 +2193,8 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, if( bValidValue ) { SwSbxValue aValue; - aValue.PutString( aString ); + aValue.PutDouble( aNumber ); + aValue.SetDBvalue( true ); SAL_INFO( "sw.ui", "'" << pColNames[nCol] << "': " << aNumber << " / " << aString ); rCalc.VarChange( pColNames[nCol], aValue ); } @@ -2198,6 +2203,7 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, { SwSbxValue aValue; aValue.PutString( aString ); + aValue.SetDBvalue( true ); SAL_INFO( "sw.ui", "'" << pColNames[nCol] << "': " << aString ); rCalc.VarChange( pColNames[nCol], aValue ); } commit 7ae220a53b671175a0f15e3ee70ed5b28de1f008 Author: Eike Rathke <er...@redhat.com> Date: Tue Jul 4 15:22:23 2017 +0200 Set error on more than max params (255) per function Parameter count is size byte, so.. SUM(1,1,1,...) with 256 arguments resulted in 0 (uint8 wrapping around). (cherry picked from commit 209cc5c211260a6c20cc6fb5ac02fd5a88100314) Change-Id: Ib9997ad0d0d13d4c5171f276148b6c5cad570d5b Reviewed-on: https://gerrit.libreoffice.org/39506 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 1d1bdfd94fc2963d0281ea4fd8d3a98e39f4ccf7) diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index 07c39037585a..2a561d2182e3 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -1511,7 +1511,7 @@ void FormulaCompiler::Factor() } else SetError( FormulaError::PairExpected); - sal_uInt8 nSepCount = 0; + sal_uInt32 nSepCount = 0; const sal_uInt16 nSepPos = pArr->nIndex - 1; // separator position, if any if( !bNoParam ) { @@ -1521,6 +1521,8 @@ void FormulaCompiler::Factor() NextToken(); CheckSetForceArrayParameter( mpToken, nSepCount); nSepCount++; + if (nSepCount > FORMULA_MAXPARAMS) + SetError( FormulaError::CodeOverflow); eOp = Expression(); } } @@ -1617,7 +1619,7 @@ void FormulaCompiler::Factor() } else SetError( FormulaError::PairExpected); - sal_uInt8 nSepCount = 0; + sal_uInt32 nSepCount = 0; if( !bNoParam ) { nSepCount++; @@ -1626,6 +1628,8 @@ void FormulaCompiler::Factor() NextToken(); CheckSetForceArrayParameter( mpToken, nSepCount); nSepCount++; + if (nSepCount > FORMULA_MAXPARAMS) + SetError( FormulaError::CodeOverflow); eOp = Expression(); } } diff --git a/include/formula/FormulaCompiler.hxx b/include/formula/FormulaCompiler.hxx index 37da2ef8becc..5293c504b1dd 100644 --- a/include/formula/FormulaCompiler.hxx +++ b/include/formula/FormulaCompiler.hxx @@ -38,6 +38,7 @@ #define FORMULA_MAXJUMPCOUNT 32 /* maximum number of jumps (ocChoose) */ #define FORMULA_MAXTOKENS 8192 /* maximum number of tokens in formula */ +#define FORMULA_MAXPARAMS 255 /* maximum number of parameters per function (byte) */ namespace com { namespace sun { namespace star { commit 3d39e0e1456aa00baa68c0a7e38b864a9b9a4d9e Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Sat May 27 10:47:53 2017 +0200 tdf#107976 sw: let a view handle multiple transferables Otherwise only the last transferable gets unregistered on closing the view, which means a use-after-free when trying to paste something copied from a closed document. (cherry picked from commit 336f893c57c3c0281d4899629ad55603837d5d40) Conflicts: sw/qa/extras/uiwriter/uiwriter.cxx sw/source/uibase/inc/uivwimp.hxx Reviewed-on: https://gerrit.libreoffice.org/39499 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit 747be68119f2c85f1cdf6151fac67cd8cb840b76) Change-Id: I65594e07fa4fefe7ae51a12455b755d64700a00d diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index b3c0ff237025..90b54c38d19d 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -90,6 +90,7 @@ #include <drawfont.hxx> #include <txtfrm.hxx> #include <hyp.hxx> +#include <swdtflvr.hxx> #include <editeng/svxenum.hxx> #include <comphelper/propertysequence.hxx> #include <sfx2/classificationhelper.hxx> @@ -230,6 +231,7 @@ public: void testTdf104814(); void testTdf105417(); void testTdf105625(); + void testTdf107976(); void testCreateDocxAnnotation(); CPPUNIT_TEST_SUITE(SwUiWriterTest); @@ -353,6 +355,7 @@ public: CPPUNIT_TEST(testTdf104814); CPPUNIT_TEST(testTdf105417); CPPUNIT_TEST(testTdf105625); + CPPUNIT_TEST(testTdf107976); CPPUNIT_TEST(testCreateDocxAnnotation); CPPUNIT_TEST_SUITE_END(); @@ -4475,6 +4478,21 @@ void SwUiWriterTest::testCreateDocxAnnotation() CPPUNIT_ASSERT_EQUAL(aResultText, xField->getPropertyValue("Content").get<OUString>()); } +void SwUiWriterTest::testTdf107976() +{ + // Create a document and create two transferables. + SwDoc* pDoc = createDoc(); + SwWrtShell& rShell = *pDoc->GetDocShell()->GetWrtShell(); + rtl::Reference<SwTransferable> pTransferable(new SwTransferable(rShell)); + rtl::Reference<SwTransferable> pTransferable2(new SwTransferable(rShell)); + // Now close the document. + mxComponent->dispose(); + mxComponent.clear(); + // This failed: the first shell had a pointer to the deleted shell. + CPPUNIT_ASSERT(!pTransferable->GetShell()); + CPPUNIT_ASSERT(!pTransferable2->GetShell()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/uibase/inc/uivwimp.hxx b/sw/source/uibase/inc/uivwimp.hxx index 0b84e88d8bdf..f0bc96d7e661 100644 --- a/sw/source/uibase/inc/uivwimp.hxx +++ b/sw/source/uibase/inc/uivwimp.hxx @@ -94,7 +94,7 @@ class SwView_Impl css::uno::Reference< css::lang::XEventListener > xClipEvtLstnr; css::uno::Reference< css::frame::XDispatchProviderInterceptor > xDisProvInterceptor; css::uno::Reference< css::view::XSelectionSupplier > mxXTextView; // UNO object - css::uno::WeakReference< css::lang::XUnoTunnel > xTransferable; + std::vector< css::uno::WeakReference< css::lang::XUnoTunnel > > mxTransferables; // temporary document for printing text of selection / multi selection // in PDF export. diff --git a/sw/source/uibase/uiview/uivwimp.cxx b/sw/source/uibase/uiview/uivwimp.cxx index 60bcbc615579..687c24479d73 100644 --- a/sw/source/uibase/uiview/uivwimp.cxx +++ b/sw/source/uibase/uiview/uivwimp.cxx @@ -214,15 +214,18 @@ void SwView_Impl::AddClipboardListener() void SwView_Impl::Invalidate() { GetUNOObject_Impl()->Invalidate(); - Reference< XUnoTunnel > xTunnel(xTransferable.get(), UNO_QUERY); - if(xTunnel.is()) - + for (const auto& xTransferable: mxTransferables) { - SwTransferable* pTransferable = reinterpret_cast< SwTransferable * >( - sal::static_int_cast< sal_IntPtr >( - xTunnel->getSomething(SwTransferable::getUnoTunnelId()))); - if(pTransferable) - pTransferable->Invalidate(); + Reference< XUnoTunnel > xTunnel(xTransferable.get(), UNO_QUERY); + if(xTunnel.is()) + + { + SwTransferable* pTransferable = reinterpret_cast< SwTransferable * >( + sal::static_int_cast< sal_IntPtr >( + xTunnel->getSomething(SwTransferable::getUnoTunnelId()))); + if(pTransferable) + pTransferable->Invalidate(); + } } } @@ -231,7 +234,7 @@ void SwView_Impl::AddTransferable(SwTransferable& rTransferable) //prevent removing of the non-referenced SwTransferable rTransferable.m_refCount++; { - xTransferable = Reference<XUnoTunnel> (&rTransferable); + mxTransferables.push_back(uno::WeakReference<lang::XUnoTunnel>(uno::Reference<lang::XUnoTunnel>(&rTransferable))); } rTransferable.m_refCount--; } commit b75b0bd20a3805af9f6a329c9b365b3b6a276f50 Author: Michael Stahl <mst...@redhat.com> Date: Mon Jun 19 11:40:12 2017 +0200 tdf#101821 sw: layout: don't move endnotes into footnotes' container The bugdoc has a single 1-column section from start to end, no footnotes but lots of endnotes, and the section has the settings "Footnotes - collect at end of text" unchecked and "Endnotes - collect at end of section" checked. This means that the SwFootnoteContFrame for footnotes would be put directly below the SwPageFrame (so that multiple sections on a single page can share it), but the SwFootnoteContFrame for the endnotes is put below the SwColumnFrame (which is created despite only 1 column) below the SwSectionFrame. Hence content in endnotes has the mbInfSct flag set, and the crash happens because the endnotes are moved from below the SwSectionFrame to a new SwFootnoteContFrame that is directly below a SwPageFrame, without clearing the mbInfSct flag. Fix the wrong call in SwFootnoteBossFrame::MoveFootnotes_() to FindFootnoteBossFrame() that resulted in the wrong (unsuitable for endnotes) SwFootnoteContFrame to be used as the target for the move. Change-Id: I64f6b86441e5ac1f16433f005e97c274a1c69dfa (cherry picked from commit 4c0b3520b66477334a7971dbed7ffcdcd265e749) Reviewed-on: https://gerrit.libreoffice.org/39104 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> (cherry picked from commit 2d34d70eb928f6818d9f68f1da07673ce48f90ea) diff --git a/sw/source/core/layout/ftnfrm.cxx b/sw/source/core/layout/ftnfrm.cxx index 6ec9160ac346..290240b63e9b 100644 --- a/sw/source/core/layout/ftnfrm.cxx +++ b/sw/source/core/layout/ftnfrm.cxx @@ -1905,7 +1905,8 @@ void SwFootnoteBossFrame::MoveFootnotes_( SwFootnoteFrames &rFootnoteArr, bool b SwFootnoteFrame* pLastInsertedFootnote = nullptr; for (SwFootnoteFrame* pFootnote : rFootnoteArr) { - SwFootnoteBossFrame* pRefBoss = pFootnote->GetRef()->FindFootnoteBossFrame( true ); + SwFootnoteBossFrame* pRefBoss(pFootnote->GetRef()->FindFootnoteBossFrame( + !pFootnote->GetAttr()->GetFootnote().IsEndNote())); if( pRefBoss != this ) { const sal_uInt16 nRefNum = pRefBoss->FindPageFrame()->GetPhyPageNum(); commit 18c1755460f57a626e72987d1f3e8c326c82f441 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Jun 28 02:15:04 2017 +0200 handle SID_ENCRYPTIONDATA for shared password protected docs, tdf#56173 Change-Id: Iadfe880b7be3186410a08568844d8812f176005d Reviewed-on: https://gerrit.libreoffice.org/39332 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 669c12d59b6131f44945f166c77ae98df52ebb9e) Reviewed-on: https://gerrit.libreoffice.org/39337 Reviewed-by: Eike Rathke <er...@redhat.com> (cherry picked from commit 20ca5b5fae58ee46362fbd4c5f51ee21e89c3c35) diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index 0bc4581359c7..20f962546326 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -2458,6 +2458,13 @@ uno::Reference< frame::XModel > ScDocShell::LoadSharedDocument() aArgs[1].Name = "Password"; aArgs[1].Value <<= pPasswordItem->GetValue(); } + const SfxUnoAnyItem* pEncryptionItem = SfxItemSet::GetItem<SfxUnoAnyItem>(GetMedium()->GetItemSet(), SID_ENCRYPTIONDATA, false); + if (pEncryptionItem) + { + aArgs.realloc(aArgs.getLength() + 1); + aArgs[aArgs.getLength() - 1].Name = "EncryptionData"; + aArgs[aArgs.getLength() - 1].Value = pEncryptionItem->GetValue(); + } } xModel.set( commit f79c4146930bd20deb0a2e399d31c1f1275fbfee Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Jun 28 04:16:51 2017 +0200 always import page scaling, tdf#65848 Change-Id: If5bad2336443280dd33d750b1b2749a06f2b5101 Reviewed-on: https://gerrit.libreoffice.org/39334 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit fef72f9623bac7f9aa50b4f2606e6ec6282cfe1f) Reviewed-on: https://gerrit.libreoffice.org/39340 Reviewed-by: Eike Rathke <er...@redhat.com> (cherry picked from commit ae56c9862222718871b6bf098162c2b8b4c44b82) diff --git a/sc/source/filter/oox/pagesettings.cxx b/sc/source/filter/oox/pagesettings.cxx index 5af216a589d4..a34aca50b88b 100644 --- a/sc/source/filter/oox/pagesettings.cxx +++ b/sc/source/filter/oox/pagesettings.cxx @@ -911,7 +911,7 @@ void PageSettingsConverter::writePageSettingsProperties( else { // scale may be 0 which indicates uninitialized - sal_Int16 nScale = (rModel.mbValidSettings && (rModel.mnScale > 0)) ? getLimitedValue< sal_Int16, sal_Int32 >( rModel.mnScale, 10, 400 ) : 100; + sal_Int16 nScale = (rModel.mnScale > 0) ? getLimitedValue< sal_Int16, sal_Int32 >( rModel.mnScale, 10, 400 ) : 100; rPropSet.setProperty( PROP_PageScale, nScale ); } commit 5345f96f0dc36cd1dc7e918be837f068be47ec0c Author: Eike Rathke <er...@redhat.com> Date: Wed Jun 21 19:42:36 2017 +0200 Resolves: tdf#108671 mark named expression single reference #REF! if deleted Probably broken already since commit f77c9d5b3cb65d9c2e2417f60bec1113feac50e1 Date: Mon Jul 29 14:47:07 2013 -0400 Change-Id: If90a959d000a1bf5ab0804deb22d5cfad413ea5e (cherry picked from commit 6580e171ad054dca38f55822e67a400191cecdf5) Reviewed-on: https://gerrit.libreoffice.org/39072 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 777103737f9b20f680d9c9f3d0610e91383f7499) diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index bf25d135f728..584502f17c1f 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -3640,6 +3640,65 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName( case svSingleRef: { ScSingleRefData& rRef = *p->GetSingleRef(); + if (rCxt.mnRowDelta < 0) + { + // row(s) deleted. + + if (rRef.IsRowRel()) + // Don't modify relative references in names. + break; + + ScAddress aAbs = rRef.toAbs(rPos); + + if (aAbs.Col() < rCxt.maRange.aStart.Col() || rCxt.maRange.aEnd.Col() < aAbs.Col()) + // column of the reference is not in the deleted column range. + break; + + if (aAbs.Tab() > rCxt.maRange.aEnd.Tab() || aAbs.Tab() < rCxt.maRange.aStart.Tab()) + // wrong tables + break; + + const SCROW nDelStartRow = rCxt.maRange.aStart.Row() + rCxt.mnRowDelta; + const SCROW nDelEndRow = nDelStartRow - rCxt.mnRowDelta - 1; + + if (nDelStartRow <= aAbs.Row() && aAbs.Row() <= nDelEndRow) + { + // This reference is deleted. + rRef.SetRowDeleted(true); + aRes.mbReferenceModified = true; + break; + } + } + else if (rCxt.mnColDelta < 0) + { + // column(s) deleted. + + if (rRef.IsColRel()) + // Don't modify relative references in names. + break; + + ScAddress aAbs = rRef.toAbs(rPos); + + if (aAbs.Row() < rCxt.maRange.aStart.Row() || rCxt.maRange.aEnd.Row() < aAbs.Row()) + // row of the reference is not in the deleted row range. + break; + + if (aAbs.Tab() > rCxt.maRange.aEnd.Tab() || aAbs.Tab() < rCxt.maRange.aStart.Tab()) + // wrong tables + break; + + const SCCOL nDelStartCol = rCxt.maRange.aStart.Col() + rCxt.mnColDelta; + const SCCOL nDelEndCol = nDelStartCol - rCxt.mnColDelta - 1; + + if (nDelStartCol <= aAbs.Col() && aAbs.Col() <= nDelEndCol) + { + // This reference is deleted. + rRef.SetColDeleted(true); + aRes.mbReferenceModified = true; + break; + } + } + if (adjustSingleRefInName(rRef, rCxt, rPos, nullptr)) aRes.mbReferenceModified = true; } commit 20a0569ae99fc1ef8537ed6b1819e233b5e2f244 Author: Caolán McNamara <caol...@redhat.com> Date: Mon May 22 09:10:14 2017 +0100 Resolves: tdf#107959 SdrGrafObj leak triggers later crash if the graphic doesn't change, then the cloned SdrGrafObj persists beyond stylesheet destruction and blows up Change-Id: I0013e7e118985c1334ab460507bc5c8271700160 (cherry picked from commit 118401aae4516bf4cc122e96b376d129ab3a3d5e) (cherry picked from commit e4db2fc10ba4447fa5393853d0cfed795b260f0b) Reviewed-on: https://gerrit.libreoffice.org/39261 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit c00af602013b840f4f92c15b259ce6cdeeaabcae) diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx index 1e137982404e..ec445e75fe37 100644 --- a/sd/source/ui/view/drviews6.cxx +++ b/sd/source/ui/view/drviews6.cxx @@ -276,20 +276,17 @@ void DrawViewShell::ExecBmpMask( SfxRequest& rReq ) if ( pObj && !mpDrawView->IsTextEdit() ) { - SdrGrafObj* pNewObj = pObj->Clone(); + std::unique_ptr<SdrGrafObj> xNewObj(pObj->Clone()); bool bCont = true; - if( pNewObj->IsLinkedGraphic() ) + if (xNewObj->IsLinkedGraphic()) { ScopedVclPtrInstance< MessageDialog > aQueryBox( static_cast<vcl::Window*>(GetActiveWindow()),"QueryUnlinkImageDialog","modules/sdraw/ui/queryunlinkimagedialog.ui"); if (RET_YES == aQueryBox->Execute()) - pNewObj->ReleaseGraphicLink(); + xNewObj->ReleaseGraphicLink(); else - { - delete pNewObj; bCont = false; - } } SfxChildWindow* pWnd = GetViewFrame()->GetChildWindow( @@ -298,21 +295,21 @@ void DrawViewShell::ExecBmpMask( SfxRequest& rReq ) assert(pBmpMask); if (bCont && pBmpMask) { - const Graphic& rOldGraphic = pNewObj->GetGraphic(); + const Graphic& rOldGraphic = xNewObj->GetGraphic(); const Graphic aNewGraphic(pBmpMask->Mask(rOldGraphic)); if( aNewGraphic != rOldGraphic ) { SdrPageView* pPV = mpDrawView->GetSdrPageView(); - pNewObj->SetEmptyPresObj( false ); - pNewObj->SetGraphic(pBmpMask->Mask(pNewObj->GetGraphic())); + xNewObj->SetEmptyPresObj(false); + xNewObj->SetGraphic(pBmpMask->Mask(xNewObj->GetGraphic())); OUString aStr( mpDrawView->GetDescriptionOfMarkedObjects() ); aStr += " " + SD_RESSTR(STR_EYEDROPPER); mpDrawView->BegUndo( aStr ); - mpDrawView->ReplaceObjectAtView( pObj, *pPV, pNewObj ); + mpDrawView->ReplaceObjectAtView(pObj, *pPV, xNewObj.release()); mpDrawView->EndUndo(); } } commit 5eef53248781a97d83c9a639350c32859caa341b Author: Eike Rathke <er...@redhat.com> Date: Thu Jun 29 14:02:58 2017 +0200 Don't let m_nGrabLevel become negative, tdf#108705 related ... which then later leads to 2 Giga loops on the next GtkSalFrame dtor call, for example on the second AutoFilter button popup in Calc. Fall-out from commit 9b32355ea6d8d5e34363ba0c57e74d75d7a7b1b7 Date: Fri Jun 23 12:48:12 2017 +0100 Resolves: tdf#108705 remove grabs on widget before destroying it that brought this to surface. Change-Id: I0edb7eec9384c716800f07ef1ed91fc8f1d7c119 (cherry picked from commit 637d917d7551fed19c9685f974fb3e732a8f97e2) Reviewed-on: https://gerrit.libreoffice.org/39388 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit 5eec9409f10d1a08c826edb689eefb86240b7b25) diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index 95cad3d56a0a..d8b88f9abc85 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -2573,9 +2573,12 @@ void GtkSalFrame::addGrabLevel() void GtkSalFrame::removeGrabLevel() { - --m_nGrabLevel; - if (m_nGrabLevel == 0) - gtk_grab_remove(getMouseEventWidget()); + if (m_nGrabLevel > 0) + { + --m_nGrabLevel; + if (m_nGrabLevel == 0) + gtk_grab_remove(getMouseEventWidget()); + } } void GtkSalFrame::closePopup() commit 67ebaff71f6327d2a6bee4bfd9babef83dd9b2c3 Author: Michael Stahl <mst...@redhat.com> Date: Tue Jun 27 17:32:16 2017 +0200 tdf#108814 sfx2: fix crash in sidebar when XUpdateModel not implemented com.sun.star.ui.XUpdateModel was added in 5.1 so pre-existing extensions don't implement it. (regression from 0635208edf1cdee4235ea87666a473ac81007555) Change-Id: I6749a9cf2fc82b9cd90d85a682247104e369e167 (cherry picked from commit d109948f0dd4190d7aca1e0fa7e2706ef3f40a6c) Reviewed-on: https://gerrit.libreoffice.org/39312 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 622d2b4c250f6c3cc67f10887f3e3ec9db3f69a5) diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx index 97742b73b5fc..f609c799d066 100644 --- a/sfx2/source/sidebar/ResourceManager.cxx +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -719,7 +719,10 @@ void ResourceManager::UpdateModel(const css::uno::Reference<css::frame::XModel>& for (SharedPanelContainer::const_iterator it = rContainer.begin(); it != rContainer.end(); ++it) { css::uno::Reference<css::ui::XUpdateModel> xPanel((*it)->GetPanelComponent(), css::uno::UNO_QUERY); - xPanel->updateModel(xModel); + if (xPanel.is()) // tdf#108814 interface is optional + { + xPanel->updateModel(xModel); + } } } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits