[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-4.3' - 35 commits - basegfx/source chart2/source connectivity/source dbaccess/source editeng/source filter/Configuration_filter.mk filter/source fpicker/source include/sal include/svx include/vcl linguistic/source officecfg/registry readlicense_oo/license sal/osl sc/inc sc/source sd/source svtools/source svx/source sw/qa sw/source ucb/source vcl/source vcl/unx writerfilter/source

Lionel Elie Mamane lionel at mamane.lu
Sat Jan 24 07:55:35 PST 2015


 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 <lionel at mamane.lu>
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 <lionel at mamane.lu>
      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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <caolanm at redhat.com>
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 <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

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 <erack at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <peter.nowee at gmail.com>
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 <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>
    Reviewed-by: Norbert Thiebaud <nthiebaud at gmail.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    (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 <justin_luth at sil.org>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <sbergman at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <erack at redhat.com>
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 <markus.mohrhard at googlemail.com>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

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 <caolanm at redhat.com>
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 <markus.mohrhard at googlemail.com>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <sbergman at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <erack at redhat.com>
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 <markus.mohrhard at googlemail.com>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

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 <mjay.francis at gmail.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <lionel at mamane.lu>
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 <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

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
+ at 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 <lionel at mamane.lu>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <sleeping.pillow at gmail.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <mstahl at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <mstahl at redhat.com>
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 <caolanm at redhat.com>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

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 <mstahl at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <mstahl at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <mstahl at redhat.com>
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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <caolanm at redhat.com>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <lionel at mamane.lu>
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 <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

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 <caolanm at redhat.com>
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 <lohmaier+LibreOffice at googlemail.com>
    Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

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 <dtardon at redhat.com>
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 <lohmaier+LibreOffice at googlemail.com>
    Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

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


More information about the Libreoffice-commits mailing list