basegfx/source/tools/unotools.cxx | 5 chart2/source/tools/TitleHelper.cxx | 20 connectivity/source/drivers/postgresql/pq_statement.cxx | 1 dbaccess/source/core/api/RowSetBase.cxx | 2 editeng/source/editeng/impedit3.cxx | 2 filter/Configuration_filter.mk | 220 - filter/source/config/fragments/langfilter.xsl | 3 filter/source/flash/swfwriter1.cxx | 2 filter/source/msfilter/mstoolbar.cxx | 2 fpicker/source/aqua/NSURL_OOoAdditions.mm | 2 include/sal/log-areas.dox | 1 include/svx/extedit.hxx | 42 include/vcl/dibtools.hxx | 3 linguistic/source/gciterator.cxx | 110 officecfg/registry/data/org/openoffice/VCL.xcu | 2 readlicense_oo/license/CREDITS.fodt | 2958 ++++++++-------- sal/osl/unx/system.c | 4 sc/inc/column.hxx | 1 sc/inc/document.hxx | 6 sc/inc/table.hxx | 6 sc/source/core/data/cellvalue.cxx | 4 sc/source/core/data/column3.cxx | 13 sc/source/core/data/conditio.cxx | 3 sc/source/core/data/documen3.cxx | 2 sc/source/core/data/documen4.cxx | 3 sc/source/core/data/documentimport.cxx | 3 sc/source/core/data/table3.cxx | 25 sc/source/core/tool/rangenam.cxx | 2 sc/source/ui/dbgui/PivotLayoutTreeList.cxx | 15 sc/source/ui/dbgui/tpsort.cxx | 2 sc/source/ui/docshell/dbdocfun.cxx | 1 sc/source/ui/drawfunc/graphsh.cxx | 32 sc/source/ui/inc/graphsh.hxx | 4 sd/source/ui/inc/DrawViewShell.hxx | 4 sd/source/ui/view/drviews2.cxx | 35 sd/source/ui/view/drviewsa.cxx | 1 svtools/source/brwbox/brwbox2.cxx | 7 svx/source/core/extedit.cxx | 97 sw/qa/core/data/html/pass/fdo87601-1.html | 100 sw/qa/extras/ooxmlimport/data/rhbz1180114.docx |binary sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 5 sw/qa/extras/rtfimport/rtfimport.cxx | 4 sw/source/core/doc/docfmt.cxx | 10 sw/source/core/frmedt/fefly1.cxx | 3 sw/source/core/frmedt/feshview.cxx | 14 sw/source/core/uibase/dbui/dbmgr.cxx | 41 sw/source/core/uibase/inc/grfsh.hxx | 5 sw/source/core/uibase/shells/grfsh.cxx | 50 sw/source/filter/html/htmlcss1.cxx | 4 sw/source/filter/html/swhtml.cxx | 9 sw/source/filter/html/swhtml.hxx | 2 sw/source/filter/ww1/fltshell.cxx | 2 sw/source/filter/ww8/ww8par5.cxx | 25 sw/source/filter/ww8/ww8par6.cxx | 3 sw/source/filter/ww8/ww8scan.cxx | 11 sw/source/filter/xml/xmltexti.cxx | 18 ucb/source/ucp/tdoc/tdoc_docmgr.cxx | 9 ucb/source/ucp/tdoc/tdoc_docmgr.hxx | 9 vcl/source/gdi/dibtools.cxx | 39 vcl/unx/gtk/a11y/atkwrapper.cxx | 11 writerfilter/source/dmapper/DomainMapper.cxx | 6 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 3 writerfilter/source/ooxml/model.xml | 16 63 files changed, 2289 insertions(+), 1755 deletions(-)
New commits: commit 4af56988051ef383ab4a71a200a86269bab9b75a Author: Lionel Elie Mamane <[email protected]> Date: Thu Jan 22 13:42:13 2015 +0100 fdo#88475 RowSetBase: reposition cache before interrogating it This partially reverts: commit d20232a77565f46fedc0b556f4d50addff4d3559 Author: Lionel Elie Mamane <[email protected]> Date: Thu Dec 6 13:22:06 2012 +0100 Don't force refresh when higher up code did not request it Change-Id: I0f415c96fc05c1d776d14885751aef020c42f4ae which did not take into account that the cache is shared with the clones. This is not a cherry-pick from master, but a more conservative version of commit d7c9a1d9d65fe8b1a56c5c280d2ca6640a549d2f. Change-Id: I1fa5c3169806760d35dd07e1fc1b8d5522dd3641 Reviewed-on: https://gerrit.libreoffice.org/14104 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/dbaccess/source/core/api/RowSetBase.cxx b/dbaccess/source/core/api/RowSetBase.cxx index 5d9438e..47342a2 100644 --- a/dbaccess/source/core/api/RowSetBase.cxx +++ b/dbaccess/source/core/api/RowSetBase.cxx @@ -657,6 +657,7 @@ sal_Bool SAL_CALL ORowSetBase::isFirst( ) throw(SQLException, RuntimeException, if ( impl_rowDeleted() ) return ( m_nDeletedPosition == 1 ); + positionCache( MOVE_NONE_REFRESH_ONLY ); bool bIsFirst = m_pCache->isFirst(); SAL_INFO("dbaccess", "ORowSetBase::isFirst() = " << bIsFirst << " Clone = " << m_bClone); @@ -686,6 +687,7 @@ sal_Bool SAL_CALL ORowSetBase::isLast( ) throw(SQLException, RuntimeException, return ( m_nDeletedPosition == impl_getRowCount() ); } + positionCache( MOVE_NONE_REFRESH_ONLY ); bool bIsLast = m_pCache->isLast(); SAL_INFO("dbaccess", "ORowSetBase::isLast() = " << bIsLast << " Clone = " << m_bClone); commit ac9e1086bab4d3c2c45aa44091c5e3b031247859 Author: Caolán McNamara <[email protected]> Date: Fri Jan 23 14:42:28 2015 +0000 Resolves: fdo#88735 crash after calling sort after subtotal removal Change-Id: Ia30271426ea47b7bf5af85d16591a02e6d52b3d9 (cherry picked from commit 0442cd217645aa4fdd924e4c2e4f90a77f1fbbad) Reviewed-on: https://gerrit.libreoffice.org/14140 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Eike Rathke <[email protected]> diff --git a/sc/source/ui/dbgui/tpsort.cxx b/sc/source/ui/dbgui/tpsort.cxx index a9a793c..1f21119 100644 --- a/sc/source/ui/dbgui/tpsort.cxx +++ b/sc/source/ui/dbgui/tpsort.cxx @@ -151,7 +151,7 @@ void ScTabPageSortFields::Reset( const SfxItemSet& /* rArgSet */ ) FillFieldLists(0); // ListBox selection: - if ( aSortData.maKeyState[0].bDoSort ) + if (!aSortData.maKeyState.empty() && aSortData.maKeyState[0].bDoSort) { // Make sure that the all sort keys are reset for ( sal_uInt16 i=nSortKeyCount; i<aSortData.GetSortKeyCount(); i++ ) commit cd9c86808ea13226e6f309a48182a62d310f8bbe Author: Eike Rathke <[email protected]> Date: Fri Jan 23 14:28:54 2015 +0100 fix abuse of OUStringBuffer(int) ctor Partial backport of 853c2fc71a96755a9dee629fd5d0e1cff9a48034 Change-Id: I14e26da332a829c6381ee9e07571171ebebe0ac0 Reviewed-on: https://gerrit.libreoffice.org/14133 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index 6e0da40..17b54985 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -375,7 +375,8 @@ void ScDocument::InsertTableOp(const ScTabOpParam& rParam, // Mehrfachopera } ScRefAddress aRef; - OUStringBuffer aForString('='); + OUStringBuffer aForString; + aForString.append('='); aForString.append(ScCompiler::GetNativeSymbol(ocTableOp)); aForString.append(ScCompiler::GetNativeSymbol( ocOpen)); diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx index 32ff6fb..5f285cb 100644 --- a/sc/source/core/data/documentimport.cxx +++ b/sc/source/core/data/documentimport.cxx @@ -333,7 +333,8 @@ void ScDocumentImport::setTableOpCells(const ScRange& rRange, const ScTabOpParam ScDocument* pDoc = &mpImpl->mrDoc; ScRefAddress aRef; - OUStringBuffer aFormulaBuf('='); + OUStringBuffer aFormulaBuf; + aFormulaBuf.append('='); aFormulaBuf.append(ScCompiler::GetNativeSymbol(ocTableOp)); aFormulaBuf.append(ScCompiler::GetNativeSymbol(ocOpen)); commit d5efeaa39860c7cd332f4f3753c94a6cfb83426a Author: Caolán McNamara <[email protected]> Date: Fri Jan 23 11:45:14 2015 +0000 valgrind invalid read after delete in rhbz499052-1.html Change-Id: Iecada2f8b6d977cc3f76814e4b2f38895873c362 (cherry picked from commit ae5410086e6cbe30b8a650b10b4d2250e5e017ec) Reviewed-on: https://gerrit.libreoffice.org/14129 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/source/filter/html/htmlcss1.cxx b/sw/source/filter/html/htmlcss1.cxx index e4628b6..c09cc86 100644 --- a/sw/source/filter/html/htmlcss1.cxx +++ b/sw/source/filter/html/htmlcss1.cxx @@ -2299,7 +2299,9 @@ void SwHTMLParser::InsertParaAttrs( const SfxItemSet& rItemSet ) if( RES_PARATR_BEGIN > nWhich ) (*ppAttr)->SetLikePara(); aParaAttrs.push_back( *ppAttr ); - EndAttr( *ppAttr, 0, false ); + bool bSuccess = EndAttr( *ppAttr, 0, false ); + if (!bSuccess) + aParaAttrs.pop_back(); } pItem = aIter.NextItem(); diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx index f6e3e39..0ab6909 100644 --- a/sw/source/filter/html/swhtml.cxx +++ b/sw/source/filter/html/swhtml.cxx @@ -2986,9 +2986,11 @@ void SwHTMLParser::NewAttr( _HTMLAttr **ppAttr, const SfxPoolItem& rItem ) (*ppAttr) = new _HTMLAttr( *pPam->GetPoint(), rItem, ppAttr ); } -void SwHTMLParser::EndAttr( _HTMLAttr* pAttr, _HTMLAttr **ppDepAttr, +bool SwHTMLParser::EndAttr( _HTMLAttr* pAttr, _HTMLAttr **ppDepAttr, bool bChkEmpty ) { + bool bRet = true; + OSL_ENSURE( !ppDepAttr, "SwHTMLParser::EndAttr: ppDepAttr-Feature ungetestet?" ); // Der Listenkopf ist im Attribut gespeichert _HTMLAttr **ppHead = pAttr->ppHead; @@ -3123,6 +3125,7 @@ void SwHTMLParser::EndAttr( _HTMLAttr* pAttr, _HTMLAttr **ppDepAttr, // leere Attribute in der Prev-Liste befinden, die dann trotzdem // gesetzt werden muessen _HTMLAttr *pPrev = pAttr->GetPrev(); + bRet = false; delete pAttr; if( pPrev ) @@ -3150,6 +3153,8 @@ void SwHTMLParser::EndAttr( _HTMLAttr* pAttr, _HTMLAttr **ppDepAttr, if( bMoveBack ) pPam->Move( fnMoveForward ); + + return bRet; } void SwHTMLParser::DeleteAttr( _HTMLAttr* pAttr ) diff --git a/sw/source/filter/html/swhtml.hxx b/sw/source/filter/html/swhtml.hxx index cd97cad..39878b0 100644 --- a/sw/source/filter/html/swhtml.hxx +++ b/sw/source/filter/html/swhtml.hxx @@ -507,7 +507,7 @@ class SwHTMLParser : public SfxHTMLParser, public SwClient // ppDepAttr gibt einen Attribut-Tabellen-Eintrag an, dessen Attribute // gesetzt sein muessen, bevor das Attribut beendet werden darf void NewAttr( _HTMLAttr **ppAttr, const SfxPoolItem& rItem ); - void EndAttr( _HTMLAttr *pAttr, _HTMLAttr **ppDepAttr=0, + bool EndAttr( _HTMLAttr *pAttr, _HTMLAttr **ppDepAttr=0, bool bChkEmpty=true ); void DeleteAttr( _HTMLAttr* pAttr ); commit 5377065fb1a768edc58f11305994f8307b32dde4 Author: Peter Nowee <[email protected]> Date: Wed Jan 21 04:31:30 2015 +0100 fdo#75467 extend Carbon API alias resolve from OS X 10.5 to 10.7 Commits aa539f6 and 7aa4291 (June 2013) change the way Mac alias files are resolved. They replace Carbon API calls that were deprecated in OS X 10.8, such as FSResolveAliasFile, by Cocoa API calls such as CFURLCreateBookmarkDataFromFile. Unfortunately, these changes were also responsible for bug fdo#75467: Under Mac OS X 10.6 and 10.7, selecting a file in the Open File dialog or merely viewing files in the Save File dialog adds resource fork to those files, changing their sizes and modification dates. Introducing only the calls CFURLCreateBookmarkDataFromFile to the code as it was before the above-mentioned commits already introduces the bug. It was further established that the bugs are specific to the OS version (10.6 and 10.7), not the bitness (32-bit) of the build. (Thanks to Alex Thurgood.) This all indicates that there is unexpected behavior in Apple's CFURLCreateBookmarkDataFromFile under Mac OS X 10.6 and 10.7. However, a web search for this behavior yielded no results, suggesting it may only show up under specific circumstances. Since there is no report of this behavior under Mac OS X 10.8 or higher, and a simple and effective solution is available (see below), I did not investigate any further. Reverting to the code using the Carbon API, as it was used up until LibreOffice 4.1, resolves the problem for Mac OS X 10.6 and 10.7. Douglas Mencken, in his work to port LibreOffice to PowerPC Macs, already brought back this code, wrapped in conditional compiler directives, so that it only applied to Mac OS X 10.5 and lower. See his commits e53eacb1 and 72e8f62 (February 2014). This commit extends the use of the Carbon API code for resolving aliases to Mac OS X 10.6 and 10.7 as well, thereby fixing bug fdo#75467. Change-Id: Ic2af13f487e1e62cb0a2683f3f4bbcf818e77e9f Reviewed-on: https://gerrit.libreoffice.org/14123 Reviewed-by: Tor Lillqvist <[email protected]> Tested-by: Tor Lillqvist <[email protected]> Reviewed-by: Norbert Thiebaud <[email protected]> Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit 9a9a33efaf613f8c4b0e0b4f36053c0fda68187b) diff --git a/fpicker/source/aqua/NSURL_OOoAdditions.mm b/fpicker/source/aqua/NSURL_OOoAdditions.mm index 80acb10..4e5ea6b 100644 --- a/fpicker/source/aqua/NSURL_OOoAdditions.mm +++ b/fpicker/source/aqua/NSURL_OOoAdditions.mm @@ -83,7 +83,7 @@ NSString* resolveAlias( NSString* i_pSystemPath ) kCFURLPOSIXPathStyle, false); if( rUrl != NULL ) { -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1080 FSRef rFS; if( CFURLGetFSRef( rUrl, &rFS ) ) { diff --git a/sal/osl/unx/system.c b/sal/osl/unx/system.c index a234fce..8914275 100644 --- a/sal/osl/unx/system.c +++ b/sal/osl/unx/system.c @@ -157,7 +157,7 @@ int macxp_resolveAlias(char *path, int buflen) (void) buflen; return 0; #else -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1080 FSRef aFSRef; OSStatus nErr; Boolean bFolder; @@ -181,7 +181,7 @@ int macxp_resolveAlias(char *path, int buflen) if ( unprocessedPath ) *unprocessedPath = '\0'; -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1080 nErr = noErr; bFolder = FALSE; bAliased = FALSE; commit 2fd7f3ab66a5dca2adbe491b8f471470229ebe94 Author: Justin Luth <[email protected]> Date: Fri Jan 23 08:54:08 2015 +0300 fdo#68963 recognize __RefHeading__ bookmarks as TOC LibreOffice recognizes MS Office TOC, but LO files saved as .doc format had no text showing. Now bookmarks using the LO naming convention are also imported as TOC bookmarks. Change-Id: Id2a186437fe4634a8ca85c2324c089f9387e437b Reviewed-on: https://gerrit.libreoffice.org/14124 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/sw/source/filter/ww1/fltshell.cxx b/sw/source/filter/ww1/fltshell.cxx index 6fd4c3d..330b2a0 100644 --- a/sw/source/filter/ww1/fltshell.cxx +++ b/sw/source/filter/ww1/fltshell.cxx @@ -948,7 +948,7 @@ SwFltBookmark::SwFltBookmark( const OUString& rNa, const OUString& rVa, // otherwise: Src Charset from argument for aName // Src Charset from filter for aVal ( Text ) - if ( IsTOCBookmark() ) + if ( IsTOCBookmark() && ! rNa.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()) ) { maName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); maName += rNa; diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index cac63fd..a2b93e1 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -101,7 +101,18 @@ namespace // #120879# - helper method to identify a bookmark name to match the internal TOC bookmark naming convention bool IsTOCBookmarkName( const ::rtl::OUString& rName ) { - return rName.startsWith("_Toc"); + return rName.startsWith("_Toc") || rName.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()); + } + + ::rtl::OUString EnsureTOCBookmarkName( const ::rtl::OUString& rName ) + { + OUString sTmp = rName; + if ( IsTOCBookmarkName ( rName ) ) + { + if ( ! rName.startsWith(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()) ) + sTmp = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix() + rName; + } + return sTmp; } } @@ -215,7 +226,7 @@ long SwWW8ImplReader::Read_Book(WW8PLCFManResult*) const OUString sOrigName = BookmarkToWriter(*pName); pReffedStck->NewAttr( aStart, - SwFltBookmark( sOrigName, aVal, pB->GetHandle(), IsTOCBookmarkName( sOrigName ) )); + SwFltBookmark( EnsureTOCBookmarkName( sOrigName ), aVal, pB->GetHandle(), IsTOCBookmarkName( sOrigName ) )); return 0; } @@ -2065,8 +2076,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr ) OUString sBookmarkName; if ( IsTOCBookmarkName( sName ) ) { - sBookmarkName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); - sBookmarkName += sName; + sBookmarkName = EnsureTOCBookmarkName(sName); // track <sBookmarkName> as referenced TOC bookmark. pReffedStck->aReferencedTOCBookmarks.insert( sBookmarkName ); } @@ -2092,8 +2102,7 @@ eF_ResT SwWW8ImplReader::Read_F_PgRef( WW8FieldDesc*, OUString& rStr ) OUString sPageRefBookmarkName; if ( IsTOCBookmarkName( sName ) ) { - sPageRefBookmarkName = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); - sPageRefBookmarkName += sName; + sPageRefBookmarkName = EnsureTOCBookmarkName(sName); // track <sPageRefBookmarkName> as referenced TOC bookmark. pReffedStck->aReferencedTOCBookmarks.insert( sPageRefBookmarkName ); } @@ -3416,9 +3425,7 @@ eF_ResT SwWW8ImplReader::Read_F_Hyperlink( WW8FieldDesc* /*pF*/, OUString& rStr // #120879# add cross reference bookmark name prefix, if it matches internal TOC bookmark naming convention if ( IsTOCBookmarkName( sMark ) ) { - OUString sTmp = IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix(); - sTmp += sMark; - sMark = sTmp; + sMark = EnsureTOCBookmarkName(sMark); // track <sMark> as referenced TOC bookmark. pReffedStck->aReferencedTOCBookmarks.insert( sMark ); } commit 6bb208198c2a2d8a0162e67ecfc7efe0ccecc009 Author: Stephan Bergmann <[email protected]> Date: Fri Jan 23 12:09:55 2015 +0100 Allow for null xModel in TitleHelper::getTitle Witnessed a JunitTest_chart2_unoapi failure where (deep within Idle::Timeout) chart::impl::ModelState::update is apparently called with a null xModel. All the code called from there appears to be careful to handle a null xModel, except for chart::TitleHelper::getTitle, which---presumably by accident---stopped doing so with 401f01caf5b357ac6c15b37a89c0a9aaeb46f4e4 "use ChartModel instead of XModel in a few places." Change-Id: I5788b5e41a6d68fe193cb214d736ee54c4c581d7 (cherry picked from commit 6acfc822566ca3c7d9fdd4af37ad5104a00d5d35) Reviewed-on: https://gerrit.libreoffice.org/14127 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/chart2/source/tools/TitleHelper.cxx b/chart2/source/tools/TitleHelper.cxx index 26bffc3..3c58947 100644 --- a/chart2/source/tools/TitleHelper.cxx +++ b/chart2/source/tools/TitleHelper.cxx @@ -152,19 +152,19 @@ uno::Reference< XTitle > TitleHelper::getTitle( TitleHelper::eTitleType nTitleIn uno::Reference< XTitle > TitleHelper::getTitle( TitleHelper::eTitleType nTitleIndex , const uno::Reference< frame::XModel >& xModel ) { + uno::Reference< XTitled > xTitled; if(nTitleIndex == TitleHelper::MAIN_TITLE) { - uno::Reference< XTitled > xTitled( xModel, uno::UNO_QUERY ); - return xTitled->getTitleObject(); + xTitled.set( xModel, uno::UNO_QUERY ); + } + else + { + uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); + uno::Reference< XDiagram > xDiagram; + if( xChartDoc.is()) + xDiagram.set( xChartDoc->getFirstDiagram()); + xTitled = lcl_getTitleParent( nTitleIndex, xDiagram ); } - - uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); - uno::Reference< XDiagram > xDiagram; - - if( xChartDoc.is()) - xDiagram.set( xChartDoc->getFirstDiagram()); - - uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xDiagram ) ); if( xTitled.is()) return xTitled->getTitleObject(); return NULL; commit 36e1d44e64a2d2e973c3da5abee2f9c8b314a324 Author: Eike Rathke <[email protected]> Date: Thu Jan 22 23:36:23 2015 +0100 Resolves: fdo#88721 correct negated condition in range name validation Fallout of 72b9dd277bab328c4d9227439e27e8c29b43fa7d String to OUString conversion. (cherry picked from commit 34f8864c9af563cbcd34352b3edefc67ba235ae7) Conflicts: sc/source/core/tool/rangenam.cxx Change-Id: I89a90da11790efba9e8ce4c9464dfca50b08c3ce Reviewed-on: https://gerrit.libreoffice.org/14121 Tested-by: Markus Mohrhard <[email protected]> Reviewed-by: Markus Mohrhard <[email protected]> diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx index 3fb839e..0c08f31 100644 --- a/sc/source/core/tool/rangenam.cxx +++ b/sc/source/core/tool/rangenam.cxx @@ -460,7 +460,7 @@ void ScRangeData::MakeValidName( OUString& rName ) { //! Range Parse is partially valid also with invalid sheet name, //! Address Parse dito, during compile name would generate a #REF! - if ( rName.indexOf( '.' ) == -1 ) + if ( rName.indexOf( '.' ) != -1 ) rName = rName.replaceFirst( ".", "_" ); else rName = "_" + rName; commit 1138b8702d693093a77d1885b05f47bee538717b Author: Caolán McNamara <[email protected]> Date: Thu Jan 22 16:35:03 2015 +0000 Resolves: fdo#87760 if we can't anchor at hidden text then... anchor to the page instead ane don't crash on searching for a place to put the anchor 1 press return in an empty writer doc a few times 2 insert a stock 2x2 table 4 enter A1 and change format->character to hidden A1 3 draw a rectangle above A1 so it'll get anchored to paragraph above table 5 draw rectangle anchor into A1 (cherry picked from commit 15faeb4f9f111f7ea8d04fd64b3d065971cd4570) Change-Id: Ib7931fdd1c70e809ec442aeac125879980e20ec9 Reviewed-on: https://gerrit.libreoffice.org/14118 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Michael Stahl <[email protected]> diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx index d7300e0..03a6b12 100644 --- a/sw/source/core/frmedt/fefly1.cxx +++ b/sw/source/core/frmedt/fefly1.cxx @@ -428,7 +428,8 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, bool bMoveIt ) if ( nAnchorId != FLY_AT_CHAR || !PosInsideInputFld( aPos ) ) { - pTxtFrm = aPos.nNode.GetNode().GetCntntNode()->getLayoutFrm( GetLayout(), 0, &aPos, false ); + SwCntntNode* pCNode = aPos.nNode.GetNode().GetCntntNode(); + pTxtFrm = pCNode ? pCNode->getLayoutFrm(GetLayout(), 0, &aPos, false) : NULL; } } const SwFrm *pNewAnch = NULL; diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index 0513275..90286b0 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -1570,12 +1570,20 @@ bool SwFEShell::ImpEndCreate() GetLayout()->GetCrsrOfst( &aPos, aPoint, &aState ); // do not set in ReadnOnly-content - if( aPos.nNode.GetNode().IsProtect() ) + if (aPos.nNode.GetNode().IsProtect()) + { // then only page bound. Or should we // search the next not-readonly position? bAtPage = true; + } - pAnch = aPos.nNode.GetNode().GetCntntNode()->getLayoutFrm( GetLayout(), &aPoint, 0, false ); + SwCntntNode* pCNode = aPos.nNode.GetNode().GetCntntNode(); + pAnch = pCNode ? pCNode->getLayoutFrm( GetLayout(), &aPoint, 0, false ) : NULL; + if (!pAnch) + { + // Hidden content. Anchor to the page instead + bAtPage = true; + } if( !bAtPage ) { @@ -1621,7 +1629,7 @@ bool SwFEShell::ImpEndCreate() if( bAtPage ) { - pPage = pAnch->FindPageFrm(); + pPage = pAnch ? pAnch->FindPageFrm() : GetLayout()->GetPageAtPos(aPoint); aAnch.SetType( FLY_AT_PAGE ); aAnch.SetPageNum( pPage->GetPhyPageNum() ); commit 51f5c6fe761226c407234b5e090cbfe6fb3af25c Author: Caolán McNamara <[email protected]> Date: Thu Jan 22 13:39:21 2015 +0000 Resolves: fdo#88455 delete in empty data field crashes Change-Id: I399bf576fe89283f839842959f06b8fe83f13b2b (cherry picked from commit 66df4d7d309ce237e4979d57b1069659ece1e3a5) Reviewed-on: https://gerrit.libreoffice.org/14109 Tested-by: Markus Mohrhard <[email protected]> Reviewed-by: Markus Mohrhard <[email protected]> diff --git a/sc/source/ui/dbgui/PivotLayoutTreeList.cxx b/sc/source/ui/dbgui/PivotLayoutTreeList.cxx index 32c55ce..4c6121e 100644 --- a/sc/source/ui/dbgui/PivotLayoutTreeList.cxx +++ b/sc/source/ui/dbgui/PivotLayoutTreeList.cxx @@ -38,7 +38,11 @@ void ScPivotLayoutTreeList::Setup(ScPivotLayoutDialog* pParent, SvPivotTreeListT bool ScPivotLayoutTreeList::DoubleClickHdl() { - ScItemValue* pCurrentItemValue = (ScItemValue*) GetCurEntry()->GetUserData(); + SvTreeListEntry* pEntry = GetCurEntry(); + if (!pEntry) + return false; + + ScItemValue* pCurrentItemValue = (ScItemValue*) pEntry->GetUserData(); ScPivotFuncData& rCurrentFunctionData = pCurrentItemValue->maFunctionData; if (mpParent->IsDataElement(rCurrentFunctionData.mnCol)) @@ -105,11 +109,12 @@ void ScPivotLayoutTreeList::KeyInput(const KeyEvent& rKeyEvent) KeyCode aCode = rKeyEvent.GetKeyCode(); sal_uInt16 nCode = aCode.GetCode(); - switch (nCode) + if (nCode == KEY_DELETE) { - case KEY_DELETE: - GetModel()->Remove(GetCurEntry()); - return; + const SvTreeListEntry* pEntry = GetCurEntry(); + if (pEntry) + GetModel()->Remove(pEntry); + return; } SvTreeListBox::KeyInput(rKeyEvent); } commit 9f7ba73b3bac029ccc385ef16f7927cba3407a26 Author: Caolán McNamara <[email protected]> Date: Wed Jan 21 15:25:03 2015 +0000 Resolves: fdo#87601 specific html doc hangs on load Change-Id: I67f472d72efe123b533d4d94be0084986c0e8349 (cherry picked from commit 6acd5c45c764d81aea1539e66adbfadb51df0aa3) Reviewed-on: https://gerrit.libreoffice.org/14081 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/qa/core/data/html/pass/fdo87601-1.html b/sw/qa/core/data/html/pass/fdo87601-1.html new file mode 100644 index 0000000..b33f11c --- /dev/null +++ b/sw/qa/core/data/html/pass/fdo87601-1.html @@ -0,0 +1,100 @@ + + <html xmlns:v="urn:schemas-microsoft-com:vml" + xmlns:o="urn:schemas-microsoft-com:office:office" + xmlns:w="urn:schemas-microsoft-com:office:word" + xmlns:m="http://schemas.microsoft.com/office/2006/01/omml" + xmlns="http://www.w3.org/TR/REC-html40"> + <head> + <meta http-equiv=Content-Type content="text/html; charset=utf-8"> + <style> + v\:* {behavior:url(#default#VML);} + o\:* {behavior:url(#default#VML);} + w\:* {behavior:url(#default#VML);} + .shape {behavior:url(#default#VML);} + </style> + <style> + @page + { + mso-page-orientation: portrait; + size:21cm 29.7cm; margin:1cm 1cm 1cm 1cm; + } + @page Section1 { + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-header: h1; + mso-footer: f1; + mso-bidi-font:Arial; + } + div.Section1 { page:Section1; } + table { + border-spacing: 0; + border-collapse: collapse; + font-size: 10.0pt; + } + td + { + border: 1px solid #000; + font-size:10.0pt; + font-family:Verdana,sans-serif; + margin-bottom:0.000cm; + vertical-align:top; + } + p.MsoFooter, li.MsoFooter, div.MsoFooter + { + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + tab-stops:center 3.0in right 6.0in; + font-size:10.0pt; + } + </style> + <xml> + <w:WordDocument> + <w:View>Print</w:View> + <w:Zoom>100</w:Zoom> + <w:DoNotOptimizeForBrowsertc2ms/> + </w:WordDocument> + </xml> + </head> + <body style="width:21.001cm;"> + <div class="Section1"> + <br> + <br> + <h1 style="mso-element:header;font-size:24.0pt;font-weight:normal;font-family:Verdana,sans-serif;color:#f00;" id="h1"> + <p class="MsoHeader"> + Your bug here + </p> + </h1> + <br> + <table width="700" cellpadding="6" style="border-collapse:collapse;"> + <tr> + <td width="200" border="1" style="font-weight:bold;">x</td> + <td width="500" style="font-weight:bold;">x</td> + </tr> + <tr> + <td style="font-weight:bold;">x</td> + <td style="font-weight:bold;">x</td> + </tr> + <tr> + <td style="font-weight:bold;">x</td> + <td style="font-weight:bold;">x</td> + </tr> + <tr> + <td style="font-weight:bold;">x</td> + <td style="font-weight:bold;">x</td> + </tr> + </table> + <br> + <table width="700" cellpadding="6" style="border:1px solid #bbb; border-collapse:collapse;"> +<tr><td width="50" style="border-bottom:1px solid #bbb;"></td><td width="110" style="border:1px solid #fff; border-bottom:1px solid #bbb;"></td><td width="540" style="border:1px solid #fff;border-bottom:1px solid #bbb;"></td></tr> + <tr> + <td width="50" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td> + <td width="110" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td> + <td width="540" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td> + </tr> + <tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr> +<tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr> +<tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr> +</table> </div> + </body> + </html> diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx index 0e77bf0..f6e3e39 100644 --- a/sw/source/filter/html/swhtml.cxx +++ b/sw/source/filter/html/swhtml.cxx @@ -3060,7 +3060,7 @@ void SwHTMLParser::EndAttr( _HTMLAttr* pAttr, _HTMLAttr **ppDepAttr, rText, pAttr->GetSttCnt() ); sal_Int32 nScriptEnd = g_pBreakIt->GetBreakIter() ->endOfScript( rText, pAttr->GetSttCnt(), nScriptTxt ); - while( nScriptEnd < nEndCnt ) + while (nScriptEnd < nEndCnt && nScriptEnd != -1) { if( nScriptItem == nScriptTxt ) { commit 034dd1e86eaf1f0573c7a095145f816d77e97665 Author: Stephan Bergmann <[email protected]> Date: Thu Jan 22 12:47:29 2015 +0100 rhbz#1184582: At least catch and log UNO exceptions in grammar checking thread (cherry picked from commit b1dbc511eeaf88e3b4b5a8a2dce129d251d2dcb6) Conflicts: linguistic/source/gciterator.cxx Change-Id: I87744f86d1413973709a46a58ebc03a39bce842c Reviewed-on: https://gerrit.libreoffice.org/14101 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/linguistic/source/gciterator.cxx b/linguistic/source/gciterator.cxx index 74f9aba..35c8875 100644 --- a/linguistic/source/gciterator.cxx +++ b/linguistic/source/gciterator.cxx @@ -543,70 +543,80 @@ void GrammarCheckingIterator::DequeueAndCheck() if (xFlatPara.is() && xFPIterator.is()) { - OUString aCurTxt( xFlatPara->getText() ); - lang::Locale aCurLocale = lcl_GetPrimaryLanguageOfSentence( xFlatPara, aFPEntryItem.m_nStartIndex ); - - bModified = xFlatPara->isModified(); - if (!bModified) + try { - // ---- THREAD SAFE START ---- - ::osl::ClearableGuard< ::osl::Mutex > aGuard( MyMutex::get() ); + OUString aCurTxt( xFlatPara->getText() ); + lang::Locale aCurLocale = lcl_GetPrimaryLanguageOfSentence( xFlatPara, aFPEntryItem.m_nStartIndex ); - sal_Int32 nStartPos = aFPEntryItem.m_nStartIndex; - sal_Int32 nSuggestedEnd = GetSuggestedEndOfSentence( aCurTxt, nStartPos, aCurLocale ); - DBG_ASSERT( (nSuggestedEnd == 0 && aCurTxt.isEmpty()) || nSuggestedEnd > nStartPos, - "nSuggestedEndOfSentencePos calculation failed?" ); + bModified = xFlatPara->isModified(); + if (!bModified) + { + // ---- THREAD SAFE START ---- + ::osl::ClearableGuard< ::osl::Mutex > aGuard( MyMutex::get() ); - linguistic2::ProofreadingResult aRes; + sal_Int32 nStartPos = aFPEntryItem.m_nStartIndex; + sal_Int32 nSuggestedEnd = GetSuggestedEndOfSentence( aCurTxt, nStartPos, aCurLocale ); + DBG_ASSERT( (nSuggestedEnd == 0 && aCurTxt.isEmpty()) || nSuggestedEnd > nStartPos, + "nSuggestedEndOfSentencePos calculation failed?" ); - uno::Reference< linguistic2::XProofreader > xGC( GetGrammarChecker( aCurLocale ), uno::UNO_QUERY ); - if (xGC.is()) - { - aGuard.clear(); - uno::Sequence<beans::PropertyValue> const aProps( + linguistic2::ProofreadingResult aRes; + + uno::Reference< linguistic2::XProofreader > xGC( GetGrammarChecker( aCurLocale ), uno::UNO_QUERY ); + if (xGC.is()) + { + aGuard.clear(); + uno::Sequence<beans::PropertyValue> const aProps( lcl_makeProperties(xFlatPara)); - aRes = xGC->doProofreading( aCurDocId, aCurTxt, - aCurLocale, nStartPos, nSuggestedEnd, aProps ); - - //!! work-around to prevent looping if the grammar checker - //!! failed to properly identify the sentence end - if ( - aRes.nBehindEndOfSentencePosition <= nStartPos && - aRes.nBehindEndOfSentencePosition != nSuggestedEnd - ) + aRes = xGC->doProofreading( aCurDocId, aCurTxt, + aCurLocale, nStartPos, nSuggestedEnd, aProps ); + + //!! work-around to prevent looping if the grammar checker + //!! failed to properly identify the sentence end + if ( + aRes.nBehindEndOfSentencePosition <= nStartPos && + aRes.nBehindEndOfSentencePosition != nSuggestedEnd + ) + { + DBG_ASSERT( false, "!! Grammarchecker failed to provide end of sentence !!" ); + aRes.nBehindEndOfSentencePosition = nSuggestedEnd; + } + + aRes.xFlatParagraph = xFlatPara; + aRes.nStartOfSentencePosition = nStartPos; + } + else { - DBG_ASSERT( false, "!! Grammarchecker failed to provide end of sentence !!" ); - aRes.nBehindEndOfSentencePosition = nSuggestedEnd; + // no grammar checker -> no error + // but we need to provide the data below in order to continue with the next sentence + aRes.aDocumentIdentifier = aCurDocId; + aRes.xFlatParagraph = xFlatPara; + aRes.aText = aCurTxt; + aRes.aLocale = aCurLocale; + aRes.nStartOfSentencePosition = nStartPos; + aRes.nBehindEndOfSentencePosition = nSuggestedEnd; } + aRes.nStartOfNextSentencePosition = lcl_SkipWhiteSpaces( aCurTxt, aRes.nBehindEndOfSentencePosition ); + aRes.nBehindEndOfSentencePosition = lcl_BacktraceWhiteSpaces( aCurTxt, aRes.nStartOfNextSentencePosition ); - aRes.xFlatParagraph = xFlatPara; - aRes.nStartOfSentencePosition = nStartPos; + //guard has to be cleared as ProcessResult calls out of this class + aGuard.clear(); + ProcessResult( aRes, xFPIterator, aFPEntryItem.m_bAutomatic ); + // ---- THREAD SAFE END ---- } else { - // no grammar checker -> no error - // but we need to provide the data below in order to continue with the next sentence - aRes.aDocumentIdentifier = aCurDocId; - aRes.xFlatParagraph = xFlatPara; - aRes.aText = aCurTxt; - aRes.aLocale = aCurLocale; - aRes.nStartOfSentencePosition = nStartPos; - aRes.nBehindEndOfSentencePosition = nSuggestedEnd; + // the paragraph changed meanwhile... (and maybe is still edited) + // thus we simply continue to ask for the next to be checked. + uno::Reference< text::XFlatParagraph > xFlatParaNext( xFPIterator->getNextPara() ); + AddEntry( xFPIterator, xFlatParaNext, aCurDocId, 0, aFPEntryItem.m_bAutomatic ); } - aRes.nStartOfNextSentencePosition = lcl_SkipWhiteSpaces( aCurTxt, aRes.nBehindEndOfSentencePosition ); - aRes.nBehindEndOfSentencePosition = lcl_BacktraceWhiteSpaces( aCurTxt, aRes.nStartOfNextSentencePosition ); - - //guard has to be cleared as ProcessResult calls out of this class - aGuard.clear(); - ProcessResult( aRes, xFPIterator, aFPEntryItem.m_bAutomatic ); - // ---- THREAD SAFE END ---- } - else + catch (css::uno::Exception & e) { - // the paragraph changed meanwhile... (and maybe is still edited) - // thus we simply continue to ask for the next to be checked. - uno::Reference< text::XFlatParagraph > xFlatParaNext( xFPIterator->getNextPara() ); - AddEntry( xFPIterator, xFlatParaNext, aCurDocId, 0, aFPEntryItem.m_bAutomatic ); + SAL_WARN( + "linguistic", + "GrammarCheckingIterator::DequeueAndCheck ignoring UNO" + " exception " << e.Message); } } commit 9dc81cc0f0911a50328bef995099f3467f20a07a Author: Eike Rathke <[email protected]> Date: Fri Jan 16 22:40:36 2015 +0100 don't access empty range list, could be rhbz#1180312 ScRangeList::DeleteArea() may remove an entire range, if it was the last range a subsequent call to ScConditionalFormat::DeleteArea() would attempt to access an invalid first element. Change-Id: I8d68c27963dc8561d61a94980093c271bd3aaffb (cherry picked from commit 9af8e14e67d354bb7736271a76a3dd8b6da78fd9) Reviewed-on: https://gerrit.libreoffice.org/13965 Tested-by: Markus Mohrhard <[email protected]> Reviewed-by: Markus Mohrhard <[email protected]> diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index 80a2b53..7a3c085 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -2088,6 +2088,9 @@ void ScConditionalFormat::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt ) void ScConditionalFormat::DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) { + if (maRanges.empty()) + return; + SCTAB nTab = maRanges[0]->aStart.Tab(); maRanges.DeleteArea( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); } commit 046e9eb33af47649a931c76f7541b536143287fd Author: Matthew Francis <[email protected]> Date: Wed Jan 21 23:58:03 2015 +0800 fdo#84336 Fix swf rendering Commit d83dfeb5e59c8f3de12d673b001a44001f644e7d accidentally inverted a test, causing at least the presentation linked on the above bug to render all black Change-Id: I2267ef43023b735587d6921f17aa7207f70dbd7b Reviewed-on: https://gerrit.libreoffice.org/14084 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> (cherry picked from commit eb4c29f4d10ae4be0e6be15a4c7c8c5bfb1edcc3) Reviewed-on: https://gerrit.libreoffice.org/14087 diff --git a/filter/source/flash/swfwriter1.cxx b/filter/source/flash/swfwriter1.cxx index 89e5e97..82f8d4e 100644 --- a/filter/source/flash/swfwriter1.cxx +++ b/filter/source/flash/swfwriter1.cxx @@ -181,7 +181,7 @@ void Writer::Impl_addShapeRecordChange( BitStream& rBits, sal_Int16 dx, sal_Int1 rBits.writeUB( 0, 1 ); // StateNewStyles rBits.writeUB( sal_uInt32(!bFilled), 1 ); // StateLineStyle rBits.writeUB( 0, 1 ); // StateFillStyle0 - rBits.writeUB( bFilled ? 0 : 1, 1 ); // StateFillStyle1 + rBits.writeUB( bFilled ? 1 : 0, 1 ); // StateFillStyle1 rBits.writeUB( 1, 1 ); // StateMoveTo sal_uInt16 nMoveBits = max( getMaxBitsSigned( dx ), getMaxBitsSigned( dy ) ); commit 76fc45742c31263c71b94584bf539df5f9b36e32 Author: Caolán McNamara <[email protected]> Date: Tue Jan 20 16:17:07 2015 +0000 Resolves: fdo#84943 make fodt non crashy like odt for formulas inside shapes where odt checks for a null pTxtCrsr and skips the object and fodt just ploughed ahead. i.e. make fodt equally useless as odt (fdo#84942) (cherry picked from commit 4345a3de0e5a600685fef5dc9fa422fe6849a0a3) Conflicts: sw/source/filter/xml/xmltexti.cxx Change-Id: I915cc1f7c065ea83377e895a932636c82698cf1f Reviewed-on: https://gerrit.libreoffice.org/14058 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx index 8f91b79..fae4cd6 100644 --- a/sw/source/filter/xml/xmltexti.cxx +++ b/sw/source/filter/xml/xmltexti.cxx @@ -230,7 +230,7 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertOLEObject( OSL_ENSURE( xCrsrTunnel.is(), "missing XUnoTunnel for Cursor" ); OTextCursorHelper *pTxtCrsr = reinterpret_cast< OTextCursorHelper * >( sal::static_int_cast< sal_IntPtr >( xCrsrTunnel->getSomething( OTextCursorHelper::getUnoTunnelId() ))); - OSL_ENSURE( pTxtCrsr, "SwXTextCursor missing" ); + SAL_WARN_IF(!pTxtCrsr, "sw.uno", "SwXTextCursor missing"); SwDoc *pDoc = SwImport::GetDocFromXMLImport( rImport ); SfxItemSet aItemSet( pDoc->GetAttrPool(), RES_FRMATR_BEGIN, @@ -284,12 +284,16 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertOLEObject( lcl_setObjectVisualArea( xObj, nAspect, aTwipSize, MAP_TWIP ); } - pFrmFmt = pDoc->Insert( *pTxtCrsr->GetPaM(), - ::svt::EmbeddedObjectRef( xObj, embed::Aspects::MSOLE_CONTENT ), - &aItemSet, - NULL, - NULL ); - pOLENd = lcl_GetOLENode( pFrmFmt ); + if( pTxtCrsr ) + { + pFrmFmt = pDoc->Insert( *pTxtCrsr->GetPaM(), + ::svt::EmbeddedObjectRef( xObj, embed::Aspects::MSOLE_CONTENT ), + &aItemSet, + NULL, + NULL ); + pOLENd = lcl_GetOLENode( pFrmFmt ); + } + if( pOLENd ) aObjName = pOLENd->GetOLEObj().GetCurrentPersistName(); } commit 2d9cc97eca4915cd51821cb7b319a637d17a9791 Author: Lionel Elie Mamane <[email protected]> Date: Mon Jan 19 11:44:55 2015 +0100 fixup previous commit for fdo#88475 OSL_ENSURE does not execute in non-debug builds (and is deprecated). Do not try to seek back if paint did not seek. This happens in particular when there is no data source attached (and thus trying to seek fails). Change-Id: I3f4908c4dcae2bb120bf58c1218e3386c40d5721 (cherry picked from commit e8a68c1f50f32a0f9d8bcdf16c1270c319910baa) Reviewed-on: https://gerrit.libreoffice.org/14028 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Eike Rathke <[email protected]> diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox index 62525e4..d42c8c2 100644 --- a/include/sal/log-areas.dox +++ b/include/sal/log-areas.dox @@ -289,6 +289,7 @@ certain functionality. @section svtools @li @c svtools +@li @c svtools.brwbox @li @c svtools.config @li @c svtools.contnr @li @c svtools.control diff --git a/svtools/source/brwbox/brwbox2.cxx b/svtools/source/brwbox/brwbox2.cxx index eacb2a8..9ea9031 100644 --- a/svtools/source/brwbox/brwbox2.cxx +++ b/svtools/source/brwbox/brwbox2.cxx @@ -887,6 +887,7 @@ void BrowseBox::ImplPaintData(OutputDevice& _rOut, const Rectangle& _rRect, bool Color aDelimiterLineColor( ::svtools::ColorConfig().GetColorValue( ::svtools::CALCGRID ).nColor ); // redraw the invalid fields + bool paint_seeked(false); for ( sal_uLong nRelRow = nRelTopRow; nRelRow <= nRelBottomRow && (sal_uLong)nTopRow+nRelRow < (sal_uLong)nRowCount; ++nRelRow, aPos.Y() += nDataRowHeigt ) @@ -899,6 +900,7 @@ void BrowseBox::ImplPaintData(OutputDevice& _rOut, const Rectangle& _rRect, bool // prepare row sal_uLong nRow = nTopRow+nRelRow; + paint_seeked = true; if ( !SeekRow( nRow) ) { OSL_FAIL("BrowseBox::ImplPaintData: SeekRow failed"); } @@ -1031,7 +1033,10 @@ void BrowseBox::ImplPaintData(OutputDevice& _rOut, const Rectangle& _rRect, bool } } - OSL_ENSURE(SeekRow(nCurRow), "BrowseBox::ImplPaintData could not seek back to current row after paint"); + if (paint_seeked && !SeekRow(nCurRow)) + { + SAL_WARN("svtools.brwbox", "BrowseBox::ImplPaintData could not seek back to current row after paint"); + } if (aPos.Y() > aOverallAreaBRPos.Y() + 1) aPos.Y() = aOverallAreaBRPos.Y() + 1; commit 56120d11d842e7fa8c963d811ac383e12763b213 Author: Lionel Elie Mamane <[email protected]> Date: Fri Jan 16 17:08:07 2015 +0100 fdo#88475 BrowseBox/grid: reposition data cursor to current row after paint Change-Id: I0deee2c3cfdb111b178c4254d7b0544c4ce5c966 Reviewed-on: https://gerrit.libreoffice.org/13955 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/svtools/source/brwbox/brwbox2.cxx b/svtools/source/brwbox/brwbox2.cxx index ef9a6d4..eacb2a8 100644 --- a/svtools/source/brwbox/brwbox2.cxx +++ b/svtools/source/brwbox/brwbox2.cxx @@ -1031,6 +1031,8 @@ void BrowseBox::ImplPaintData(OutputDevice& _rOut, const Rectangle& _rRect, bool } } + OSL_ENSURE(SeekRow(nCurRow), "BrowseBox::ImplPaintData could not seek back to current row after paint"); + if (aPos.Y() > aOverallAreaBRPos.Y() + 1) aPos.Y() = aOverallAreaBRPos.Y() + 1; // needed for some of the following drawing commit 509a2338adbdd0375c80dbc1887421ed2e9a0633 Author: Niklas Johansson <[email protected]> Date: Fri Jan 16 12:51:52 2015 +0100 fdo#86674 paragraphs have ATK_STATE_INVALID A few states have been added in the IA2 integration. These need to be handled somehow on linux as well. At the moment they all get the state INVALID. Let's add the state DEFAULT that already have a equivalent. The state MOVEABLE is causing the issues in paragraphs of LibreOffice Writer. The state is not invalid so let's avoid reporting it at all. There must be a cleaner way of doing this however. Reviewed-on: https://gerrit.libreoffice.org/13727 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> (cherry picked from commit df5fa4082cfb17c5d5be6678995689485df6d429) Reviewed-on: https://gerrit.libreoffice.org/13947 (cherry picked from commit 3bde8657f50b88268ffb2693cc298411fcead005) Change-Id: I859439f92fe19f5050195383f43fa4af787b249e Reviewed-on: https://gerrit.libreoffice.org/13951 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/vcl/unx/gtk/a11y/atkwrapper.cxx b/vcl/unx/gtk/a11y/atkwrapper.cxx index a30bf16..8a0f8f0 100644 --- a/vcl/unx/gtk/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk/a11y/atkwrapper.cxx @@ -160,12 +160,16 @@ AtkStateType mapAtkState( sal_Int16 nState ) MAP_DIRECT( TRANSIENT ); MAP_DIRECT( VERTICAL ); MAP_DIRECT( VISIBLE ); + MAP_DIRECT( DEFAULT ); // a spelling error ... case accessibility::AccessibleStateType::DEFUNC: type = ATK_STATE_DEFUNCT; break; case accessibility::AccessibleStateType::MULTI_SELECTABLE: type = ATK_STATE_MULTISELECTABLE; break; default: + //Mis-use ATK_STATE_LAST_DEFINED to check if a state is unmapped + //NOTE! Do not report it + type = ATK_STATE_LAST_DEFINED; break; } @@ -534,7 +538,12 @@ wrapper_ref_state_set( AtkObject *atk_obj ) uno::Sequence< sal_Int16 > aStates = xStateSet->getStates(); for( sal_Int32 n = 0; n < aStates.getLength(); n++ ) - atk_state_set_add_state( pSet, mapAtkState( aStates[n] ) ); + { + // ATK_STATE_LAST_DEFINED is used to check if the state + // is unmapped, do not report it to Atk + if ( mapAtkState( aStates[n] ) != ATK_STATE_LAST_DEFINED ) + atk_state_set_add_state( pSet, mapAtkState( aStates[n] ) ); + } // We need to emulate FOCUS state for menus, menu-items etc. if( atk_obj == atk_get_focus_object() ) commit de023788a782a29485d5fc2a2b3b26bbe32df38e Author: Michael Stahl <[email protected]> Date: Mon Nov 17 15:46:23 2014 +0100 officecfg: set VCL.WM.ShouldSwitchWorkspace to false It's quite obnoxious of applications to switch virtual desktops, and i#45160 / i#96684 indicate the main reason for this was to avoid crashes 9 years ago; let's see if we get any crash reports with it disabled. (cherry picked from commit d93c89ddf564d0445f28e0ba552ba94975d40f2a) It's possible this fixes fdo#84383 too although i can't reproduce that bug with gnome-shell. Change-Id: Ib020380c9ad3b386c7cf00fb2144cb766d1f6c83 Reviewed-on: https://gerrit.libreoffice.org/14013 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/officecfg/registry/data/org/openoffice/VCL.xcu b/officecfg/registry/data/org/openoffice/VCL.xcu index 457ac10..28e24e7 100644 --- a/officecfg/registry/data/org/openoffice/VCL.xcu +++ b/officecfg/registry/data/org/openoffice/VCL.xcu @@ -51,7 +51,7 @@ </node> <node oor:name="WM" oor:op="replace"> <prop oor:name="ShouldSwitchWorkspace" oor:op="replace" oor:type="xs:string"> - <value/> + <value>false</value> </prop> </node> </node> commit afb670be78890117dfc76d7f17880a3fd4317839 Author: Michael Stahl <[email protected]> Date: Fri Jan 16 23:56:09 2015 +0100 rhbz#1136013: svx: try to make the ExternalToolEdit not crash all the time This thing was starting a timer that re-starts itself forever, and when the file it was watching changed, it would just assume the drawing objects were still there (and the document, for that matter...) (cherry picked from commit 5f6bdce0c0ac687f418821ce328f2987bf340cda) Conflicts: sc/source/ui/drawfunc/graphsh.cxx sd/source/ui/inc/DrawViewShell.hxx sd/source/ui/view/drviews2.cxx svx/source/core/extedit.cxx sw/source/core/uibase/shells/grfsh.cxx Converted to C++98. Change-Id: I35f187f0828097a05618dc1733dce819fc6bffc6 Reviewed-on: https://gerrit.libreoffice.org/13994 Tested-by: Caolán McNamara <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> diff --git a/include/svx/extedit.hxx b/include/svx/extedit.hxx index dc0c489..eba4794 100644 --- a/include/svx/extedit.hxx +++ b/include/svx/extedit.hxx @@ -10,30 +10,52 @@ #ifndef INCLUDED_SVX_EXTEDIT_HXX #define INCLUDED_SVX_EXTEDIT_HXX -#include <svtools/grfmgr.hxx> -#include <osl/file.hxx> -#include <osl/process.h> -#include <vcl/graph.hxx> -#include <vcl/timer.hxx> #include <svx/svxdllapi.h> +#include <svl/lstner.hxx> +#include <rtl/ustring.hxx> +#include <memory> +#include <boost/scoped_ptr.hpp> + +class Graphic; +class GraphicObject; +class FileChangedChecker; class SVX_DLLPUBLIC ExternalToolEdit { -public: - GraphicObject* m_pGraphicObject; +protected: OUString m_aFileName; + ::boost::scoped_ptr<FileChangedChecker> m_pChecker; + +public: + ExternalToolEdit(); virtual ~ExternalToolEdit(); virtual void Update( Graphic& aGraphic ) = 0; - void Edit( GraphicObject *pGraphic ); + void Edit(GraphicObject const*const pGraphic); - DECL_LINK( StartListeningEvent, void *pEvent ); + void StartListeningEvent(); - static void threadWorker( void *pThreadData ); static void HandleCloseEvent( ExternalToolEdit* pData ); }; +class FmFormView; +class SdrObject; + +class SVX_DLLPUBLIC SdrExternalToolEdit + : public ExternalToolEdit + , public SfxListener +{ +private: + FmFormView * m_pView; + SdrObject * m_pObj; + + SAL_DLLPRIVATE virtual void Update(Graphic&) SAL_OVERRIDE; + SAL_DLLPRIVATE virtual void Notify(SfxBroadcaster&, const SfxHint&) SAL_OVERRIDE; + +public: + SdrExternalToolEdit(FmFormView * pView, SdrObject * pObj); +}; #endif diff --git a/sc/source/ui/drawfunc/graphsh.cxx b/sc/source/ui/drawfunc/graphsh.cxx index 67e3ca4..ae967cd 100644 --- a/sc/source/ui/drawfunc/graphsh.cxx +++ b/sc/source/ui/drawfunc/graphsh.cxx @@ -38,31 +38,6 @@ #define ScGraphicShell #include "scslots.hxx" -class ScExternalToolEdit : public ExternalToolEdit -{ - FmFormView* m_pView; - SdrObject* m_pObj; - -public: - ScExternalToolEdit ( FmFormView* pView, SdrObject* pObj ) : - m_pView (pView), - m_pObj (pObj) - {} - - virtual void Update( Graphic& aGraphic ) SAL_OVERRIDE - { - SdrPageView* pPageView = m_pView->GetSdrPageView(); - if( pPageView ) - { - SdrGrafObj* pNewObj = (SdrGrafObj*) m_pObj->Clone(); - OUString aStr = m_pView->GetDescriptionOfMarkedObjects() + " External Edit"; - m_pView->BegUndo( aStr ); - pNewObj->SetGraphicObject( aGraphic ); - m_pView->ReplaceObjectAtView( m_pObj, *pPageView, pNewObj ); - m_pView->EndUndo(); - } - } -}; SFX_IMPL_INTERFACE(ScGraphicShell, ScDrawShell, ScResId(SCSTR_GRAPHICSHELL)) @@ -187,9 +162,10 @@ void ScGraphicShell::ExecuteExternalEdit( SfxRequest& ) if( pObj && pObj->ISA( SdrGrafObj ) && ( (SdrGrafObj*) pObj )->GetGraphicType() == GRAPHIC_BITMAP ) { - GraphicObject aGraphicObject( ( (SdrGrafObj*) pObj )->GetGraphicObject() ); - ScExternalToolEdit* aExternalToolEdit = new ScExternalToolEdit( pView, pObj ); - aExternalToolEdit->Edit( &aGraphicObject ); + GraphicObject aGraphicObject( static_cast<SdrGrafObj*>(pObj)->GetGraphicObject() ); + m_ExternalEdits.push_back( boost::shared_ptr<SdrExternalToolEdit>( + new SdrExternalToolEdit(pView, pObj))); + m_ExternalEdits.back()->Edit( &aGraphicObject ); } } diff --git a/sc/source/ui/inc/graphsh.hxx b/sc/source/ui/inc/graphsh.hxx index 866d527..677bd72 100644 --- a/sc/source/ui/inc/graphsh.hxx +++ b/sc/source/ui/inc/graphsh.hxx @@ -24,7 +24,9 @@ #include "shellids.hxx" #include <sfx2/module.hxx> #include <svx/svdmark.hxx> +#include <boost/shared_ptr.hpp> +class SdrExternalToolEdit; class ScViewData; #include "drawsh.hxx" @@ -36,6 +38,8 @@ public: SFX_DECL_INTERFACE(SCID_GRAPHIC_SHELL) private: + std::vector<boost::shared_ptr<SdrExternalToolEdit> > m_ExternalEdits; + /// SfxInterface initializer. static void InitInterface_Impl(); diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx index 96c5c9c..a7b33d1 100644 --- a/sd/source/ui/inc/DrawViewShell.hxx +++ b/sd/source/ui/inc/DrawViewShell.hxx @@ -30,8 +30,10 @@ #include <com/sun/star/lang/XEventListener.hpp> #include <com/sun/star/scanner/XScannerManager2.hpp> #include <unotools/caserotate.hxx> +#include <boost/shared_ptr.hpp> class SdPage; +class SdrExternalToolEdit; class DrawDocShell; class TabBar; class SdrObject; @@ -501,6 +503,8 @@ private: ::std::auto_ptr< AnnotationManager > mpAnnotationManager; ::std::auto_ptr< ViewOverlayManager > mpViewOverlayManager; + + std::vector<boost::shared_ptr<SdrExternalToolEdit> > m_ExternalEdits; }; diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index 384a6c7..688432e 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -186,33 +186,6 @@ using namespace ::com::sun::star::uno; namespace sd { -class SdExternalToolEdit : public ExternalToolEdit -{ - FmFormView* m_pView; - SdrObject* m_pObj; - -public: - SdExternalToolEdit ( FmFormView* pView, SdrObject* pObj ) : - m_pView (pView), - m_pObj (pObj) - {} - - virtual void Update( Graphic& aGraphic ) SAL_OVERRIDE - { - SdrPageView* pPageView = m_pView->GetSdrPageView(); - if( pPageView ) - { - SdrGrafObj* pNewObj = (SdrGrafObj*) m_pObj->Clone(); - OUString aStr = m_pView->GetDescriptionOfMarkedObjects(); - aStr += " External Edit"; - m_pView->BegUndo( aStr ); - pNewObj->SetGraphicObject( aGraphic ); - m_pView->ReplaceObjectAtView( m_pObj, *pPageView, pNewObj ); - m_pView->EndUndo(); - } - } -}; - /** * SfxRequests for temporary actions */ @@ -1001,9 +974,11 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); if( pObj && pObj->ISA( SdrGrafObj ) && ( (SdrGrafObj*) pObj )->GetGraphicType() == GRAPHIC_BITMAP ) { - GraphicObject aGraphicObject( ( (SdrGrafObj*) pObj )->GetGraphicObject() ); - SdExternalToolEdit* aExternalToolEdit = new SdExternalToolEdit( mpDrawView, pObj ); - aExternalToolEdit->Edit( &aGraphicObject ); + GraphicObject aGraphicObject( static_cast<SdrGrafObj*>(pObj)->GetGraphicObject() ); + m_ExternalEdits.push_back( + boost::shared_ptr<SdrExternalToolEdit>( + new SdrExternalToolEdit(mpDrawView, pObj))); + m_ExternalEdits.back()->Edit( &aGraphicObject ); } } Cancel(); diff --git a/sd/source/ui/view/drviewsa.cxx b/sd/source/ui/view/drviewsa.cxx index 8e1e09d..e26759e 100644 --- a/sd/source/ui/view/drviewsa.cxx +++ b/sd/source/ui/view/drviewsa.cxx @@ -45,6 +45,7 @@ #include <svx/fmshell.hxx> #include <svtools/cliplistener.hxx> #include <svx/float3d.hxx> +#include <svx/extedit.hxx> #include <svx/sidebar/SelectionAnalyzer.hxx> #include "helpids.h" diff --git a/svx/source/core/extedit.cxx b/svx/source/core/extedit.cxx index 24e93f9..fba280d 100644 --- a/svx/source/core/extedit.cxx +++ b/svx/source/core/extedit.cxx @@ -7,15 +7,21 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <svx/extedit.hxx> + #include <vcl/svapp.hxx> #include <vcl/graph.hxx> #include <vcl/cvtgrf.hxx> #include <vcl/graphicfilter.hxx> #include <svx/xoutbmp.hxx> -#include <svx/extedit.hxx> #include <svx/graphichelper.hxx> +#include <svx/svdpagv.hxx> +#include <svx/svdograf.hxx> +#include <svx/fmview.hxx> +#include <svtools/grfmgr.hxx> #include <sfx2/viewfrm.hxx> #include <sfx2/bindings.hxx> +#include <salhelper/thread.hxx> #include <osl/file.hxx> #include <osl/thread.hxx> #include <osl/process.h> @@ -32,7 +38,6 @@ using namespace css::uno; using namespace css::system; ExternalToolEdit::ExternalToolEdit() - : m_pGraphicObject(NULL) { } @@ -57,33 +62,40 @@ void ExternalToolEdit::HandleCloseEvent(ExternalToolEdit* pData) } } -IMPL_LINK (ExternalToolEdit, StartListeningEvent, void*, pEvent) +void ExternalToolEdit::StartListeningEvent() { //Start an event listener implemented via VCL timeout - ExternalToolEdit* pData = ( ExternalToolEdit* )pEvent; - - new FileChangedChecker(pData->m_aFileName, ::boost::bind(&HandleCloseEvent, pData)); - - return 0; + assert(!m_pChecker.get()); + m_pChecker.reset(new FileChangedChecker( + m_aFileName, ::boost::bind(&HandleCloseEvent, this))); } -void ExternalToolEdit::threadWorker(void* pThreadData) +// self-destructing thread to make shell execute async +class ExternalToolEditThread + : public ::salhelper::Thread { - ExternalToolEdit* pData = (ExternalToolEdit*) pThreadData; +private: + OUString const m_aFileName; + + virtual void execute() SAL_OVERRIDE; - // Make an asynchronous call to listen to the event of temporary image file - // getting changed - Application::PostUserEvent( LINK( NULL, ExternalToolEdit, StartListeningEvent ), pThreadData); +public: + ExternalToolEditThread(OUString const& rFileName) + : ::salhelper::Thread("ExternalToolEdit") + , m_aFileName(rFileName) + {} +}; +void ExternalToolEditThread::execute() +{ Reference<XSystemShellExecute> xSystemShellExecute( SystemShellExecute::create( ::comphelper::getProcessComponentContext() ) ); - xSystemShellExecute->execute( pData->m_aFileName, OUString(), SystemShellExecuteFlags::URIS_ONLY ); + xSystemShellExecute->execute(m_aFileName, OUString(), SystemShellExecuteFlags::URIS_ONLY); } -void ExternalToolEdit::Edit( GraphicObject* pGraphicObject ) +void ExternalToolEdit::Edit(GraphicObject const*const pGraphicObject) { //Get the graphic from the GraphicObject - m_pGraphicObject = pGraphicObject; const Graphic aGraphic = pGraphicObject->GetGraphic(); //get the Preferred File Extension for this graphic @@ -116,8 +128,57 @@ void ExternalToolEdit::Edit( GraphicObject* pGraphicObject ) //Create a thread - // Create the data that is needed by the thread later - osl_createThread(ExternalToolEdit::threadWorker, this); + rtl::Reference<ExternalToolEditThread> const pThread( + new ExternalToolEditThread(m_aFileName)); + pThread->launch(); + + StartListeningEvent(); +} + +SdrExternalToolEdit::SdrExternalToolEdit( + FmFormView *const pView, SdrObject *const pObj) + : m_pView(pView) + , m_pObj(pObj) +{ + assert(m_pObj && m_pView); + StartListening(*m_pObj->GetModel()); +} + + +void SdrExternalToolEdit::Notify(SfxBroadcaster & rBC, SfxHint const& rHint) +{ + SdrHint const*const pSdrHint(dynamic_cast<SdrHint const*>(&rHint)); + if (pSdrHint + && (HINT_MODELCLEARED == pSdrHint->GetKind() + || (pSdrHint->GetObject() == m_pObj + && HINT_OBJREMOVED == pSdrHint->GetKind()))) + { + m_pView = 0; + m_pObj = 0; + m_pChecker.reset(); // avoid modifying deleted object + EndListening(rBC); + } +} + +void SdrExternalToolEdit::Update(Graphic & rGraphic) +{ + assert(m_pObj && m_pView); // timer should be deleted by Notify() too + SdrPageView *const pPageView = m_pView->GetSdrPageView(); + if (pPageView) + { + SdrGrafObj *const pNewObj(static_cast<SdrGrafObj*>(m_pObj->Clone())); + assert(pNewObj); + OUString const description = + m_pView->GetDescriptionOfMarkedObjects() + " External Edit"; + m_pView->BegUndo(description); + pNewObj->SetGraphicObject(rGraphic); + // set to new object before ReplaceObjectAtView() so that Notify() will + // not delete the running timer and crash + SdrObject *const pOldObj = m_pObj; + m_pObj = pNewObj; + m_pView->ReplaceObjectAtView(pOldObj, *pPageView, pNewObj); + m_pView->EndUndo(); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/uibase/inc/grfsh.hxx b/sw/source/core/uibase/inc/grfsh.hxx index bfbdaed..48f8afe 100644 --- a/sw/source/core/uibase/inc/grfsh.hxx +++ b/sw/source/core/uibase/inc/grfsh.hxx @@ -20,9 +20,13 @@ #define INCLUDED_SW_SOURCE_CORE_UIBASE_INC_GRFSH_HXX #include "frmsh.hxx" +#include <boost/shared_ptr.hpp> class SwGrfShell: public SwBaseShell { + class SwExternalToolEdit; + std::vector<boost::shared_ptr<SwExternalToolEdit> > m_ExternalEdits; + public: SFX_DECL_INTERFACE(SW_GRFSHELL) @@ -39,6 +43,7 @@ public: void GetAttrStateForRotation(SfxItemSet& rRequest); SwGrfShell(SwView &rView); + virtual ~SwGrfShell(); }; #endif diff --git a/sw/source/core/uibase/shells/grfsh.cxx b/sw/source/core/uibase/shells/grfsh.cxx index e81d1bf..1c4042d 100644 --- a/sw/source/core/uibase/shells/grfsh.cxx +++ b/sw/source/core/uibase/shells/grfsh.cxx @@ -74,26 +74,37 @@ #include "swslots.hxx" #include "swabstdlg.hxx" +#include <unocrsr.hxx> +#include <boost/scoped_ptr.hpp> #define TOOLBOX_NAME "colorbar" -namespace +class SwGrfShell::SwExternalToolEdit + : public ExternalToolEdit { - class SwExternalToolEdit : public ExternalToolEdit +private: + SwWrtShell *const m_pShell; + ::boost::scoped_ptr<SwUnoCrsr> const m_pCursor; + +public: + SwExternalToolEdit(SwWrtShell *const pShell) + : m_pShell(pShell) + , m_pCursor( // need only Point, must point to SwGrfNode + pShell->GetDoc()->CreateUnoCrsr( + *pShell->GetCurrentShellCursor().GetPoint())) { - SwWrtShell* m_pShell; - - public: - SwExternalToolEdit ( SwWrtShell* pShell ) : - m_pShell (pShell) - {} + } - virtual void Update( Graphic& aGraphic ) SAL_OVERRIDE - { - m_pShell->ReRead(OUString(), OUString(), (const Graphic*) &aGraphic); - } - }; -} + virtual void Update(Graphic & rGraphic) SAL_OVERRIDE + { + DBG_TESTSOLARMUTEX(); + m_pShell->Push(); + m_pShell->GetCurrentShellCursor().DeleteMark(); + *m_pShell->GetCurrentShellCursor().GetPoint() = *m_pCursor->GetPoint(); + m_pShell->ReRead(OUString(), OUString(), &rGraphic); + m_pShell->Pop(); + } +}; SFX_IMPL_INTERFACE(SwGrfShell, SwBaseShell, SW_RES(STR_SHELLNAME_GRAPHIC)) @@ -179,11 +190,12 @@ void SwGrfShell::Execute(SfxRequest &rReq) { // When the graphic is selected to be opened via some external tool // for advanced editing - GraphicObject *pGraphicObject = (GraphicObject *) rSh.GetGraphicObj(); + GraphicObject const*const pGraphicObject(rSh.GetGraphicObj()); if(0 != pGraphicObject) { - SwExternalToolEdit* externalToolEdit = new SwExternalToolEdit( &rSh ); - externalToolEdit->Edit ( pGraphicObject ); + m_ExternalEdits.push_back(boost::shared_ptr<SwExternalToolEdit>( + new SwExternalToolEdit(&rSh))); + m_ExternalEdits.back()->Edit(pGraphicObject); } } break; @@ -884,6 +896,10 @@ void SwGrfShell::GetAttrStateForRotation(SfxItemSet &rSet) SetGetStateSet( 0 ); } +SwGrfShell::~SwGrfShell() +{ +} + SwGrfShell::SwGrfShell(SwView &_rView) : SwBaseShell(_rView) { commit 43232c398e75df015f8c12687e780fd412370c0a Author: Michael Stahl <[email protected]> Date: Wed Jan 14 23:01:41 2015 +0100 rhbz#1180114: writerfilter: don't crash on w:customXmlDelRangeStart etc. We can't do anything sensible with these CustomXML elements but now we have to handle them because. (regression from 9dbf817fe5c5253fba0831aefa17575ae0ba3af1) Change-Id: If4247890ff9961a77434587802670d28608a7922 (cherry picked from commit f22964e0e622af1168e241f933e5cf98e093ec2b) Reviewed-on: https://gerrit.libreoffice.org/13914 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/sw/qa/extras/ooxmlimport/data/rhbz1180114.docx b/sw/qa/extras/ooxmlimport/data/rhbz1180114.docx new file mode 100644 index 0000000..23009eb Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/rhbz1180114.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 0082009..44876b9 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -728,6 +728,11 @@ DECLARE_OOXMLIMPORT_TEST(testN779834, "n779834.docx") // This document simply crashed the importer. } +DECLARE_OOXMLIMPORT_TEST(testRHBZ1180114, "rhbz1180114.docx") +{ + // This document simply crashed the importer. +} + DECLARE_OOXMLIMPORT_TEST(testN779627, "n779627.docx") { /* diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 8bc3320..44efb59 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2164,6 +2164,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext ) case NS_ooxml::LN_CT_PPr_pPrChange: case NS_ooxml::LN_trackchange: case NS_ooxml::LN_EG_RPrContent_rPrChange: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlDelRangeStart: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlDelRangeEnd: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveFromRangeStart: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveFromRangeEnd: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveToRangeStart: + case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveToRangeEnd: { HandleRedline( rSprm ); } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 3779aa3..e2eaeec 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -4623,9 +4623,10 @@ void DomainMapper_Impl::SetCurrentRedlineId( sal_Int32 sId ) { // This should be an assert, but somebody had the smart idea to reuse this function also for comments and whatnot, // and in some cases the id is actually not handled, which may be in fact a bug. - SAL_WARN( "writerfilter", !m_currentRedline.get()); if( m_currentRedline.get()) m_currentRedline->m_nId = sId; + else + SAL_INFO("writerfilter.dmapper", "no current redline"); } } diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 1e427b1..69ac296 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -24200,6 +24200,22 @@ <resource name="CT_TrackChange" resource="Properties" tag="redline"> <attribute name="author" tokenid="ooxml:CT_TrackChange_author"/> <attribute name="date" tokenid="ooxml:CT_TrackChange_date"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="clearProps"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/> + <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="clearProps"/> </resource> <resource name="CT_CellMergeTrackChange" resource="Properties" tag="redline"> <attribute name="vMerge" tokenid="ooxml:CT_CellMergeTrackChange_vMerge"/> commit de3efc6f0940f753d3bdf36a493697df9f4b44e5 Author: Michael Stahl <[email protected]> Date: Thu Jan 15 17:00:13 2015 +0100 rhbz#1175027: sw: fix life cycle of SwConnectionDisposedListener_Impl The SwDBManager is owned by SwDoc, so if the database thing is still alive when SwDoc dies (which may or may not indicate a leak), the listener will crash when the database stuff is eventually disposed during shutdown. (cherry picked from commit 4f747afae591f244164df25d96a83f417e6c0698) Conflicts: sw/source/core/uibase/dbui/dbmgr.cxx Change-Id: I2bb5eb35f0a403374bc8f123b85ba2d7244016b0 Reviewed-on: https://gerrit.libreoffice.org/13935 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/sw/source/core/uibase/dbui/dbmgr.cxx b/sw/source/core/uibase/dbui/dbmgr.cxx index 79d417d..e950854 100644 --- a/sw/source/core/uibase/dbui/dbmgr.cxx +++ b/sw/source/core/uibase/dbui/dbmgr.cxx @@ -206,26 +206,35 @@ void lcl_CopyCompatibilityOptions( SwWrtShell& rSourceShell, SwWrtShell& rTarget class SwConnectionDisposedListener_Impl : public cppu::WeakImplHelper1 < lang::XEventListener > { - SwDBManager& rDBManager; +private: + SwDBManager * m_pDBManager; virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException, std::exception) SAL_OVERRIDE; + public: SwConnectionDisposedListener_Impl(SwDBManager& rMgr); virtual ~SwConnectionDisposedListener_Impl(); + void Dispose() { m_pDBManager = 0; } + }; struct SwDBManager_Impl { SwDSParam* pMergeData; AbstractMailMergeDlg* pMergeDialog; - uno::Reference<lang::XEventListener> xDisposeListener; + ::rtl::Reference<SwConnectionDisposedListener_Impl> m_xDisposeListener; SwDBManager_Impl(SwDBManager& rDBManager) :pMergeData(0) ,pMergeDialog(0) - ,xDisposeListener(new SwConnectionDisposedListener_Impl(rDBManager)) + , m_xDisposeListener(new SwConnectionDisposedListener_Impl(rDBManager)) {} + + ~SwDBManager_Impl() + { + m_xDisposeListener->Dispose(); + } }; static void lcl_InitNumberFormatter(SwDSParam& rParam, uno::Reference<XDataSource> xSource) @@ -360,7 +369,7 @@ bool SwDBManager::MergeNew(const SwMergeDescriptor& rMergeDesc ) { uno::Reference<XComponent> xComponent(pInsert->xConnection, UNO_QUERY); if(xComponent.is()) - xComponent->addEventListener(pImpl->xDisposeListener); + xComponent->addEventListener(pImpl->m_xDisposeListener.get()); } catch(const Exception&) { @@ -2017,7 +2026,7 @@ uno::Reference< XConnection> SwDBManager::RegisterConnection(OUString& rDataSour { uno::Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); if(xComponent.is()) - xComponent->addEventListener(pImpl->xDisposeListener); + xComponent->addEventListener(pImpl->m_xDisposeListener.get()); } catch(const Exception&) { @@ -2129,7 +2138,7 @@ SwDSParam* SwDBManager::FindDSData(const SwDBData& rData, bool bCreate) { uno::Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); if(xComponent.is()) - xComponent->addEventListener(pImpl->xDisposeListener); + xComponent->addEventListener(pImpl->m_xDisposeListener.get()); } catch(const Exception&) { @@ -2166,7 +2175,7 @@ SwDSParam* SwDBManager::FindDSConnection(const OUString& rDataSource, bool bCre { uno::Reference<XComponent> xComponent(pFound->xConnection, UNO_QUERY); if(xComponent.is()) - xComponent->addEventListener(pImpl->xDisposeListener); + xComponent->addEventListener(pImpl->m_xDisposeListener.get()); } catch(const Exception&) { @@ -2933,27 +2942,31 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig, return nRet; } -SwConnectionDisposedListener_Impl::SwConnectionDisposedListener_Impl(SwDBManager& rMgr) : - rDBManager(rMgr) +SwConnectionDisposedListener_Impl::SwConnectionDisposedListener_Impl(SwDBManager& rManager) + : m_pDBManager(&rManager) { -}; +} SwConnectionDisposedListener_Impl::~SwConnectionDisposedListener_Impl() { -}; +} void SwConnectionDisposedListener_Impl::disposing( const EventObject& rSource ) throw (RuntimeException, std::exception) { ::SolarMutexGuard aGuard; + + if (!m_pDBManager) return; // we're disposed too! + uno::Reference<XConnection> xSource(rSource.Source, UNO_QUERY); - for(sal_uInt16 nPos = rDBManager.aDataSourceParams.size(); nPos; nPos--) + for (size_t nPos = m_pDBManager->aDataSourceParams.size(); nPos; nPos--) { - SwDSParam* pParam = &rDBManager.aDataSourceParams[nPos - 1]; + SwDSParam* pParam = &m_pDBManager->aDataSourceParams[nPos - 1]; if(pParam->xConnection.is() && (xSource == pParam->xConnection)) { - rDBManager.aDataSourceParams.erase(rDBManager.aDataSourceParams.begin() + nPos - 1); + m_pDBManager->aDataSourceParams.erase( + m_pDBManager->aDataSourceParams.begin() + nPos - 1); } } } commit 7ddea51581b3c7551290ecb374ddc72298390156 Author: Michael Stahl <[email protected]> Date: Thu Jan 15 21:47:44 2015 +0100 rhbz#1163106: tdoc_ucp: fix life cycle of OfficeDocumentsCloseListener The tdoc_ucp::OfficeDocumentsManager lives until the service manager is disposed on shutdown, but if the database stuff isn't disposed in due time then a document may call the notifyClosing() on the listener after the OfficeDocumentsManager dies; probably something is leaking the ODatabaseContext... (cherry picked from commit 0ffa3abc7d6c0437ece30cfb1430d28ffcc9f5c1) Conflicts: ucb/source/ucp/tdoc/tdoc_docmgr.cxx Change-Id: I59662b910589d7270697452b2f4ca6c960d22f22 Reviewed-on: https://gerrit.libreoffice.org/13943 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx index 52f49b2..f2b3cac 100644 --- a/ucb/source/ucp/tdoc/tdoc_docmgr.cxx +++ b/ucb/source/ucp/tdoc/tdoc_docmgr.cxx @@ -74,6 +74,8 @@ void SAL_CALL OfficeDocumentsManager::OfficeDocumentsCloseListener::notifyClosin const lang::EventObject& Source ) throw ( uno::RuntimeException, std::exception ) { + if (!m_pManager) return; // disposed? + document::EventObject aDocEvent; aDocEvent.Source = Source.Source; aDocEvent.EventName = "OfficeDocumentsListener::notifyClosing"; @@ -124,6 +126,7 @@ OfficeDocumentsManager::~OfficeDocumentsManager() // objects are actually released/destroyed upon shutdown is not defined. And when we arrive *here*, // OOo *is* shutting down currently, since we're held by the TDOC provider, which is disposed // upon shutdown. + m_xDocCloseListener->Dispose(); } @@ -235,7 +238,7 @@ void SAL_CALL OfficeDocumentsManager::notifyEvent( "OnLoadFinished/OnCreate event: got no close broadcaster!" ); if ( xCloseBroadcaster.is() ) - xCloseBroadcaster->addCloseListener( m_xDocCloseListener ); + xCloseBroadcaster->addCloseListener(m_xDocCloseListener.get()); // Propagate document closure. OSL_ENSURE( m_pDocEventListener, @@ -294,7 +297,7 @@ void SAL_CALL OfficeDocumentsManager::notifyEvent( "OnUnload event: got no XCloseBroadcaster from XModel" ); if ( xCloseBroadcaster.is() ) - xCloseBroadcaster->removeCloseListener( m_xDocCloseListener ); + xCloseBroadcaster->removeCloseListener(m_xDocCloseListener.get()); m_aDocs.erase( it ); } @@ -501,7 +504,7 @@ void OfficeDocumentsManager::buildDocumentsList() "buildDocumentsList: got no close broadcaster!" ); if ( xCloseBroadcaster.is() ) - xCloseBroadcaster->addCloseListener( m_xDocCloseListener ); + xCloseBroadcaster->addCloseListener(m_xDocCloseListener.get()); } } } diff --git a/ucb/source/ucp/tdoc/tdoc_docmgr.hxx b/ucb/source/ucp/tdoc/tdoc_docmgr.hxx index 36c5756..9a163b1 100644 --- a/ucb/source/ucp/tdoc/tdoc_docmgr.hxx +++ b/ucb/source/ucp/tdoc/tdoc_docmgr.hxx @@ -22,6 +22,7 @@ #include <map> +#include <rtl/ref.hxx> #include "osl/mutex.hxx" #include "cppuhelper/implbase1.hxx" @@ -90,7 +91,7 @@ namespace tdoc_ucp { { public: OfficeDocumentsCloseListener( OfficeDocumentsManager * pMgr ) - : m_pManager( pMgr ) {}; + : m_pManager( pMgr ) {} // util::XCloseListener virtual void SAL_CALL queryClosing( @@ -107,6 +108,9 @@ namespace tdoc_ucp { virtual void SAL_CALL disposing( const com::sun::star::lang::EventObject & Source ) throw ( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + + void Dispose() { m_pManager = 0; } + private: OfficeDocumentsManager * m_pManager; }; @@ -185,8 +189,7 @@ namespace tdoc_ucp { com::sun::star::frame::XModuleManager2 > m_xModuleMgr; DocumentList m_aDocs; OfficeDocumentsEventListener * m_pDocEventListener; - com::sun::star::uno::Reference< - com::sun::star::util::XCloseListener > m_xDocCloseListener; + ::rtl::Reference<OfficeDocumentsCloseListener> m_xDocCloseListener; }; } // namespace tdoc_ucp commit ea327399bd2cfd9546ed8c4d3c67fd42d5b35259 Author: Caolán McNamara <[email protected]> Date: Fri Jan 9 16:44:07 2015 +0000 asan: heap-buffer-overflow on ooo8726-1.doc Change-Id: I9fd7b873b6e64a6450c1bd946cd9bb08c293290a (cherry picked from commit b7d07699c8142e33f9d05d4e203b6fb567f36a9b) Reviewed-on: https://gerrit.libreoffice.org/13938 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index 032639c..3491b5d 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -358,11 +358,12 @@ const wwSprmSearcher *wwSprmParser::GetWW6SprmSearcher() {108, { 0, L_VAR} }, // "sprmCMajority50" chp.fBold, chp.fItalic, ... {109, { 2, L_FIX} }, // "sprmCHpsMul" chp.hps percentage to grow hps {110, { 2, L_FIX} }, // "sprmCCondHyhen" chp.ysri ysri - {111, { 2, L_FIX} }, // rtl bold - {112, { 2, L_FIX} }, // rtl italic - {113, { 0, L_VAR} }, // rtl property ? - {115, { 0, L_VAR} }, // rtl property ? - {116, { 0, L_VAR} }, // unknown + {111, { 2, L_FIX} }, // ww7 font + {112, { 2, L_FIX} }, // ww7 CJK font + {113, { 2, L_FIX} }, // ww7 rtl font + {114, { 2, L_FIX} }, // ww7 lid + {115, { 2, L_FIX} }, // ww7 rtl colour ? + {116, { 2, L_FIX} }, // ww7 fontsize {117, { 1, L_FIX} }, // "sprmCFSpec" chp.fSpec 1 or 0 bit {118, { 1, L_FIX} }, // "sprmCFObj" chp.fObj 1 or 0 bit {119, { 1, L_FIX} }, // "sprmPicBrcl" pic.brcl brcl (see PIC definition) commit d07d2ed5aa2a9c955b30e989246a5862e5b29c5d Author: Caolán McNamara <[email protected]> Date: Thu Jan 15 14:43:27 2015 +0000 Resolves: rhbz#1162352 SwDataChanged dtor accesses deleted PaM an old bug that I finally hit on by typing one paragraph of three lines consisting of repeated "Apple " and the cursor at position 0 and click the bullet icon (cherry picked from commit 3cb3396e4a4b36e5a05892da16b076feaef6b2b1) Conflicts: sw/source/core/doc/docfmt.cxx Change-Id: I90e998561f2645ebfa51423bcaab9a4195144338 Reviewed-on: https://gerrit.libreoffice.org/13933 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx index 18e5137..8aa95d4 100644 --- a/sw/source/core/doc/docfmt.cxx +++ b/sw/source/core/doc/docfmt.cxx @@ -363,10 +363,10 @@ void SwDoc::ResetAttrs( const SwPaM &rRg, } // #i96644# - boost::scoped_ptr< SwDataChanged > pDataChanged; + boost::scoped_ptr< SwDataChanged > xDataChanged; if ( bSendDataChangedEvents ) { - pDataChanged.reset( new SwDataChanged( *pPam ) ); + xDataChanged.reset( new SwDataChanged( *pPam ) ); } SwHistory* pHst = 0; if (GetIDocumentUndoRedo().DoesUndo()) @@ -468,10 +468,12 @@ void SwDoc::ResetAttrs( const SwPaM &rRg, GetNodes().ForEach( pStt->nNode, aTmpEnd, lcl_RstTxtAttr, &aPara ); } + SetModified(); + + xDataChanged.reset(); //before delete pPam + if( pPam != &rRg ) delete pPam; - - SetModified(); } #define DELETECHARSETS if ( bDelete ) { delete pCharSet; delete pOtherSet; } commit 26c1f430add40af2654c70430e945368be0c43f6 Author: Lionel Elie Mamane <[email protected]> Date: Thu Jan 15 12:18:03 2015 +0100 PostgreSQL statement: deliver promised XMultipleResults interface Change-Id: I0bb6df332a6666a0ae96bba38626b2626f880490 Reviewed-on: https://gerrit.libreoffice.org/13921 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx index 23727db..03f4b17 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.cxx +++ b/connectivity/source/drivers/postgresql/pq_statement.cxx @@ -199,6 +199,7 @@ Any Statement::queryInterface( const Type & reqType ) throw (RuntimeException, s static_cast< com::sun::star::sdbc::XResultSetMetaDataSupplier * > ( this ), static_cast< XCloseable * > ( this ), static_cast< XPropertySet * > ( this ), + static_cast< XMultipleResults * > ( this ), static_cast< XMultiPropertySet * > ( this ), static_cast< XGeneratedResultSet * > ( this ), static_cast< XFastPropertySet * > ( this ) ); commit 13f4da0ef04012599b50978419eb405d1f6cc750 Author: Caolán McNamara <[email protected]> Date: Wed Jan 14 16:29:24 2015 +0000 classic draw rectangles "fit to contour" utterly broken regression from commit 3cbfcee36dd16e451d76c561eaaaee0ff29b01a5 Date: Sun Feb 2 22:16:48 2014 -0600 xub_StrLen and tools/string.hxx final straw There is still some 0xffff limit left and possibly some less than gracefully handled overflow/error cases Change-Id: I82bdcb6951c42fdcaa68808a251f9b2f76f8ed0b (cherry picked from commit 9977cbba8a36d3e6365cf886630d213ec7c1240c) Reviewed-on: https://gerrit.libreoffice.org/13904 Reviewed-by: Christian Lohmaier <[email protected]> Tested-by: Christian Lohmaier <[email protected]> diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index d717b1a..d21b375 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -845,7 +845,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) if ( pTextRanges->size() ) { long nA = pTextRanges->at(0); - long nB = pTextRanges->at(0); + long nB = pTextRanges->at(1); DBG_ASSERT( nA <= nB, "TextRange distorted?" ); long nW = nB - nA; if ( nW > nMaxRangeWidth ) commit 3851229e3595327d03d9650055b3cd8b831aa342 Author: David Tardon <[email protected]> Date: Wed Jan 14 14:50:44 2015 +0100 fdo#86772 show localized filter names in Save dialog (cherry picked from commit a0a0317722c7cba51ab662ac662a5756e69f422a) Also contains: more traditional use of $(eval) (cherry picked from commit 32fe73958055a51741ef68e643705ad0664824ef) Conflicts: filter/Configuration_filter.mk add tranling empty line to ensure correct expansion (cherry picked from commit 29dbc26b7eabddba374ff632f273ef4575d3055b) Change-Id: I048454646e12af18917d90bb8077ec4b387cf589 Reviewed-on: https://gerrit.libreoffice.org/13909 Reviewed-by: Christian Lohmaier <[email protected]> Tested-by: Christian Lohmaier <[email protected]> diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk index 57d6940..39fabfc 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk @@ -59,13 +59,15 @@ $(if $(4),,$(error filter_Configuration__add_module: no input files)) $(5) : \ $(addprefix $(SRCDIR)/$(3)/,$(addsuffix .xcu,$(4))) \ $(gb_Module_CURRENTMAKEFILE) + endef # $(call filter_Configuration_add_types,configuration,typesfile,prefix,xcufiles) define filter_Configuration_add_types -$(eval $(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ +$(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ $(call gb_XcuFilterTypesTarget_get_target,$(2)),\ - $(call filter_XcuFilterTypesTarget_get_clean_target,$(2)))) + $(call filter_XcuFilterTypesTarget_get_clean_target,$(2))) + endef ### filters @@ -92,9 +94,11 @@ $(call filter_XcuFilterFiltersTarget_get_clean_target,%) : # $(call filter_Configuration_add_filters,configuration,typesfile,prefix,xcufiles) define filter_Configuration_add_filters -$(eval $(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ +$(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ $(call gb_XcuFilterFiltersTarget_get_target,$(2)),\ - $(call filter_XcuFilterFiltersTarget_get_clean_target,$(2)))) + $(call filter_XcuFilterFiltersTarget_get_clean_target,$(2))) +$(call filter_Configuration_add_ui_filters,$(1),$(3),$(4)) + endef ### others (frameloaders, contenthandlers) @@ -125,9 +129,10 @@ $(call filter_XcuFilterOthersTarget_get_clean_target,%) : # $(call filter_Configuration_add_others,configuration,typesfile,prefix,xcufiles) define filter_Configuration_add_others -$(eval $(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ +$(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ $(call gb_XcuFilterOthersTarget_get_target,$(2)),\ - $(call filter_XcuFilterOthersTarget_get_clean_target,$(2)))) + $(call filter_XcuFilterOthersTarget_get_clean_target,$(2))) + endef ### internal filters @@ -155,9 +160,10 @@ $(call filter_XcuFilterInternalTarget_get_clean_target,%) : # $(call filter_Configuration_add_internal_filters,configuration,typesfile,prefix,xcufiles) define filter_Configuration_add_internal_filters -$(eval $(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ +$(call filter_Configuration__add_module,$(1),$(2),$(3),$(4),\ $(call gb_XcuFilterInternalTarget_get_target,$(2)),\ - $(call filter_XcuFilterInternalTarget_get_clean_target,$(2)))) + $(call filter_XcuFilterInternalTarget_get_clean_target,$(2))) + endef @@ -214,6 +220,7 @@ $$(call filter_XcuResTarget_get_target,$(1)) : \ $(subst $$,$$$$,$(call gb_ExternalExecutable_get_command,xsltproc)) --nonet --stringparam lang $(1) \ $(filter_XSLT_langfilter) \ $(filter_XcuFilterUiTarget) > $$@) + endef $(foreach lang,$(gb_Configuration_LANGS),$(eval \ @@ -241,12 +248,13 @@ $(filter_XcuFilterUiTarget) : \ endif $(call gb_Configuration_get_clean_target,$(1)) : \ $(call gb_XcuMergeTarget_get_clean_target,$(2)/$(3)) + endef # $(call filter_Configuration_add_ui_filters,configuration,prefix,xcufile) define filter_Configuration_add_ui_filters -$(foreach xcu,$(3),$(eval \ - $(call filter_Configuration_add_ui_filter,$(1),$(2),$(xcu).xcu))) +$(foreach xcu,$(3),$(call filter_Configuration_add_ui_filter,$(1),$(2),$(xcu).xcu)) + endef @@ -255,60 +263,60 @@ endef $(eval $(call filter_Configuration_Configuration,fcfg_langpack)) # fcfg_base -$(call filter_Configuration_add_types,fcfg_langpack,fcfg_base_types.xcu,filter/source/config/fragments/types,\ +$(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_base_types.xcu,filter/source/config/fragments/types,\ writer_web_HTML_help \ oxt_OpenOffice_Extension \ wav_Wave_Audio_File \ component_Bibliography \ component_DB \ -) +)) -$(call filter_Configuration_add_filters,fcfg_langpack,fcfg_base_filters.xcu,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_base_filters.xcu,filter/source/config/fragments/filters,\ writer_web_HTML_help \ -) +)) -$(call filter_Configuration_add_others,fcfg_langpack,fcfg_base_others.xcu,filter/source/config/fragments,\ +$(eval $(call filter_Configuration_add_others,fcfg_langpack,fcfg_base_others.xcu,filter/source/config/fragments,\ frameloaders/com_sun_star_frame_Bibliography \ frameloaders/com_sun_star_sdb_ContentLoader \ contenthandlers/com_sun_star_comp_framework_SoundHandler \ contenthandlers/com_sun_star_comp_framework_oxt_handler \ -) +)) # fcfg_database -$(call filter_Configuration_add_types,fcfg_langpack,fcfg_database_types.xcu,filter/source/config/fragments/types,\ +$(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_database_types.xcu,filter/source/config/fragments/types,\ StarBase \ -) +)) -$(call filter_Configuration_add_filters,fcfg_langpack,fcfg_database_filters.xcu,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_database_filters.xcu,filter/source/config/fragments/filters,\ StarOffice_XML__Base_ \ -) +)) -$(call filter_Configuration_add_others,fcfg_langpack,fcfg_database_others.xcu,filter/source/config/fragments,\ +$(eval $(call filter_Configuration_add_others,fcfg_langpack,fcfg_database_others.xcu,filter/source/config/fragments,\ frameloaders/org_openoffice_comp_dbflt_DBContentLoader2 \ -) +)) -$(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ StarOffice_XML__Base__ui \ -) +)) # fcfg_reportbuilder -$(call filter_Configuration_add_types,fcfg_langpack,fcfg_reportbuilder_types.xcu,filter/source/config/fragments/types,\ +$(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_reportbuilder_types.xcu,filter/source/config/fragments/types,\ StarBaseReport \ StarBaseReportChart \ -) +)) -$(call filter_Configuration_add_filters,fcfg_langpack,fcfg_reportbuilder_filters.xcu,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_reportbuilder_filters.xcu,filter/source/config/fragments/filters,\ StarBaseReport \ StarBaseReportChart \ -) +)) -$(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ StarBaseReport_ui \ StarBaseReportChart_ui \ -) +)) # fcfg_writer -$(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter/source/config/fragments/types,\ +$(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter/source/config/fragments/types,\ generic_HTML \ calc_MS_Excel_40 \ calc_MS_Excel_5095 \ @@ -369,9 +377,9 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter writer_Plucker_eBook \ writer_TealDoc \ writer_zTXT \ -) +)) -$(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,filter/source/config/fragments/filters,\ HTML__StarWriter_ \ MS_WinWord_5 \ MS_WinWord_6_0 \ @@ -430,9 +438,9 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,fi Plucker_eBook \ TealDoc \ zTXT \ -) +)) -$(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ +$(eval $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ HTML__StarWriter__ui \ MS_Word_95_Vorlage_ui \ MS_Word_97_Vorlage_ui \ @@ -446,10 +454,10 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr MS_Word_2007_XML_Template_ui \ OOXML_Text_ui \ OOXML_Text_Template_ui \ -) +)) # fcfg_web -$(call filter_Configuration_add_types,fcfg_langpack,fcfg_web_types.xcu,filter/source/config/fragments/types,\ +$(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_web_types.xcu,filter/source/config/fragments/types,\ generic_HTML \ generic_Text \ writer_web_HTML_help \ @@ -457,9 +465,9 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_web_types.xcu,filter/so writer_web_StarOffice_XML_Writer_Web_Template \ pdf_Portable_Document_Format \ writerweb8_writer_template \ -) +)) -$(call filter_Configuration_add_filters,fcfg_langpack,fcfg_web_filters.xcu,filter/source/config/fragments/filters,\ ... etc. - the rest is truncated
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
