[Libreoffice-commits] core.git: Branch 'distro/cib/libreoffice-5-1' - 258 commits - accessibility/inc avmedia/source basctl/inc basctl/source basic/inc basic/source bin/distro-install-sdk chart2/inc chart2/source comphelper/source config_host/config_graphite.h.in configure.ac connectivity/registry connectivity/source cppcanvas/inc cppcanvas/source cui/inc cui/source cui/uiconfig dbaccess/inc dbaccess/source desktop/inc desktop/unx dictionaries download.lst drawinglayer/CppunitTest_drawinglayer_border.mk drawinglayer/inc drawinglayer/Module_drawinglayer.mk drawinglayer/qa drawinglayer/source editeng/inc editeng/source external/cairo external/curl external/libcmis external/nss extras/source filter/qa filter/source forms/inc forms/source formula/source framework/inc framework/source helpcontent2 i18nlangtag/qa i18nlangtag/source i18npool/source icon-themes/galaxy include/clew include/drawinglayer include/editeng include/filter include/formula include/LibreOfficeKit include/oox include/sfx2 include/s vtools include/svx include/unotools include/vcl instsetoo_native/CustomTarget_setup.mk instsetoo_native/inc_common instsetoo_native/util libreofficekit/qa libreofficekit/source lingucomponent/source lotuswordpro/qa lotuswordpro/source odk/config officecfg/registry onlineupdate/Executable_updater.mk oox/inc oox/source opencl/inc opencl/Library_opencl.mk opencl/source package/inc package/source postprocess/CustomTarget_registry.mk readlicense_oo/license reportdesign/inc sc/inc sc/Module_sc.mk scp2/InstallModule_ooo.mk scp2/source sc/qa sc/source sc/uiconfig sd/CppunitTest_sd_import_tests.mk sdext/source sd/inc sd/qa sd/source sfx2/inc sfx2/sdi sfx2/source shell/inc shell/source slideshow/inc slideshow/opengl slideshow/source starmath/qa starmath/source svgio/inc svgio/source svtools/inc svtools/source svx/inc svx/source sw/inc sw/qa sw/source sw/uiconfig toolkit/source translations ucb/source unotools/source vbahelper/inc vcl/inc vcl/Library_vcl.mk vcl/opengl vcl/qa vcl/source vcl/unx vcl/win vcl/workben wizards/com writerfilter/Library_writerfilter.mk writerfilter/source xmloff/source xmlscript/source xmlsecurity/inc

Katarina Behrens Katarina.Behrens at cib.de
Wed May 18 09:25:58 UTC 2016


Rebased ref, commits from common ancestor:
commit 8cf051237fd2d9bc681bbea3f08f6aa51bc2985c
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Fri Mar 11 17:58:47 2016 +0100

    WIP Make PDF export of cell formulas depend on configuration
    
    Change-Id: I0d1828cb93290313f578cf40b7cd021dedd6b5ed

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 174c669..d8a1f2b 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -5177,6 +5177,20 @@
             </constraints>
             <value>0</value>
           </prop>
+	  <prop oor:name="ExportFormulaAsAnnotation" oor:type="xs:boolean" oor:nillable="false">
+            <info>
+              <desc>Specifies if cell formulas are exported to PDF as highlight annotations
+	      (in Calc documents only).</desc>
+            </info>
+            <value>false</value>
+          </prop>
+          <prop oor:name="FormulaAnnotationHighlightColor" oor:type="xs:int" oor:nillable="false">
+              <info>
+                <desc>Specifies colour used to highlight cells that have formula in exported PDF,
+		-1 if no highlight should be used (Calc documents only).</desc>
+              </info>
+              <value>-1</value>
+          </prop>
           <prop oor:name="AllowDuplicateFieldNames" oor:type="xs:boolean" oor:nillable="false">
             <info>
               <desc>Specifies whether multiple form fields exported are allowed
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 38c0b5f..c1b4036 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -45,6 +45,7 @@
 #include <vcl/pdfextoutdevdata.hxx>
 #include <vcl/settings.hxx>
 #include <o3tl/make_unique.hxx>
+#include <officecfg/Office/Common.hxx>
 
 #include "output.hxx"
 #include "document.hxx"
@@ -1468,6 +1469,7 @@ Rectangle ScOutputData::LayoutStrings(bool bPixelToLogic, bool bPaint, const ScA
                 "LayoutStrings: different MapUnits ?!?!" );
 
     vcl::PDFExtOutDevData* pPDFData = dynamic_cast< vcl::PDFExtOutDevData* >(mpDev->GetExtOutDevData() );
+    bool bExportFormulaAnnotation = officecfg::Office::Common::Filter::PDF::Export::ExportFormulaAsAnnotation::get();
 
     sc::IdleSwitch aIdleSwitch(*mpDoc, false);
     ScDrawStringsVars aVars( this, bPixelToLogic );
@@ -2136,7 +2138,7 @@ Rectangle ScOutputData::LayoutStrings(bool bPixelToLogic, bool bPaint, const ScA
                             Rectangle aURLRect( aURLStart, aVars.GetTextSize() );
                             if (bHasURL)
                                 lcl_DoHyperlinkResult(mpDev, aURLRect, aCell);
-                            else
+                            else if (bExportFormulaAnnotation)
                                 lcl_DoFormulaAnnotation(mpDev, aURLRect, aCell);
                         }
                     }
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 4c4568f..f5586ff 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -39,6 +39,7 @@
 #include <cppuhelper/implbase.hxx>
 #include <i18nlangtag/languagetag.hxx>
 #include <o3tl/numeric.hxx>
+#include <officecfg/Office/Common.hxx>
 #include <osl/file.hxx>
 #include <osl/thread.h>
 #include <rtl/crc.h>
@@ -4712,6 +4713,8 @@ bool PDFWriterImpl::emitNoteAnnotations()
 bool PDFWriterImpl::emitFormulaAnnotations()
 {
     int nFormulaNotes = m_aFormulaNotes.size();
+    sal_Int32 nColor = officecfg::Office::Common::Filter::PDF::Export::FormulaAnnotationHighlightColor::get();
+    Color aColor( nColor );
 
     for (int i = 0; i < nFormulaNotes; i++)
     {
@@ -4755,7 +4758,16 @@ bool PDFWriterImpl::emitFormulaAnnotations()
         aLine.append( "]" );
 
         aLine.append( "/F 4" );
-        aLine.append( "/C [1 1 0]");
+
+        if ( nColor == -1 )
+            aLine.append( "/C [0.63 0.63 0.63] /CA 0") ; // light grey-ish pop-up note, transparent highlight
+        else
+        {
+            aLine.append( "/C [");
+            appendColor( aColor, aLine);
+            aLine.append( "] /CA 1");
+        }
+
         aLine.append( "/Contents\n" );
         appendLiteralStringEncrypt( rFormulaNote.m_aContents.Contents, rFormulaNote.m_nObject, aLine );
         aLine.append( "\n" );
commit 62c9c9d2b9070a2ab2056c418cc74b4e0a672e6c
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Tue Mar 8 11:41:26 2016 +0100

    WIP Show cell formula as annotation in exported PDF
    
    Conflicts:
    	vcl/source/gdi/pdfextoutdevdata.cxx
    
    Change-Id: Idca8f6a27453a0f41566098a1720ee345eff3af6

diff --git a/include/vcl/pdfextoutdevdata.hxx b/include/vcl/pdfextoutdevdata.hxx
index 1140180..2553d9f 100644
--- a/include/vcl/pdfextoutdevdata.hxx
+++ b/include/vcl/pdfextoutdevdata.hxx
@@ -318,6 +318,7 @@ public:
     or -1 in which case the current page is used
     */
     void CreateNote( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
+    void CreateFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
 
     /** begin a new logical structure element
 
diff --git a/include/vcl/pdfwriter.hxx b/include/vcl/pdfwriter.hxx
index c10f1cc..225966b 100644
--- a/include/vcl/pdfwriter.hxx
+++ b/include/vcl/pdfwriter.hxx
@@ -1086,6 +1086,7 @@ The following structure describes the permissions used in PDF security
     or -1 in which case the current page is used
     */
     void CreateNote( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
+    void CreateFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
 
     /** begin a new logical structure element
 
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 718b3cc..38c0b5f 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -851,6 +851,33 @@ static void lcl_DoHyperlinkResult( OutputDevice* pDev, const Rectangle& rRect, S
     }
 }
 
+static void lcl_DoFormulaAnnotation( OutputDevice* pDev, const Rectangle& rRect, ScRefCellValue& rCell )
+{
+    vcl::PDFExtOutDevData* pPDFData = dynamic_cast< vcl::PDFExtOutDevData* >( pDev->GetExtOutDevData() );
+
+    ScFormulaCell* pFCell = rCell.mpFormula;
+
+    if (pFCell && pPDFData)
+    {
+        OUString aFormula;
+        pFCell->GetFormula( aFormula );
+
+        if ( !aFormula.isEmpty() )
+        {
+            const OUString aEquals("=");
+            OUString aAnnotation;
+            vcl::PDFNote aPDFNote;
+
+            // chop off leading '=', some PDF viewers don't like it
+            if ( aFormula.startsWith( aEquals ) )
+                 aAnnotation = aFormula.copy( 1, aFormula.getLength() - 1 );
+
+            aPDFNote.Contents = aAnnotation;
+            pPDFData->CreateFormulaAnnotation( rRect, aPDFNote);
+        }
+    }
+}
+
 void ScOutputData::SetSyntaxColor( vcl::Font* pFont, const ScRefCellValue& rCell )
 {
     switch (rCell.meType)
@@ -2102,11 +2129,15 @@ Rectangle ScOutputData::LayoutStrings(bool bPixelToLogic, bool bPaint, const ScA
                         }
 
                         // PDF: whole-cell hyperlink from formula?
-                        bool bHasURL = pPDFData && aCell.meType == CELLTYPE_FORMULA && aCell.mpFormula->IsHyperLinkCell();
-                        if (bPaint && bHasURL)
+                        bool bHasFormula = pPDFData && aCell.meType == CELLTYPE_FORMULA;
+                        bool bHasURL = bHasFormula && aCell.mpFormula->IsHyperLinkCell();
+                        if (bPaint && bHasFormula)
                         {
                             Rectangle aURLRect( aURLStart, aVars.GetTextSize() );
-                            lcl_DoHyperlinkResult(mpDev, aURLRect, aCell);
+                            if (bHasURL)
+                                lcl_DoHyperlinkResult(mpDev, aURLRect, aCell);
+                            else
+                                lcl_DoFormulaAnnotation(mpDev, aURLRect, aCell);
                         }
                     }
                 }
diff --git a/vcl/source/gdi/pdfextoutdevdata.cxx b/vcl/source/gdi/pdfextoutdevdata.cxx
index 75ce7de..f7fb254 100644
--- a/vcl/source/gdi/pdfextoutdevdata.cxx
+++ b/vcl/source/gdi/pdfextoutdevdata.cxx
@@ -36,6 +36,7 @@ struct PDFExtOutDevDataSync
     enum Action{    CreateNamedDest,
                     CreateDest,
                     CreateLink,
+                    CreateFormulaAnnotation,
                     SetLinkDest,
                     SetLinkURL,
                     RegisterDest,
@@ -83,6 +84,7 @@ struct GlobalSyncData
     std::deque< OUString >                 mParaOUStrings;
     std::deque< PDFWriter::DestAreaType >       mParaDestAreaTypes;
     std::deque< PDFNote >                       mParaPDFNotes;
+    std::deque< PDFNote >                       mParaFormulaNotes;
     std::deque< PDFWriter::PageTransition >     mParaPageTransitions;
     ::std::map< sal_Int32, PDFLinkDestination > mFutureDestinations;
 
@@ -251,6 +253,16 @@ void GlobalSyncData::PlayGlobalActions( PDFWriter& rWriter )
                 mParaPDFNotes.pop_front();
                 mParaInts.pop_front();
             }
+            case PDFExtOutDevDataSync::CreateFormulaAnnotation :
+            {
+                rWriter.Push( PushFlags::MAPMODE );
+                rWriter.SetMapMode( mParaMapModes.front() );
+                rWriter.CreateFormulaAnnotation( mParaRects.front(), mParaFormulaNotes.front(), mParaInts.front() );
+                mParaMapModes.pop_front();
+                mParaRects.pop_front();
+                mParaFormulaNotes.pop_front();
+                mParaInts.pop_front();
+            }
             break;
             case PDFExtOutDevDataSync::SetAutoAdvanceTime :
             {
@@ -489,6 +501,7 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc
             case PDFExtOutDevDataSync::SetOutlineItemText:
             case PDFExtOutDevDataSync::SetOutlineItemDest:
             case PDFExtOutDevDataSync::CreateNote:
+            case PDFExtOutDevDataSync::CreateFormulaAnnotation:
             case PDFExtOutDevDataSync::SetAutoAdvanceTime:
             case PDFExtOutDevDataSync::SetPageTransition:
                 break;
@@ -679,6 +692,14 @@ void PDFExtOutDevData::CreateNote( const Rectangle& rRect, const PDFNote& rNote,
     mpGlobalSyncData->mParaPDFNotes.push_back( rNote );
     mpGlobalSyncData->mParaInts.push_back( nPageNr == -1 ? mnPage : nPageNr );
 }
+void PDFExtOutDevData::CreateFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr )
+{
+    mpGlobalSyncData->mActions.push_back( PDFExtOutDevDataSync::CreateFormulaAnnotation );
+    mpGlobalSyncData->mParaRects.push_back( rRect );
+    mpGlobalSyncData->mParaMapModes.push_back( mrOutDev.GetMapMode() );
+    mpGlobalSyncData->mParaFormulaNotes.push_back( rNote );
+    mpGlobalSyncData->mParaInts.push_back( nPageNr == -1 ? mnPage : nPageNr );
+}
 void PDFExtOutDevData::SetPageTransition( PDFWriter::PageTransition eType, sal_uInt32 nMilliSec, sal_Int32 nPageNr )
 {
     mpGlobalSyncData->mActions.push_back( PDFExtOutDevDataSync::SetPageTransition );
diff --git a/vcl/source/gdi/pdfwriter.cxx b/vcl/source/gdi/pdfwriter.cxx
index 6a22e4a..fb9092d 100644
--- a/vcl/source/gdi/pdfwriter.cxx
+++ b/vcl/source/gdi/pdfwriter.cxx
@@ -387,6 +387,11 @@ void PDFWriter::CreateNote( const Rectangle& rRect, const PDFNote& rNote, sal_In
     xImplementation->createNote( rRect, rNote, nPageNr );
 }
 
+void PDFWriter::CreateFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr )
+{
+    xImplementation->createFormulaAnnotation( rRect, rNote, nPageNr );
+}
+
 sal_Int32 PDFWriter::BeginStructureElement( PDFWriter::StructElement eType, const OUString& rAlias )
 {
     return xImplementation->beginStructureElement( eType, rAlias );
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 6051b9c..4c4568f 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -4709,6 +4709,64 @@ bool PDFWriterImpl::emitNoteAnnotations()
     return true;
 }
 
+bool PDFWriterImpl::emitFormulaAnnotations()
+{
+    int nFormulaNotes = m_aFormulaNotes.size();
+
+    for (int i = 0; i < nFormulaNotes; i++)
+    {
+        const PDFNoteEntry &rFormulaNote = m_aFormulaNotes[i];
+
+        OStringBuffer aLine( 1024 );
+        aLine.append( rFormulaNote.m_nObject );
+        aLine.append( " 0 obj\n" );
+
+        aLine.append( "<</Type/Annot" );
+        aLine.append( "/Rect[" );
+
+        appendFixedInt( rFormulaNote.m_aRect.Left(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Top(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Right(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Bottom(), aLine );
+        aLine.append( "]" );
+
+        aLine.append( "/Subtype/Highlight" );
+        aLine.append( "/QuadPoints[" );
+
+        appendFixedInt( rFormulaNote.m_aRect.Left(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Top(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Right(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Top(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Left(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Bottom(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Right(), aLine );
+        aLine.append( ' ' );
+        appendFixedInt( rFormulaNote.m_aRect.Bottom(), aLine );
+        aLine.append( ' ' );
+        aLine.append( "]" );
+
+        aLine.append( "/F 4" );
+        aLine.append( "/C [1 1 0]");
+        aLine.append( "/Contents\n" );
+        appendLiteralStringEncrypt( rFormulaNote.m_aContents.Contents, rFormulaNote.m_nObject, aLine );
+        aLine.append( "\n" );
+
+        aLine.append( ">>\nendobj\n\n" );
+        CHECK_RETURN( writeBuffer( aLine.getStr(), aLine.getLength() ) );
+    }
+
+    return true;
+}
+
 Font PDFWriterImpl::replaceFont( const vcl::Font& rControlFont, const vcl::Font&  rAppSetFont )
 {
     bool bAdjustSize = false;
@@ -5622,6 +5680,7 @@ bool PDFWriterImpl::emitAnnotations()
 
     CHECK_RETURN( emitLinkAnnotations() );
     CHECK_RETURN( emitNoteAnnotations() );
+    CHECK_RETURN( emitFormulaAnnotations() );
     CHECK_RETURN( emitWidgetAnnotations() );
 
     return true;
@@ -12187,6 +12246,27 @@ void PDFWriterImpl::createNote( const Rectangle& rRect, const PDFNote& rNote, sa
     m_aPages[ nPageNr ].m_aAnnotations.push_back( m_aNotes.back().m_nObject );
 }
 
+void PDFWriterImpl::createFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr )
+{
+    if( nPageNr < 0 )
+        nPageNr = m_nCurrentPage;
+
+    if( nPageNr < 0 || nPageNr >= (sal_Int32)m_aPages.size() )
+        return;
+
+    m_aFormulaNotes.push_back( PDFNoteEntry() );
+    m_aFormulaNotes.back().m_nObject       = createObject();
+    m_aFormulaNotes.back().m_aContents     = rNote;
+    m_aFormulaNotes.back().m_aRect         = rRect;
+    // convert to default user space now, since the mapmode may change
+    m_aPages[nPageNr].convertRect( m_aFormulaNotes.back().m_aRect );
+
+    // insert note to page's annotation list
+    m_aPages[ nPageNr ].m_aAnnotations.push_back( m_aFormulaNotes.back().m_nObject );
+
+    return;
+}
+
 sal_Int32 PDFWriterImpl::createLink( const Rectangle& rRect, sal_Int32 nPageNr )
 {
     if( nPageNr < 0 )
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index 306bb15..71af7df 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -621,6 +621,7 @@ private:
     /* contains all notes set during PDF creation
      */
     std::vector<PDFNoteEntry>           m_aNotes;
+    std::vector<PDFNoteEntry>           m_aFormulaNotes;
     /* the root of the structure tree
      */
     std::vector<PDFStructureElement>    m_aStructure;
@@ -875,6 +876,8 @@ i12626
     bool emitLinkAnnotations();
     // write all notes
     bool emitNoteAnnotations();
+    // write cell formulas as annotations
+    bool emitFormulaAnnotations();
     // write the appearance streams of a widget
     bool emitAppearances( PDFWidget& rWidget, OStringBuffer& rAnnotDict );
     // clean up radio button "On" values
@@ -1219,6 +1222,7 @@ public:
 
     // notes
     void createNote( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
+    void createFormulaAnnotation( const Rectangle& rRect, const PDFNote& rNote, sal_Int32 nPageNr = -1 );
     // structure elements
     sal_Int32 beginStructureElement( PDFWriter::StructElement eType, const OUString& rAlias );
     void endStructureElement();
commit 1f26f3df9b9626b6bd23dcb6a2abc19e503d50aa
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Wed Feb 10 14:42:18 2016 +0100

    Branded images for msi installer
    
    The sizes are 122 x 234, 374 x 44 installed units respectively, according to
    http://msdn.microsoft.com/de-de/library/windows/desktop/aa369490%28v=vs.85%29.aspx
    
    it is 163x312, 499x58 pixels at 96 dpi. I bumped dpi to 120 and it still looks pixelated,
    but it's as good as it gets.
    
    For better results, we need different graphics, with less fine details given the very limited
    space
    
    Change-Id: I4a7eafed16fd79f377d27afa8151cfab614b464b

diff --git a/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp b/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp
index e267d49..471eea4 100644
Binary files a/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp and b/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp differ
diff --git a/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp b/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp
index b824ddf..2703670 100644
Binary files a/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp and b/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp differ
commit 4b2b53efba110017e8b75a3b375d9fb2d2796882
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Tue Feb 9 11:09:30 2016 +0100

    Branded application icons
    
    sadly, this doesn't replace Windows taskbar icon, that must be living somewhere
    else. It works on Linux though.
    
    Change-Id: I028fc68d96f02113622c5e1ec3ed830ac797be0b

diff --git a/icon-themes/galaxy/res/main128.png b/icon-themes/galaxy/res/main128.png
index 21fc555..818b733 100644
Binary files a/icon-themes/galaxy/res/main128.png and b/icon-themes/galaxy/res/main128.png differ
diff --git a/icon-themes/galaxy/res/mainapp_16.png b/icon-themes/galaxy/res/mainapp_16.png
index 7f43996..13945ee 100644
Binary files a/icon-themes/galaxy/res/mainapp_16.png and b/icon-themes/galaxy/res/mainapp_16.png differ
diff --git a/icon-themes/galaxy/res/mainapp_16_8.png b/icon-themes/galaxy/res/mainapp_16_8.png
index 7f43996..13945ee 100644
Binary files a/icon-themes/galaxy/res/mainapp_16_8.png and b/icon-themes/galaxy/res/mainapp_16_8.png differ
diff --git a/icon-themes/galaxy/res/mainapp_32.png b/icon-themes/galaxy/res/mainapp_32.png
index af9d79a..c653935 100644
Binary files a/icon-themes/galaxy/res/mainapp_32.png and b/icon-themes/galaxy/res/mainapp_32.png differ
diff --git a/icon-themes/galaxy/res/mainapp_32_8.png b/icon-themes/galaxy/res/mainapp_32_8.png
index af9d79a..c653935 100644
Binary files a/icon-themes/galaxy/res/mainapp_32_8.png and b/icon-themes/galaxy/res/mainapp_32_8.png differ
diff --git a/icon-themes/galaxy/res/mainapp_48_8.png b/icon-themes/galaxy/res/mainapp_48_8.png
index 394fce0..562ea23 100644
Binary files a/icon-themes/galaxy/res/mainapp_48_8.png and b/icon-themes/galaxy/res/mainapp_48_8.png differ
commit 6dad24bed6132374d91bb8420c4304b140b1616e
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Tue Feb 9 10:38:29 2016 +0100

    Point to CIB helpdesk
    
    it's pretty mean, b/c German translation (which I can't change) says the site
    is in English, while CIB site is in German only and can't be switched to other
    lang
    
    Change-Id: Ifbbb9e9d2bbee40998c07d1c68b61cd20d77dbc3

diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index e0cfeee..fc2974d 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -437,8 +437,7 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
         case SID_SEND_FEEDBACK:
         {
             OUString module = SfxHelp::GetCurrentModuleIdentifier();
-            OUString sURL("http://hub.libreoffice.org/send-feedback/?LOversion=" + utl::ConfigManager::getAboutBoxProductVersion() +
-                "&LOlocale=" + utl::ConfigManager::getLocale() + "&LOmodule=" + module.copy(module.lastIndexOf('.') + 1 )  );
+            OUString sURL("http://libreoffice.cib.de/support");
             try
             {
                 uno::Reference< css::system::XSystemShellExecute > xSystemShellExecute(
commit 27fd1c523214ba908a72ded5f4f137016ca73be3
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Tue Feb 9 10:00:30 2016 +0100

    Point to CIB website
    
    this idiotic postprocess script hard-codes libreoffice.org for some reason, grr
    
    Change-Id: Ide1f19d4da9a437e01118e8baf74c0d1a8ca2e10

diff --git a/instsetoo_native/util/openoffice.lst.in b/instsetoo_native/util/openoffice.lst.in
index 5f51117..801293c 100644
--- a/instsetoo_native/util/openoffice.lst.in
+++ b/instsetoo_native/util/openoffice.lst.in
@@ -68,7 +68,7 @@ LibreOffice
             CHANGETARGETDIR 1
             PATCHCODEFILE ooo_patchcodes.txt
             STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/
-            STARTCENTER_INFO_URL https://www.libreoffice.org/
+            STARTCENTER_INFO_URL http://libreoffice.cib.de/
             STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/
             DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/
             STARTCENTER_HIDE_EXTERNAL_LINKS 0
@@ -121,7 +121,7 @@ LibreOfficeDev
             CODEFILENAME codes_ooodev.txt
             LOCALUSERDIR $ORIGIN/..
             STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/
-            STARTCENTER_INFO_URL https://www.libreoffice.org/
+            STARTCENTER_INFO_URL http://libreoffice.cib.de/
             STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/
             DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/
             STARTCENTER_HIDE_EXTERNAL_LINKS 0
@@ -163,7 +163,7 @@ LibreOffice_SDK
             CHANGETARGETDIR 1
             DONTUSESTARTMENUFOLDER 1
             STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/
-            STARTCENTER_INFO_URL https://www.libreoffice.org/
+            STARTCENTER_INFO_URL http://libreoffice.cib.de/
             STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/
             DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/
             STARTCENTER_HIDE_EXTERNAL_LINKS 0
@@ -209,7 +209,7 @@ LibreOfficeDev_SDK
             CHANGETARGETDIR 1
             DONTUSESTARTMENUFOLDER 1
             STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/
-            STARTCENTER_INFO_URL https://www.libreoffice.org/
+            STARTCENTER_INFO_URL http://libreoffice.cib.de/
             STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/
             DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/
             STARTCENTER_HIDE_EXTERNAL_LINKS 0
diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk
index 6a9e2d1..8675d52 100644
--- a/postprocess/CustomTarget_registry.mk
+++ b/postprocess/CustomTarget_registry.mk
@@ -543,7 +543,7 @@ postprocess_main_SED := \
 	-e 's,$${PRODUCTVERSION},$(PRODUCTVERSION),g' \
 	-e 's,$${PRODUCTEXTENSION},.$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX),g' \
 	-e 's,$${STARTCENTER_ADDFEATURE_URL},http://extensions.libreoffice.org/,g' \
-	-e 's,$${STARTCENTER_INFO_URL},https://www.libreoffice.org/,g' \
+	-e 's,$${STARTCENTER_INFO_URL},http://libreoffice.cib.de/,g' \
 	-e 's,$${STARTCENTER_HIDE_EXTERNAL_LINKS},0,g' \
 	-e 's,$${STARTCENTER_TEMPLREP_URL},http://templates.libreoffice.org/,g' \
 	-e 's,$${SYSTEM_LIBEXTTEXTCAT_DATA},$(SYSTEM_LIBEXTTEXTCAT_DATA),g' \
diff --git a/svtools/source/misc/langhelp.cxx b/svtools/source/misc/langhelp.cxx
index 16a3a1d..24b066a 100644
--- a/svtools/source/misc/langhelp.cxx
+++ b/svtools/source/misc/langhelp.cxx
@@ -16,6 +16,7 @@
 
 void localizeWebserviceURI( OUString& rURI )
 {
+    const OUString aPrefix = "?lang=";
     OUString aLang = Application::GetSettings().GetUILanguageTag().getLanguage();
     if ( aLang.equalsIgnoreAsciiCase("pt")
          && Application::GetSettings().GetUILanguageTag().getCountry().equalsIgnoreAsciiCase("br") )
@@ -30,6 +31,7 @@ void localizeWebserviceURI( OUString& rURI )
             aLang = "zh-tw";
     }
 
+    rURI += aPrefix;
     rURI += aLang;
 }
 
commit ed5c8c6c45d65c369805fc53db808098fb19d0ad
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Mon Sep 21 13:47:57 2015 +0200

    CIB branding for start center
    
    Change-Id: I9887fded72131c7888d6e1b1165a778c8da2952d

diff --git a/icon-themes/galaxy/sfx2/res/logo.png b/icon-themes/galaxy/sfx2/res/logo.png
index 5d7e59c..1f215d3 100644
Binary files a/icon-themes/galaxy/sfx2/res/logo.png and b/icon-themes/galaxy/sfx2/res/logo.png differ
diff --git a/icon-themes/galaxy/sfx2/res/startcenter-logo.png b/icon-themes/galaxy/sfx2/res/startcenter-logo.png
index 3c28442..ef903fb 100644
Binary files a/icon-themes/galaxy/sfx2/res/startcenter-logo.png and b/icon-themes/galaxy/sfx2/res/startcenter-logo.png differ
diff --git a/icon-themes/galaxy/sfx2/res/startcenter-logo.svg b/icon-themes/galaxy/sfx2/res/startcenter-logo.svg
new file mode 100644
index 0000000..e1c80e5
--- /dev/null
+++ b/icon-themes/galaxy/sfx2/res/startcenter-logo.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg3360"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   width="368.00235"
+   height="116.34795"
+   viewBox="0 0 368.00235 116.34795"
+   sodipodi:docname="startcenter-logo.svg">
+  <metadata
+     id="metadata3366">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3364">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3372">
+      <rect
+         style="fill:#ffd5d5"
+         id="rect3374"
+         width="368.00235"
+         height="116.34795"
+         x="2.077642"
+         y="105.41204" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1173"
+     id="namedview3362"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="0.96262974"
+     inkscape:cx="182.96235"
+     inkscape:cy="110.88"
+     inkscape:window-x="1911"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg3360" />
+  <image
+     width="370.07999"
+     height="221.75999"
+     preserveAspectRatio="none"
+     xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgIAAAE0CAYAAABejlvhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
+AAATOQAAEzkBj8JWAQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA2VSURB
+VHic7d17tJV1mcDx58ABEVkKjnhhLaTERhGJCW+V5n2p43U0Fa8BXijzlrryMs6k2aRLTYs0zBjN
+0WLQaTIgkTFRtPKaISZKyk1BFLnfDwcOzB/qck7vFhTOfvdxns/nz9+zOe/DX+e79tnvfuuGdu+1
+LgCAlNrUegEAoHaEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAgMSEA
+AIkJAQBITAgAQGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQmBAA
+gMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBITAgA
+QGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQmBAAgMSEAAAkJgQA
+IDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBITAgAQGJCAAASEwIA
+kJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQmBAAgMSEAAAkJgQAIDEhAACJCQEA
+SEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBITAgAQGJCAAASEwIAkJgQAIDEhAAA
+JCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQmBAAgMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAA
+EhMCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBITAgAQGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAA
+iQkBAEhMCABAYkIAABITAgCQmBAAgMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACA
+xIQAACQmBAAgMSEAAIkJAQBITAgAQGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABA
+YkIAABITAgCQmBAAgMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAg
+MSEAAIkJAQBITAgAQGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQ
+mBAAgMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEhMCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBI
+TAgAQGJCAAASEwIAkJgQAIDEhAAAJCYEACAxIQAAiQkBAEhMCABAYkIAABITAgCQWH2tFwDg/7ft
+9+wXu5x4XGy21Za1XuVjWb1iRcz4n3Ex/ZHHNvjabvvsGbucdHy026Jji+6waNqMmDjsnli1aHGL
+/txK6oZ277Wu6lcBIKWufXrHCSNHRJv6trVe5RN7Ycgd8dwtt33kfNt/6BMnPDg86tpW5/82b9Kr
+8aujTop1a9dW5ed/wJ8GAKiazx528KcyAiIi9rj4vNjn8m995HzHg/avWgRERGzTu1d03ukzVfv5
+HxACAFRNfcfNa73CJul3weD48r98u+Js7kuTqn79+o4t+yeHSoQAAKxH38GD4sv/ennh/I1x42Pi
+sHvKX6iF+bAgAKUacfDRsXDKtFqvUdE2vXeNY4bfHR26dG523vfcgVG/+ebx5NXXRaz78KN1T33v
+pljTsCr2uPDrZa/aYrwjAADvmzdpcow+7axoWLCwMOt9Rv844PprIurqmp0/d/OQeGHIHWWt2OKE
+AAD8H/MmTY7fnHhmrJg7rzDb7fST44Abro26Ns1/fT53y23xpx/+pKwVW5QQAIC/sXDKtBh58sBY
+8e7cwmy3006qGAPP//An8cwNt5a1YosRAgBQwaKp02Jk/4GxfM67hVmvU0+MA2+8rhADE+7493jm
+hlvKWrFFCAEA+AiLpk6PUacMqhgDu/Y/IQ4ZcmPhuwQm3HFXPP39m8tacZMJAQBYj0VTp8eo/gNj
++TtzCrPPHXdUHDrkxsKXJr1458/jqe/dVNaKm0QIAMAGLJo2Ix484YxYOuutwmznY4+MQ398cyEG
+Jg67J5785+82u92wNRICAPAxLJ31Vow8aUAsmTmrMOt59BFx6G0/KMTApF/cH0+08hgQAgDwMS19
+a3aMPHlALHlzZmHW86jD49Dbb4k29c2/q++VXz4QT1x1bdUfHrSxhAAAfALL3no7RvYfGEveqBAD
+Rx4WRwz7cbRt377Z+SvD/yueuPKaVhkDQgAAPqH3YmBALJ7xZmHW45AD4/CfDSnEwKsj/jvGX/Gd
+VhcDQgAANsKy2e/Eb756RsXnJvQ4+IA4Ytht0XazzZqdT77/1zHu4iti7ZqmstbcICEAABtpxdx5
+Mar/wFj4+tTCbMeDvlIxBl4f+VCMu/jyVhMDQgAANsGKufNiZP+BseC1KYXZjgfuF/941+1R36FD
+s/Mpox+ORy/6dquIASEAAJto5bz5Mar/wFjw19cLs+777xtH3XtntNuiY7Pzqb8dG49ecFmsXbOm
+rDUrEgIA0AJWzl8Qo04ZFPMnv1aYdfviXnHkPT8txsCYR2LsuRdFU2NjWWsWCAEAaCEr5y+I0aee
+FfNf/Wth1m2fPeOo/7gz2nXaotn5G+PGx+++eWmsXb268G+aGhqqtusHhAAAtKCV8xfEyJMHxNyX
+Xi7Mdth7j4oxMP2Rx2Ls4IubvTMwb9LkWDh1etX3FQIA0MJWLV4So087O9598S+F2Q579Yuj7/tZ
+tO/Uqdn5G+PGx6+POyVeuvu++NOPhsbo08+OdU3V/zChEACAKli1ZGn89oxzYs6Elwqz7ff4Qhw7
+4u7YbKstm53PmzQ5/njtDfH8rbdHw4KFpewpBACgSt6LgXNjzp8nFmZdP797HDP8rtis81Y12OxD
+QgAAqqhx6fsx8MKLhVnXPr3jmOF3RYcunWuw2XuEAABUWeOyZTH69LNj9tPPFWZdd98tjhl+d81i
+QAgAQAlWr1gZYwadF2899Wxhtk3vXd+Lga27lL6XEACAkmwoBv7pV/dFx67blLqTEACAEq1Z2RBj
+Bp0Xs/7wdGHWZeed4rgH7omO23YtbR8hAAAlW7OyIR4+6/yY9funCrPOPXeK4+7/eWyx3bal7CIE
+AKAG1jQ0xMNnXxAzn/hDYda5505x+J1Doq5N9X9NCwEAqJE1DQ3x8DkXxpuP/74w265f39jqMztW
+fQchAAA11LRqVYw998KY/czzhVm7v/ka4moQAgBQY02NjRUfUlQGIQAAiQkBAEhMCABAYkIAABIT
+AgCQmBAAgNagrq4mlxUCAJCYEACAxIQAACQmBAAgMSEAAIkJAQBoDdw1AACUTQgAQGJCAAASEwIA
+kJgQAIDEhAAAJCYEAKAVqHP7IABQNiEAAIkJAQBITAgAQGJCAAASEwIAkJgQAIDWwO2DAEDZhAAA
+JCYEACAxIQAAiQkBAEhMCABAK+ChQwCQWIetu9TkukIAAFqBbT+/e+Fs7ZrVVb+uEACAGuvap3ds
+9dkehfPlb8+p+rWFAADUWN/BAwtnS2bOioaFi6p+bSEAADX0d7vtEjsffUThfMbvHi/l+kIAAGql
+ri72++7VUde2bfPzdevilV8+UMoKQgAAaqTv2V+LbvvsWTifMW58LHx9aik7CAEAqIGufXrHF6+6
+tHC+rqkpnrtpSGl7CAEAKFn7Tp3isKG3Rpt27Qqzl+8dEfMnv1baLkIAAEpU16ZNHPSDf4ste3Qv
+zJa8OTOevflHpe4jBACgRPtec1XsdORhhfN1TU3x2CVXxeply0vdRwgAQEn2uOgb0WfQ6RVnz940
+JN5+/s8lbyQEAKAUvU75aux92YUVZ9PHPhoTfnpXyRu9RwgAQJXtevLxsf/110ZUeMLgnAkvxbhL
+roxYt678xSKiviZXBYAkvnDeORVvE4yIWPDalHhowNdj9fIVJW/1ISEAAFVQ17ZtfOW6q6P3madU
+nC+b/U489LXBsWrR4pI3a04IAEAL67B1lzj4lu9Hj0MOrDhfOW9+jDp1UCyb/U65i1UgBACgBXX7
+0t5x6JAbY4vtt6s4XzJzVjx05uBYPP2NkjerTAgAQAtoU9829vzW+dHv/HOLDxF637sTX44xA78R
+K+cvKHm7jyYEAGATdT9gv9j3O1dEl8/1/MjXvPnYk/HINy+J1StWlrjZhgkBANgI9Zt3iB6HHBh9
+zxkQ2/Xru97Xvnzvf8Yfr70+1q5pKmm7j08IAFCqvS69IFYtWVLrNTZa2/bto1O3HWK7fn2jvkOH
+9b529bLlMf7Ka2LKqDElbffJCQEAStXz6CNqvUIp3nlhQjx+2dWxaNqMWq+yXkIAgOqp0bfl1VLD
+wkXx/K23x6T7RsS6tWtrvc4GCQEAqmb+5NdrvUJpGpcujUm/eCAmDB0WqxZ/ev70IQQAqJrXHhwd
+3b60V/z98cdGm/rKt9R9mq1atDjenfiXmDb20Zgyckw0LltW65U+sbqh3Xvle98GgFK1bd8+6jdf
+/wfrPm3Wrl7d6m4F3BjeEQCg6poaG6OpsbHWa1CBxxADQGJCAAASEwIAkJgQAIDEhAAAJCYEACAx
+IQAAiQkBAEhMCABAYkIAABITAgCQmBAAgMSEAAAkJgQAIDEhAACJCQEASEwIAEBiQgAAEvtfFz6z
+i6MwXbQAAAAASUVORK5CYII=
+"
+     id="image3368"
+     x="0"
+     y="0"
+     clip-path="url(#clipPath3372)"
+     transform="translate(-2.077642,-105.41204)" />
+</svg>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index ed958b8..174c669 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -3575,14 +3575,14 @@
           <info>
             <desc>Specifies the background color of the start center.</desc>
           </info>
-          <value>14540253</value>
+          <value>9903402</value>
         </prop>
         <prop oor:name="StartCenterTextColor" oor:type="xs:int" oor:nillable="false">
           <!-- Default 3355443 = 0x333333 as specified in tdf#90452, comment 45 -->
           <info>
             <desc>Specifies the text color of the buttons in the start center.</desc>
           </info>
-          <value>3355443</value>
+          <value>15658734</value>
         </prop>
         <prop oor:name="StartCenterThumbnailsBackgroundColor" oor:type="xs:int" oor:nillable="false">
           <!-- Default 6710886 = 0x666666 as specified in tdf#90452, comment 45 -->
commit 32beafbad3fe21991f5aac7656b8c1b2626570aa
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Dec 14 16:47:38 2015 +0100

    Silence warning C4334 under --enble-64-bit MSVC
    
    ("'<<' : result of 32-bit shift implicitly converted to 64 bits")
    
    Change-Id: I738fe94ec559e2a35ffc32fb91c22c06094cff9f
    (cherry picked from commit c31b6e1a154d3bf94b5346343104cbc00378e51d)
    Reviewed-on: https://gerrit.libreoffice.org/25065
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/unotools/source/config/fontcfg.cxx b/unotools/source/config/fontcfg.cxx
index d343450..2b5105a 100644
--- a/unotools/source/config/fontcfg.cxx
+++ b/unotools/source/config/fontcfg.cxx
@@ -1004,7 +1004,7 @@ ImplFontAttrs FontSubstConfiguration::getSubstType( const css::uno::Reference< X
             for( int k = 0; k < 32; k++ )
                 if( aToken.equalsIgnoreAsciiCaseAscii( pAttribNames[k] ) )
                 {
-                    type |= 1UL << k;
+                    type |= sal_uLong(1) << k;
                     break;
                 }
         }
commit dc5ab01a75877d4f4c79b7ff734d3f41a232c31f
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri May 13 15:46:10 2016 +0200

    tdf#99722 sw: avoid buffering a11y events for not-visible frames
    
    The problem with the bugdoc is that all pages are moved by 60 twips or
    so in CheckViewLayout(), which generates a event for every SwTextFrame
    but there is no SwAccessible for the SwTextFrame yet hence it is a
    CHILD_POS_CHANGE on the parent, which happens to be (because SwPageFrames
    are not accessible) the SwRootFrame so that's how we get an enormous number
    (~90k per 500 pages) WeakReference in the buffered
    SwAccessibleEvent_Impl pointing to the same object (the SwAccessible of
    the root frame).
    
    Then at a later stage the events are actually sent and
    SwAccessibleContext::InvalidateChildPosOrSize() discards all but 80 or
    so that are on the first page.
    
    So check the visiblility before buffering the event, to avoid
    scalability issues in the WeakReference.
    
    This brings the cpu-time from 1:37 to 0:17 for the 500 pager, and the
    full bugdoc is now just 3-4 seconds slower than with a11y disabled.
    
    Change-Id: Ia91653fd7572f32ce3cf765a4ecd2b7077ace8f6
    (cherry picked from commit 6afa142fdecc3a7f2f182bcd2c035bf3089f1ce8)
    Reviewed-on: https://gerrit.libreoffice.org/24979
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noelgrandin at gmail.com>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/source/core/access/accframe.hxx b/sw/source/core/access/accframe.hxx
index 55d9e24..7685c59 100644
--- a/sw/source/core/access/accframe.hxx
+++ b/sw/source/core/access/accframe.hxx
@@ -76,16 +76,17 @@ protected:
                              ::std::list< sw::access::SwAccessibleChild >& rChildren,
                              bool bInPagePreview );
 
-protected:
     bool IsEditable( SwViewShell *pVSh ) const;
 
     bool IsOpaque( SwViewShell *pVSh ) const;
 
+public:
     bool IsShowing( const SwAccessibleMap& rAccMap,
                         const sw::access::SwAccessibleChild& rFrameOrObj ) const;
     inline bool IsShowing( const SwRect& rFrame ) const;
     inline bool IsShowing( const SwAccessibleMap& rAccMap ) const;
 
+protected:
     inline bool IsInPagePreview() const
     {
         return mbIsInPagePreview;
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 8f6c9da..ed9ec9d 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -2437,10 +2437,17 @@ void SwAccessibleMap::InvalidatePosOrSize( const SwFrame *pFrame,
         {
             if( GetShell()->ActionPend() )
             {
-                SwAccessibleEvent_Impl aEvent(
-                    SwAccessibleEvent_Impl::CHILD_POS_CHANGED,
-                    xParentAccImpl.get(), aFrameOrObj, rOldBox );
-                AppendEvent( aEvent );
+                assert(pParent);
+                // tdf#99722 faster not to buffer events that won't be sent
+                if (!SwAccessibleChild(pParent).IsVisibleChildrenOnly()
+                    || xParentAccImpl->IsShowing(rOldBox)
+                    || xParentAccImpl->IsShowing(*this, aFrameOrObj))
+                {
+                    SwAccessibleEvent_Impl aEvent(
+                        SwAccessibleEvent_Impl::CHILD_POS_CHANGED,
+                        xParentAccImpl.get(), aFrameOrObj, rOldBox );
+                    AppendEvent( aEvent );
+                }
             }
             else
             {
commit d4e284ab44f4644a60eea50052f7940098541145
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 13 13:03:55 2016 +0100

    Resolves: tdf#99556 if the num of arguments is not 1 infer a row
    
    not just if the num of arguments is > 1
    
    (cherry picked from commit eb2da27e0834925d449373593fb650db49671adf)
    
    Change-Id: If0cae16cc52685315708ac3b2b8456ede7c1a6ce
    Reviewed-on: https://gerrit.libreoffice.org/24963
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/starmath/qa/extras/data/tdf99556-1.mml b/starmath/qa/extras/data/tdf99556-1.mml
new file mode 100644
index 0000000..0eae8b2
--- /dev/null
+++ b/starmath/qa/extras/data/tdf99556-1.mml
@@ -0,0 +1,3 @@
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+<msqrt/>
+</math>
diff --git a/starmath/qa/extras/mmlimport-test.cxx b/starmath/qa/extras/mmlimport-test.cxx
index 4313019..db18fe1 100644
--- a/starmath/qa/extras/mmlimport-test.cxx
+++ b/starmath/qa/extras/mmlimport-test.cxx
@@ -32,11 +32,13 @@ public:
     void testSimple();
     void testNsPrefixMath();
     void testMaction();
+    void testtdf99556();
 
     CPPUNIT_TEST_SUITE(Test);
     CPPUNIT_TEST(testSimple);
     CPPUNIT_TEST(testNsPrefixMath);
     CPPUNIT_TEST(testMaction);
+    CPPUNIT_TEST(testtdf99556);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -103,6 +105,14 @@ void Test::testMaction()
     CPPUNIT_ASSERT_EQUAL_MESSAGE("loaded text", sExpected, mxDocShell->GetText());
 }
 
+void Test::testtdf99556()
+{
+    loadURL(getURLFromSrc("starmath/qa/extras/data/tdf99556-1.mml"));
+    OUString sExpected("sqrt");
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("loaded text", sExpected, mxDocShell->GetText());
+}
+
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 }
diff --git a/starmath/source/mathmlimport.cxx b/starmath/source/mathmlimport.cxx
index 48c0d48..3e98307 100644
--- a/starmath/source/mathmlimport.cxx
+++ b/starmath/source/mathmlimport.cxx
@@ -800,7 +800,7 @@ void SmXMLEncloseContext_Impl::EndElement()
     contents are treated as a single "inferred <mrow>" containing its
     arguments
     */
-    if (GetSmImport().GetNodeStack().size() - nElementCount > 1)
+    if (GetSmImport().GetNodeStack().size() - nElementCount != 1)
         SmXMLRowContext_Impl::EndElement();
 }
 
@@ -873,7 +873,7 @@ void SmXMLStyleContext_Impl::EndElement()
     arguments
     */
     SmNodeStack &rNodeStack = GetSmImport().GetNodeStack();
-    if (rNodeStack.size() - nElementCount > 1)
+    if (rNodeStack.size() - nElementCount != 1)
         SmXMLRowContext_Impl::EndElement();
     aStyleHelper.ApplyAttrs();
 }
@@ -898,7 +898,7 @@ void SmXMLPaddedContext_Impl::EndElement()
     contents are treated as a single "inferred <mrow>" containing its
     arguments
     */
-    if (GetSmImport().GetNodeStack().size() - nElementCount > 1)
+    if (GetSmImport().GetNodeStack().size() - nElementCount != 1)
         SmXMLRowContext_Impl::EndElement();
 }
 
@@ -922,7 +922,7 @@ void SmXMLPhantomContext_Impl::EndElement()
     contents are treated as a single "inferred <mrow>" containing its
     arguments
     */
-    if (GetSmImport().GetNodeStack().size() - nElementCount > 1)
+    if (GetSmImport().GetNodeStack().size() - nElementCount != 1)
         SmXMLRowContext_Impl::EndElement();
 
     SmToken aToken;
@@ -2201,7 +2201,7 @@ void SmXMLSqrtContext_Impl::EndElement()
     contents are treated as a single "inferred <mrow>" containing its
     arguments
     */
-    if (GetSmImport().GetNodeStack().size() - nElementCount > 1)
+    if (GetSmImport().GetNodeStack().size() - nElementCount != 1)
         SmXMLRowContext_Impl::EndElement();
 
     SmToken aToken;
commit 6b8c3b6435bd7ab0cd922db2fe7abc2f206f8dab
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 13 12:31:53 2016 +0100

    Resolves: tdf#96092 crash on activating manage changes sidebar
    
    Change-Id: I39ab778114e2317ac471e92f9441ed4a83e7023b
    (cherry picked from commit 296a67874a9e5ee1f93a38716e996207b1d2b59f)
    Reviewed-on: https://gerrit.libreoffice.org/24957
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sfx2/source/sidebar/TabItem.cxx b/sfx2/source/sidebar/TabItem.cxx
index 8042528..8c45b65 100644
--- a/sfx2/source/sidebar/TabItem.cxx
+++ b/sfx2/source/sidebar/TabItem.cxx
@@ -103,9 +103,12 @@ void TabItem::MouseButtonUp(const MouseEvent& rMouseEvent)
         {
             Check();
             Click();
-            GetParent()->Invalidate();
+            vcl::Window* pParent = GetParent();
+            if (pParent)
+                pParent->Invalidate();
         }
     }
+
     if (mbIsLeftButtonDown)
     {
         mbIsLeftButtonDown = false;
commit 3d0e80229ba99d3ad2b57a9c213bda8b0d861524
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri May 13 11:14:18 2016 +0300

    tdf#98983: Use 'Microsoft Sans Serif' instead of 'MS Sans Serif'
    
    For some reason, in this branch, when OpenGL is used, the fixes by
    Michael Stahl to make the code avoid non-scalable fonts don't work,
    and text that uses the old 'MS Sans Serif' raster font just doesn't
    show up at all. Fix this by bluntly using the metric equivalent
    'Microsoft Sans Serif' instead.
    
    Change-Id: I218328b0515ee0eb1b5a4a12ace7036322efbbaa
    Reviewed-on: https://gerrit.libreoffice.org/24951
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx
index f755f73..a802158 100644
--- a/vcl/win/source/gdi/salgdi3.cxx
+++ b/vcl/win/source/gdi/salgdi3.cxx
@@ -1468,6 +1468,10 @@ HFONT WinSalGraphics::ImplDoSetFont( FontSelectPattern* i_pFont, float& o_rFontS
     && (ImplSalWICompareAscii( aLogFont.lfFaceName, "Courier" ) == 0) )
         lstrcpynW( aLogFont.lfFaceName, L"Courier New", 12 );
 
+    // Prefer the scalable 'Microsoft Sans Serif' to the old raster 'MS Sans Serif'
+    if( ImplSalWICompareAscii( aLogFont.lfFaceName, "MS Sans Serif" ) == 0 )
+        wcscpy( aLogFont.lfFaceName, L"Microsoft Sans Serif" );
+
     // #i47675# limit font requests to MAXFONTHEIGHT
     // TODO: share MAXFONTHEIGHT font instance
     if( (-aLogFont.lfHeight <= MAXFONTHEIGHT)
commit ea2c3f47682b79319d5ccaade4226f45aeec7369
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue May 3 17:17:52 2016 +0200

    tdf#99383 vcl: don't dispatch events from SolarMutexReleaser
    
    Having SolarMutexReleaser effectively do Reschedule() on WNT and not on
    other platforms doesn't seem such a good idea.  Let's try to restrict it
    so that it still calls ImplSalYieldMutexAcquireWithWait() but no longer
    dispatches messages, timers and idles.
    
    (regression from 482c52e91fe41a52e68827e9bf64a9736427d517)
    
    Change-Id: I52a2c88e9c2473e35909bf270b9e3ae7acbe0d17
    (cherry picked from commit ea3ce0b3073c72f474365e438ddabd19de915b76)
    Reviewed-on: https://gerrit.libreoffice.org/24623
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index a18b91e..a5a01a1 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -515,8 +515,11 @@ inline bool ImplYield(bool i_bWait, bool i_bAllEvents, sal_uLong const nReleased
 
     DBG_TESTSOLARMUTEX(); // must be locked on return from Yield
 
-    // Process all Tasks
-    Scheduler::ProcessTaskScheduling(eResult == SalYieldResult::EVENT);
+    if (nReleased == 0) // tdf#99383 don't run stuff from ReAcquireSolarMutex
+    {
+        // Process all Tasks
+        Scheduler::ProcessTaskScheduling(eResult == SalYieldResult::EVENT);
+    }
 
     // flush lazy deleted objects
     if( pSVData->maAppData.mnDispatchLevel == 0 )
diff --git a/vcl/win/source/app/salinst.cxx b/vcl/win/source/app/salinst.cxx
index 5cf6c3d..40e44d2 100644
--- a/vcl/win/source/app/salinst.cxx
+++ b/vcl/win/source/app/salinst.cxx
@@ -696,7 +696,10 @@ SalYieldResult WinSalInstance::DoYield(bool bWait, bool bHandleAllCurrentEvents,
     }
     else
     {
-        eDidWork = ImplSalYield( bWait, bHandleAllCurrentEvents );
+        if (nReleased == 0) // tdf#99383 ReAcquireSolarMutex shouldn't Yield
+        {
+            eDidWork = ImplSalYield( bWait, bHandleAllCurrentEvents );
+        }
 
         n = nCount;
         while ( n )
commit 9536bef4baeb476a54ce7cd382ded1f594efa69f
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon May 16 11:53:12 2016 +0100

    gtk3: min slider size too small since 3.20.0
    
    "GtkScrollbar:min-slider-length has been deprecated since version 3.20 and
    should not be used in newly-written code.
    
    Use min-height/min-width CSS properties on the slider element instead. The
    value of this style property is ignored."
    
    sigh....
    
    Change-Id: I0fe44b0a3dd31bd60c07f58ae5245496a7463fe2
    (cherry picked from commit 2f5bba2511ef5ef3ad92f8f9547e25128570c324)
    Reviewed-on: https://gerrit.libreoffice.org/25031
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>

diff --git a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
index c1117fe..14aba8a 100644
--- a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
@@ -2116,14 +2116,26 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
     gint min_slider_length = 21;
 
     // Grab some button style attributes
-    gtk_style_context_get_style( mpVScrollbarStyle,
-                                 "slider-width", &slider_width,
-                                 "trough-border", &trough_border,
-                                 "min-slider-length", &min_slider_length,
-                                 nullptr );
-    gint magic = trough_border ? 1 : 0;
-    aStyleSet.SetScrollBarSize( slider_width + 2*trough_border );
-    aStyleSet.SetMinThumbSize( min_slider_length - magic );
+    gtk_style_context_get_style(mpVScrollbarStyle,
+                                "slider-width", &slider_width,
+                                "trough-border", &trough_border,
+                                nullptr);
+    aStyleSet.SetScrollBarSize(slider_width + 2*trough_border);
+    if (gtk_check_version(3, 20, 0) == nullptr)
+    {
+        gtk_style_context_get(mpVScrollbarSliderStyle, gtk_style_context_get_state(mpVScrollbarSliderStyle),
+                              "min-height", &min_slider_length,
+                              nullptr);
+        aStyleSet.SetMinThumbSize(min_slider_length);
+    }
+    else
+    {
+        gtk_style_context_get_style(mpVScrollbarStyle,
+                                    "min-slider-length", &min_slider_length,
+                                    nullptr);
+        gint magic = trough_border ? 1 : 0;
+        aStyleSet.SetMinThumbSize(min_slider_length - magic);
+    }
 
     // preferred icon style
     gchar* pIconThemeName = nullptr;
commit cdb0d792d15da3f090b8d1db15bac1cec1a84bec
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Apr 6 00:26:39 2016 +0200

    vcl: lstrcpynW actually takes length *including* null terminator
    
    ... which is surprising, but means that these arguments are too small.
    
    (cherry picked from commit 5a7b0d2c7f3a305eb5f4eb629c0a08a256cc9ae3)
    
    Change-Id: I9c58e7fefa30d19c701df4f04043ddb474b28986
    Reviewed-on: https://gerrit.libreoffice.org/24947
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/vcl/win/source/gdi/salgdi3.cxx b/vcl/win/source/gdi/salgdi3.cxx
index 964f25f..f755f73 100644
--- a/vcl/win/source/gdi/salgdi3.cxx
+++ b/vcl/win/source/gdi/salgdi3.cxx
@@ -1466,7 +1466,7 @@ HFONT WinSalGraphics::ImplDoSetFont( FontSelectPattern* i_pFont, float& o_rFontS
     && !bImplSalCourierScalable
     && bImplSalCourierNew
     && (ImplSalWICompareAscii( aLogFont.lfFaceName, "Courier" ) == 0) )
-        lstrcpynW( aLogFont.lfFaceName, L"Courier New", 11 );
+        lstrcpynW( aLogFont.lfFaceName, L"Courier New", 12 );
 
     // #i47675# limit font requests to MAXFONTHEIGHT
     // TODO: share MAXFONTHEIGHT font instance
@@ -1503,7 +1503,7 @@ HFONT WinSalGraphics::ImplDoSetFont( FontSelectPattern* i_pFont, float& o_rFontS
     {
         // the selected font doesn't work => try a replacement
         // TODO: use its font fallback instead
-        lstrcpynW( aLogFont.lfFaceName, L"Courier New", 11 );
+        lstrcpynW( aLogFont.lfFaceName, L"Courier New", 12 );
         aLogFont.lfPitchAndFamily = FIXED_PITCH;
         HFONT hNewFont2 = CreateFontIndirectW( &aLogFont );
         SelectFont( getHDC(), hNewFont2 );
commit 081b0f19b4f665a30e2209e805aebd2f25345d70
Author: Tor Lillqvist <tml at collabora.com>
Date:   Fri May 13 09:38:38 2016 +0300

    tdf#97249: Don't crash if BindFont fails
    
    For some reason, in this branch, when OpenGL is used, the code crashes
    when attempting to display a Writer document that uses a non-scalable
    font. With this change, instead of the crash, text in such a font
    simply doesn't show up. This of course is not acceptable either, but
    better than a crash.
    
    Change-Id: I702a48fe78f2bec303aa5682dde0035275a7bb26
    Reviewed-on: https://gerrit.libreoffice.org/24946
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index 4dc79ea..c693085 100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -368,7 +368,12 @@ bool ImplWinFontEntry::CacheGlyphToAtlas(bool bRealGlyphIndices, int nGlyphIndex
     if (!pTxt)
         return false;
 
-    pTxt->BindFont(hDC);
+    if (!pTxt->BindFont(hDC))
+    {
+        SelectObject(hDC, hOrigFont);
+        DeleteDC(hDC);
+        return false;
+    }
 
     // Bail for non-horizontal text.
     {
commit d19b0fd3525aefd1c7d1b8b6564c77ffffede4e2
Author: Michael Weghorn <m.weghorn at posteo.de>
Date:   Sat May 14 17:16:12 2016 +0200

    tdf#99699 Do nullptr check BEFORE calling method
    
    This fixes a segmentation fault accidently introduced with
    commit a1fb4ac1991a8da2e527b64a0a01a88a8f2959e3.
    
    Change-Id: I244e325934db22e1bffd03486cc5e84f539101f2
    Reviewed-on: https://gerrit.libreoffice.org/24994
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    (cherry picked from commit adc0ced6533449f33473db560b8ba27d4bd326f9)
    Reviewed-on: https://gerrit.libreoffice.org/25001
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 9523b92..ca7e895 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -852,9 +852,10 @@ bool MSWordExportBase::HasRefToObject( sal_uInt16 nTyp, const OUString* pName, s
     SwIterator<SwFormatField, SwFieldType> aFormatFields( *pType );
     for ( SwFormatField* pFormatField = aFormatFields.First(); pFormatField; pFormatField = aFormatFields.Next() )
     {
-        const SwTextNode* pNd = pFormatField->GetTextField()->GetpTextNode();
+        const SwTextNode* pNd;
         if ( pFormatField->GetTextField() && nTyp == pFormatField->GetField()->GetSubType() &&
-             nullptr != pNd && pNd->GetNodes().IsDocNodes() )
+             nullptr != ( pNd  = pFormatField->GetTextField()->GetpTextNode() ) &&
+             pNd->GetNodes().IsDocNodes() )
         {
             const SwGetRefField& rRField = *static_cast< SwGetRefField* >( pFormatField->GetField() );
             switch ( nTyp )
commit 812233147c8b09b59eeb212663727a9063c7c9c6
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu May 12 18:55:13 2016 +0200

    tdf#99722 sw: silly performance issue when firing a11y events
    
    SwAccessibleEventList_Impl::MoveInvalidXAccToEnd() pointlessly copies every
    single element when iterating over the list and then deletes the copy again
    (which is expensive due to the WeakReference member).
    
    This speeds up loading the first 500 pages of the bugdoc from 4:20 to
    1:37 in a Linux dbgutil build.
    
    (regression from 76c549eb01dcb7b5bf28a271ce00e386f3d388ba)
    
    Change-Id: I7c7299e5e82095f5a51f395bc5076ca899b59f81
    (cherry picked from commit e3b990a47fc4b0b1191eb15a53badfc71aebc1fc)
    Reviewed-on: https://gerrit.libreoffice.org/24978
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 817bdfd..8f6c9da 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -526,17 +526,12 @@ void SwAccessibleEventList_Impl::MoveInvalidXAccToEnd()
         return;
     }
     SwAccessibleEventList_Impl lstEvent;
-    iterator li = begin();
-    for ( ;li != end();)
+    for (iterator li = begin(); li != end(); )
     {
-        SwAccessibleEvent_Impl e = *li;
-        if (e.IsNoXaccParentFrame())
+        if (li->IsNoXaccParentFrame())
         {
-            iterator liNext = li;
-            ++liNext;
-            erase(li);
-            li = liNext;
-            lstEvent.insert(lstEvent.end(),e);
+            lstEvent.insert(lstEvent.end(), *li);
+            li = erase(li);
         }
         else
             ++li;
commit 1d2091b91e91b50eb98f41c7659746a47cb70c73
Author: Eike Rathke <erack at redhat.com>
Date:   Fri May 13 14:56:01 2016 +0200

    Resolves: tdf#99730 lower the barrier for inferior systems, cripple the test
    
    (cherry picked from commit b35b601d9e3b43eaedb8576b70d10b657f625d6e)
    
     Conflicts:
    	sc/qa/unit/ucalc_formula.cxx
    
    Change-Id: Ifdb9330a0614800831d2e0b673d975e6304738e5
    Reviewed-on: https://gerrit.libreoffice.org/24971
    Reviewed-by: David Tardon <dtardon at redhat.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index ac203e1..b693615 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -6829,16 +6829,22 @@ void Test::testFuncMDETERM()
         aFormulaBuffer[13] = static_cast<sal_Unicode>( '0' + nSize );
         m_pDoc->SetString(aPos, aFormulaBuffer.toString());
 
+#if SAL_TYPES_SIZEOFPOINTER == 4
         // On crappy 32-bit targets, presumably without extended precision on
         // interim results or optimization not catching it, this test fails
         // when comparing to 0.0, so have a narrow error margin. See also
         // commit message of 8140309d636d4a870875f2dd75ed3dfff2c0fbaf
-#if SAL_TYPES_SIZEOFPOINTER == 4
         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Calculation of MDETERM incorrect for singular integer matrix",
                 0.0, m_pDoc->GetValue(aPos), 1e-12);
 #else
-        CPPUNIT_ASSERT_EQUAL_MESSAGE("Calculation of MDETERM incorrect for singular integer matrix",
-                0.0, m_pDoc->GetValue(aPos));
+        // Even on one (and only one) x86_64 target the result was
+        // 6.34413156928661e-17 instead of 0.0 (tdf#99730) so lower the bar to
+        // 10e-14.
+        // Then again on aarch64, ppc64* and s390x it also fails.
+        // Sigh.. why do we even test this? The original complaint in tdf#32834
+        // was about -9.51712667007776E-016
+        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Calculation of MDETERM incorrect for singular integer matrix",
+                0.0, m_pDoc->GetValue(aPos), 1e-14);
 #endif
     }
 
commit c767b5534eaea688138a49653f51df7bc321181e
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 13 13:37:02 2016 +0100

    Resolves: tdf#99692 crash in SwPostItMgr with change tracking
    
    and annotations
    
    presumably since the original
    
    commit 0761f81643a6890457e9ef7d913ab5c88c2593a4
    Author: Oliver-Rainer Wittmann <orw at apache.org>
    Date:   Thu Dec 19 18:50:58 2013 +0000
    
        - rely annotations on text ranges on new annotation marks
        - support arbitrary text ranges for annotations
        - fix undo/redo regarding annotations an text ranges
        - support annotations on overlapping text ranges
        - fix *.docx import for annotations on overlapping text ranges
        - fix ODF import of annotations on text ranges
    
    Change-Id: If2aa4ba74f03d0af11def55c2bd299211b3d5d77
    (cherry picked from commit 833029e751432e9e736c4f38f23654511d26e8f9)
    Reviewed-on: https://gerrit.libreoffice.org/24964
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/source/uibase/docvw/SidebarWin.cxx b/sw/source/uibase/docvw/SidebarWin.cxx
index c0ec62d1..400a464 100644
--- a/sw/source/uibase/docvw/SidebarWin.cxx
+++ b/sw/source/uibase/docvw/SidebarWin.cxx
@@ -891,12 +891,15 @@ void SwSidebarWin::SetPosAndSize()
         {
             const SwTextAnnotationField* pTextAnnotationField =
                 dynamic_cast< const SwTextAnnotationField* >( mrSidebarItem.GetFormatField().GetTextField() );
-            if ( pTextAnnotationField != nullptr
-                 && pTextAnnotationField->GetpTextNode() != nullptr )
+            SwTextNode* pTextNode = pTextAnnotationField ? pTextAnnotationField->GetpTextNode() : nullptr;
+            SwContentNode* pContentNd = nullptr;
+            if (pTextNode)
             {
-                SwTextNode* pTextNode = pTextAnnotationField->GetpTextNode();
                 SwNodes& rNds = pTextNode->GetDoc()->GetNodes();
-                SwContentNode* const pContentNd = rNds[mrSidebarItem.maLayoutInfo.mnStartNodeIdx]->GetContentNode();
+                pContentNd = rNds[mrSidebarItem.maLayoutInfo.mnStartNodeIdx]->GetContentNode();
+            }
+            if (pContentNd)
+            {
                 SwPosition aStartPos( *pContentNd, mrSidebarItem.maLayoutInfo.mnStartContent );
                 SwShellCursor* pTmpCursor = nullptr;
                 const bool bTableCursorNeeded = pTextNode->FindTableBoxStartNode() != pContentNd->FindTableBoxStartNode();
commit cda827958eefb636a4dbe57e1df7d21b5878171f
Author: Oliver Specht <oliver.specht at cib.de>
Date:   Fri Feb 26 10:40:45 2016 +0100

    tdf#98088: prevent access to invalid sub node
    
    Change-Id: I73bd77682bfb60474ba18ca85bc5d008c70a7f97
    Reviewed-on: https://gerrit.libreoffice.org/22715
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit 529e06a1b855ac83468230a15903aeafe1ac89a7)

diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx
index a1847ef..dc021cb 100644
--- a/starmath/source/node.cxx
+++ b/starmath/source/node.cxx
@@ -2066,7 +2066,8 @@ void SmFontNode::CreateTextFromNode(OUString &rText)
         default:
             break;
     }
-    GetSubNode(1)->CreateTextFromNode(rText);
+    if(GetNumSubNodes() > 1)
+        GetSubNode(1)->CreateTextFromNode(rText);
 }
 
 void SmFontNode::Prepare(const SmFormat &rFormat, const SmDocShell &rDocShell)
commit c1ca17f916541ba127765a9f5392fabd761cd946
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 13 10:10:50 2016 +0100

    Resolves: tdf#99272 new Short[] used instead of new short[]
    
    bridge code expects to see short[] not Short[] so the mapping
    doesn't work and office blows up
    
    regression from...
    
    commit ecc90694175190cd6e2b9d1bed8f32850d41ce88
    Date:   Wed Oct 15 14:14:28 2014 +0200
    
        java: use 'Short.valueOf' instead of 'new Short'
    
    git grep "new Short\[\]" shows two suspicious cases of this in odk, but they
    were always thus, so leaving them untouched.
    
    Change-Id: I3306659b5c3f4e0643c200373da777da248bbd42
    (cherry picked from commit f53e427291321eabe8d060a737e750a94739f911)
    Reviewed-on: https://gerrit.libreoffice.org/24954
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>
    Tested-by: Noel Grandin <noelgrandin at gmail.com>
    Tested-by: Jenkins <ci at libreoffice.org>

diff --git a/wizards/com/sun/star/wizards/table/FieldFormatter.java b/wizards/com/sun/star/wizards/table/FieldFormatter.java
index 9822b4c..df1d305 100644
--- a/wizards/com/sun/star/wizards/table/FieldFormatter.java
+++ b/wizards/com/sun/star/wizards/table/FieldFormatter.java
@@ -225,7 +225,7 @@ public class FieldFormatter implements XItemListener
             }
         }
         Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, _fieldnames);
-        Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+        Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                 {
                     0
                 });
@@ -260,7 +260,7 @@ public class FieldFormatter implements XItemListener
         if (CurUnoDialog.verifyfieldcount(icount))
         {
             xlstFieldNames.addItem(snewfieldname, icount);
-            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                     {
                         icount
                     });
@@ -284,7 +284,7 @@ public class FieldFormatter implements XItemListener
         int ilistcount = /* xlstFieldNames.getItemCount();*/ UnoDialog.getListBoxItemCount(xlstFieldNames);
         if ((ipos) < ilistcount)
         {
-            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                     {
                         ipos
                     });
@@ -294,7 +294,7 @@ public class FieldFormatter implements XItemListener
             if (ilistcount > -1)
             {
                 ipos = (short) ((short) ilistcount - (short) 1);
-                Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+                Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                         {
                             ipos
                         });
@@ -338,7 +338,7 @@ public class FieldFormatter implements XItemListener
                 short ipos = xlstFieldNames.getSelectedItemPos();
                 fieldnames[ipos] = newfieldname;
                 Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, fieldnames);
-                Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+                Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                         {
                             ipos
                         });
@@ -353,7 +353,7 @@ public class FieldFormatter implements XItemListener
         Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, snewlist);
         if ((ipos - 1) > -1)
         {
-            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                     {
                         (short) (ipos - 1)
                     });
@@ -369,7 +369,7 @@ public class FieldFormatter implements XItemListener
         Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.STRING_ITEM_LIST, snewlist);
         if ((ipos + 1) < xlstFieldNames.getItemCount())
         {
-            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new Short[]
+            Helper.setUnoPropertyValue(UnoDialog.getModel(xlstFieldNames), PropertyNames.SELECTED_ITEMS, new short[]
                     {
                         (short) (ipos + 1)
                     });
commit 47a631ad96ea1064202280968abfa0d9a292994d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue May 10 17:39:13 2016 +0200

    Missing break in switch
    
    First 749a0845500d69f99bf1901bab82361f67b5e4f6 "don't show area and line panel
    in pie chart Chart selection, tdf#94320" added the case OBJECTTYPE_DIAGRAM
    falling through to the default break case.  Then
    14237c1678167da725fee079532c4669264d697f "use trendline context for trendlines,
    tdf#94931, tdf#94934" added the case OBJECTTYPE_DATA_CURVE,
    OBJECTTYPE_DATA_AVERAGE_LINE block in between.
    
    Change-Id: I9d06b5054128c4a31381e33620f4a2b898e0e969
    (cherry picked from commit ca6c108caaeca5c8176164fcad70ae7a77865892)
    Reviewed-on: https://gerrit.libreoffice.org/24918
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx
index e969b51..12195e0 100644
--- a/chart2/source/controller/main/ChartController.cxx
+++ b/chart2/source/controller/main/ChartController.cxx
@@ -334,6 +334,7 @@ OUString ChartController::GetContextName()
         case OBJECTTYPE_DIAGRAM:
             if (xChartType->getChartType() == "com.sun.star.chart2.PieChartType")
                 return OUString("ChartElements");
+            break;
         case OBJECTTYPE_DATA_CURVE:
         case OBJECTTYPE_DATA_AVERAGE_LINE:
             return OUString("Trendline");
commit dd8319479fe3863324c27407625fe5e6ba759f17
Author: Tor Lillqvist <tml at collabora.com>
Date:   Thu May 12 14:22:42 2016 +0300

    tdf#99369: Try harder to bail out for non-horizontal text
    
    Look not only for fonts with rotated glyphs (where the first character
    of the face name is '@') but also for font objects with non-zero
    orientation or escapement in general.
    
    (cherry-picked from the commit 43c95611d2621d1f2f9d60b26c07aad25c62baed)
    
    Change-Id: Ia88d38010e52ada8193f2b8057d9f3250108e9f1
    Reviewed-on: https://gerrit.libreoffice.org/24929
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index 360a3d3..4dc79ea 100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -370,17 +370,21 @@ bool ImplWinFontEntry::CacheGlyphToAtlas(bool bRealGlyphIndices, int nGlyphIndex
 
     pTxt->BindFont(hDC);
 
-    // Bail for vertical text.
+    // Bail for non-horizontal text.
     {
         wchar_t sFaceName[200];
         int nFaceNameLen = GetTextFaceW(hDC, SAL_N_ELEMENTS(sFaceName), sFaceName);
-        SelectObject(hDC, hOrigFont);
-        DeleteDC(hDC);
 
         if (!nFaceNameLen)
             SAL_WARN("vcl.gdi", "GetTextFace failed: " << WindowsErrorString(GetLastError()));
 
-        if (sFaceName[0] == '@')
+        LOGFONTW aLogFont;
+        GetObjectW(rLayout.mhFont, sizeof(LOGFONTW), &aLogFont);
+
+        SelectObject(hDC, hOrigFont);
+        DeleteDC(hDC);
+
+        if (sFaceName[0] == '@' || aLogFont.lfOrientation != 0 || aLogFont.lfEscapement != 0)
         {
             pTxt->ReleaseFont();
             return false;
commit 02af67f6e43fa86e7e6faed7eaec4178396e36a3
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed May 11 16:14:24 2016 +0200

    Missing break in switch
    
    caused by c2ea2e6ca99395cc6d9ea8f2edf009252dc87957 "coverity#704901 Dereference
    after null check"
    
    Change-Id: I7e53493bcb2857ccc840429cd2fd2e802180aa19
    (cherry picked from commit 838994da2af5f069654456dc86c5ffbc4322c37c)
    Reviewed-on: https://gerrit.libreoffice.org/24920
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 57c7d1d..5bb29a5 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -820,8 +820,8 @@ void SwFlyFrame::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew,
                 if ( FrameSizeChg( rNew ) )
                     NotifyDrawObj();
                 rInvFlags |= 0x1A;
-                break;
             }
+            break;
 
         case RES_FRM_SIZE:
         case RES_FMT_CHG:
commit 33fe9e6da9241aacac6816cbb5211f4d5fa7fba1
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue May 10 10:08:35 2016 +0200

    Missing break in switch
    
    Apparently forgotten when introducing the case PROPERTY_ID_GENERATEVBAEVENTS in
    4fae740db79d4e7cc97440e2bab8d1ef612d9b51 "Disable fake VBA events for the
    old-style form controls."
    
    Change-Id: Id2783fd4f087669bd200a9c33eaad2bb6b7b50cd
    (cherry picked from commit 1f7a31a461bb3a6fcd277ab57875405875568f8b)
    Reviewed-on: https://gerrit.libreoffice.org/24916
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/forms/source/component/FormComponent.cxx b/forms/source/component/FormComponent.cxx
index 3ac6da0..376ba7a 100644
--- a/forms/source/component/FormComponent.cxx
+++ b/forms/source/component/FormComponent.cxx
@@ -931,6 +931,7 @@ void OControlModel::getFastPropertyValue( Any& _rValue, sal_Int32 _nHandle ) con
             break;
         case PROPERTY_ID_GENERATEVBAEVENTS:
             _rValue <<= m_bGenerateVbEvents;
+            break;
         // added for exporting OCX control
         case PROPERTY_ID_CONTROL_TYPE_IN_MSO:
             _rValue <<= (sal_Int16)m_nControlTypeinMSO;
commit af0f89913a250cef9545db6e0e75f3650c65f89c
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue May 10 11:14:03 2016 +0200

    Missing break in switch
    
    Forgotten in 4f1f8b8e993b98095bf50c9e432fb0400d318b1f "pivot: new pivot table
    layout dialog" (as clarified on IRC).
    
    Change-Id: If35e1a9616e596b16bcb007f6ea172b634c11b85
    (cherry picked from commit 100cd38d0530ebaec19338c0c612a73e15fb1b4f)
    Reviewed-on: https://gerrit.libreoffice.org/24917
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/ui/dbgui/PivotLayoutDialog.cxx b/sc/source/ui/dbgui/PivotLayoutDialog.cxx
index 531eb49..72eec8a 100644
--- a/sc/source/ui/dbgui/PivotLayoutDialog.cxx
+++ b/sc/source/ui/dbgui/PivotLayoutDialog.cxx
@@ -404,6 +404,7 @@ void ScPivotLayoutDialog::ItemInserted(ScItemValue* pItemValue, ScPivotLayoutTre
             mpListBoxColumn->RemoveEntryForItem(pItemValue);
             mpListBoxPage->RemoveEntryForItem(pItemValue);
         }
+        break;
         case ScPivotLayoutTreeList::LABEL_LIST:
         {
             mpListBoxRow->RemoveEntryForItem(pItemValue);
commit c82f0680283d3a6daaed5717cb791a5ee9692aea
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed May 11 15:51:34 2016 +0200

    Missing break in switch
    
    The case SID_CURRENTDOC used to harmlessly fall through to
    
      case SID_ATTR_SIZE://XXX ???
          break;
    
    which was removed with ebabf6d1fa648d62dd63529e9fe64dcb631caee8 "fdo#86018 Don't
    do anything when clicked on placeholder in statusbar", making it erroneously
    fall through to the case SID_PRINTPREVIEW instead.
    
    Change-Id: Ib7792ed4198ea3e25696a63f0d7ab4df78848e6a
    (cherry picked from commit 3c8f49d7f8d70282236bf4f3d6b5a700e169f8e8)
    Reviewed-on: https://gerrit.libreoffice.org/24919
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/source/ui/view/tabvwsh3.cxx b/sc/source/ui/view/tabvwsh3.cxx
index 957fa3f..4fd9a5c 100644
--- a/sc/source/ui/view/tabvwsh3.cxx
+++ b/sc/source/ui/view/tabvwsh3.cxx
@@ -494,6 +494,7 @@ void ScTabViewShell::Execute( SfxRequest& rReq )
 
                 rReq.Ignore();//XXX is handled by SFX
             }
+            break;
 
         case SID_PRINTPREVIEW:
             {
commit b0b85e3154183f18fa9d2b82fe5edb5f70094b0b
Author: Korrawit Pruegsanusak <detective.conan.1412 at gmail.com>
Date:   Wed Mar 23 13:26:05 2016 +0700

    Change #include <cairo-svg.h> to <cairo.h>
    
    Since we don't need cairo's svg feature, and we build internal cairo
    with --disable-svg. Also remove commented-out codes which use svg.
    
    Change-Id: I5a8e8c672588bb6eca28696f21221770972ec3d3
    Reviewed-on: https://gerrit.libreoffice.org/23456
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    (cherry picked from commit f9ddd6e317a7bfd662516d197c3caea976aef3b3)
    Reviewed-on: https://gerrit.libreoffice.org/24890

diff --git a/vcl/unx/generic/gdi/openglx11cairotextrender.cxx b/vcl/unx/generic/gdi/openglx11cairotextrender.cxx
index 885145c..bc4e012 100644
--- a/vcl/unx/generic/gdi/openglx11cairotextrender.cxx
+++ b/vcl/unx/generic/gdi/openglx11cairotextrender.cxx
@@ -13,7 +13,7 @@
 #include "salbmp.hxx"
 #include <vcl/salbtype.hxx>
 
-#include <cairo-svg.h>
+#include <cairo.h>
 
 OpenGLX11CairoTextRender::OpenGLX11CairoTextRender(X11SalGraphics& rParent)
     : X11CairoTextRender(rParent)
@@ -22,9 +22,6 @@ OpenGLX11CairoTextRender::OpenGLX11CairoTextRender(X11SalGraphics& rParent)
 
 cairo_t* OpenGLX11CairoTextRender::getCairoContext()
 {
-    // static size_t id = 0;
-    // OString aFileName = OString("/tmp/libo_logs/text_rendering") + OString::number(id++) + OString(".svg");
-    // cairo_surface_t* surface = cairo_svg_surface_create(aFileName.getStr(), GetWidth(), GetHeight());
     cairo_surface_t* surface = nullptr;
     OpenGLSalGraphicsImpl *pImpl = dynamic_cast< OpenGLSalGraphicsImpl* >(mrParent.GetImpl());
     if( pImpl )
commit a9277eabc8dfefba1a255097ec212745941b3fc9
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed May 11 12:56:56 2016 +0100

    Resolves: tdf#92951 make PaneDockingWindow dockable again
    
    Change-Id: Ia7a59849777247c2beaabd3c9a4938317a7ea2d0
    (cherry picked from commit 7200965a31cafed1d37de9946b417ceac2e850e0)
    Reviewed-on: https://gerrit.libreoffice.org/24884
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/sd/source/ui/dlg/PaneDockingWindow.cxx b/sd/source/ui/dlg/PaneDockingWindow.cxx
index 6c3def4..87c5b7e 100644
--- a/sd/source/ui/dlg/PaneDockingWindow.cxx
+++ b/sd/source/ui/dlg/PaneDockingWindow.cxx
@@ -40,7 +40,7 @@ namespace sd {
 PaneDockingWindow::PaneDockingWindow(
         SfxBindings *_pBindings, SfxChildWindow *pChildWindow, vcl::Window* pParent,
         const OUString& rsTitle )
-        : TitledDockingWindow(_pBindings, pChildWindow, pParent, WB_MOVEABLE|WB_CLOSEABLE|WB_HIDE|WB_3DLOOK)
+        : TitledDockingWindow(_pBindings, pChildWindow, pParent, WB_MOVEABLE|WB_CLOSEABLE|WB_DOCKABLE|WB_HIDE|WB_3DLOOK)
 {
     SetTitle(rsTitle);
     SetSizePixel(LogicToPixel(Size(80,200), MAP_APPFONT));
commit ea0951bcc0d66db288e4723e3147a04ef47eca50
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date:   Tue May 10 12:51:46 2016 +0200

    tdf#98163 Flush ressources at CustomShapes during import
    
    During ODF import using API for CustomShapes Outliners and
    VirtualDevioces get created and not destroyed due to referencing.
    This makes the ressources blow up, even under 64bit windows.
    Also see tdf#93994 where this was already fixed on page base,
    but this is not sufficient for this case.
    
    Reviewed-on: https://gerrit.libreoffice.org/24305
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Armin Le Grand <Armin.Le.Grand at cib.de>
    (cherry picked from commit e6adb3e8b4de3c0f78d249b83de19b849ef65b59)
    
    Change-Id: If9b37d341fcfa4e65485c54054d47964ee2fff5f
    Reviewed-on: https://gerrit.libreoffice.org/24843
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx
index f7f1ecc..7e0ac75 100644
--- a/sd/source/ui/unoidl/unopage.cxx
+++ b/sd/source/ui/unoidl/unopage.cxx
@@ -606,40 +606,6 @@ void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName
 
     throwIfDisposed();
 
-    // tdf#93994 Use a custom slot to have filter code flush the UNO
-    // API implementations of SdrObjCustomShape. Used e.g. by
-    // SdXMLDrawPageContext::EndElement(), see there for more
-    // information
-    if(SvxFmDrawPage::mpPage)
-    {
-        const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
-
-        if(sFlushCustomShapeUnoApiObjects == aPropertyName)
-        {
-            SdrObjListIter aIter(static_cast< SdPage& >(*SvxFmDrawPage::mpPage), IM_DEEPWITHGROUPS);
-
-            while(aIter.IsMore())
-            {
-                SdrObjCustomShape* pCustomShape = dynamic_cast< SdrObjCustomShape* >(aIter.Next());
-
-                if(pCustomShape)
-                {
-                    // tdf#96522 do not reset UNO API implementation since e.g. the
-                    // animation evtl. added to the object uses weak references and
-                    // will be lost when resetting it. In that sense it is *not* a
-                    // on-demand recreatable ressource.
-                    // Luckily, the object causing problems in tdf#93994 is not the
-                    // UNO API object, but the XCustomShapeEngine involved. This
-                    // object is on-demand replacable and can be reset here. This
-                    // will free the involved EditEngine and VirtualDevice.
-                    pCustomShape->mxCustomShapeEngine.set(nullptr);
-                }
-            }
-
-            return;
-        }
-    }
-
     const SfxItemPropertySimpleEntry* pEntry = mpPropSet->getPropertyMapEntry(aPropertyName);
 
     switch( pEntry ? pEntry->nWID : -1 )
diff --git a/svx/source/inc/svdoutlinercache.hxx b/svx/source/inc/svdoutlinercache.hxx
index 03572fc2..3bc3212 100644
--- a/svx/source/inc/svdoutlinercache.hxx
+++ b/svx/source/inc/svdoutlinercache.hxx
@@ -22,6 +22,7 @@
 
 #include <sal/types.h>
 #include <vector>
+#include <set>
 
 class SdrModel;
 class SdrOutliner;
@@ -30,22 +31,18 @@ class SdrOutliner;
 class SdrOutlinerCache
 {
 private:
-    SdrModel*   mpModel;
+    SdrModel*                    mpModel;
+    std::vector< SdrOutliner* >  maModeOutline;
+    std::vector< SdrOutliner* >  maModeText;
+    std::set< SdrOutliner* >     maActiveOutliners;
 
-    SdrOutliner*    mpModeOutline;
-    SdrOutliner*    mpModeText;
-
-    std::vector<SdrOutliner*> maActiveOutliners;
 public:
     SdrOutlinerCache( SdrModel* pModel );
     ~SdrOutlinerCache();
 
     SdrOutliner* createOutliner( sal_uInt16 nOutlinerMode );
     void disposeOutliner( SdrOutliner* pOutliner );
-    std::vector<SdrOutliner*> GetActiveOutliners() const
-    {
-        return maActiveOutliners;
-    }
+    std::vector< SdrOutliner* > GetActiveOutliners() const;
 };
 
 #endif
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index a500958..4f5ca08 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -1969,9 +1969,7 @@ SdrOutliner* SdrModel::createOutliner( sal_uInt16 nOutlinerMode )
 
 std::vector<SdrOutliner*> SdrModel::GetActiveOutliners() const
 {
-    std::vector<SdrOutliner*> aRet(mpOutlinerCache ?
-        mpOutlinerCache->GetActiveOutliners() : std::vector<SdrOutliner*>());
-
+    std::vector< SdrOutliner* > aRet(mpOutlinerCache ? mpOutlinerCache->GetActiveOutliners() : std::vector< SdrOutliner* >());
     aRet.push_back(pDrawOutliner);
     aRet.push_back(pHitTestOutliner);
 
diff --git a/svx/source/svdraw/svdoutlinercache.cxx b/svx/source/svdraw/svdoutlinercache.cxx
index c9e9bee..72e0069 100644
--- a/svx/source/svdraw/svdoutlinercache.cxx
+++ b/svx/source/svdraw/svdoutlinercache.cxx
@@ -24,8 +24,9 @@
 
 SdrOutlinerCache::SdrOutlinerCache( SdrModel* pModel )
 :   mpModel( pModel ),
-    mpModeOutline( nullptr ),
-    mpModeText( nullptr )
+    maModeOutline(),
+    maModeText(),
+    maActiveOutliners()
 {
 }
 
@@ -33,22 +34,22 @@ SdrOutliner* SdrOutlinerCache::createOutliner( sal_uInt16 nOutlinerMode )
 {
     SdrOutliner* pOutliner = nullptr;
 
-    if( (OUTLINERMODE_OUTLINEOBJECT == nOutlinerMode) && mpModeOutline )
+    if( (OUTLINERMODE_OUTLINEOBJECT == nOutlinerMode) && !maModeOutline.empty() )
     {
-        pOutliner = mpModeOutline;
-        mpModeOutline = nullptr;
+        pOutliner = maModeOutline.back();
+        maModeOutline.pop_back();
     }
-    else if( (OUTLINERMODE_TEXTOBJECT == nOutlinerMode) && mpModeText )
+    else if( (OUTLINERMODE_TEXTOBJECT == nOutlinerMode) && !maModeText.empty() )
     {
-        pOutliner = mpModeText;
-        mpModeText = nullptr;
+        pOutliner = maModeText.back();
+        maModeText.pop_back();
     }
     else
     {
         pOutliner = SdrMakeOutliner(nOutlinerMode, *mpModel);
         Outliner& aDrawOutliner = mpModel->GetDrawOutliner();
         pOutliner->SetCalcFieldValueHdl( aDrawOutliner.GetCalcFieldValueHdl() );
-        maActiveOutliners.push_back(pOutliner);
+        maActiveOutliners.insert(pOutliner);
     }
 
     return pOutliner;
@@ -56,17 +57,19 @@ SdrOutliner* SdrOutlinerCache::createOutliner( sal_uInt16 nOutlinerMode )
 
 SdrOutlinerCache::~SdrOutlinerCache()
 {
-    if( mpModeOutline )
+    for( auto candA : maModeOutline )
     {
-        delete mpModeOutline;
-        mpModeOutline = nullptr;
+        delete candA;
     }
 
-    if( mpModeText )
+    maModeOutline.clear();
+
+    for( auto candB : maModeText )
     {
-        delete mpModeText;
-        mpModeText = nullptr;
+        delete candB;
     }
+
+    maModeText.clear();
 }
 
 void SdrOutlinerCache::disposeOutliner( SdrOutliner* pOutliner )
@@ -75,18 +78,18 @@ void SdrOutlinerCache::disposeOutliner( SdrOutliner* pOutliner )
     {
         sal_uInt16 nOutlMode = pOutliner->GetOutlinerMode();
 
-        if( (OUTLINERMODE_OUTLINEOBJECT == nOutlMode) && (nullptr == mpModeOutline) )
+        if( OUTLINERMODE_OUTLINEOBJECT == nOutlMode )
         {
-            mpModeOutline = pOutliner;
+            maModeOutline.push_back(pOutliner);
             pOutliner->Clear();
             pOutliner->SetVertical( false );
 
             // Deregister on outliner, might be reused from outliner cache
             pOutliner->SetNotifyHdl( Link<EENotify&,void>() );
         }
-        else if( (OUTLINERMODE_TEXTOBJECT == nOutlMode) && (nullptr == mpModeText) )
+        else if( OUTLINERMODE_TEXTOBJECT == nOutlMode )
         {
-            mpModeText = pOutliner;
+            maModeText.push_back(pOutliner);
             pOutliner->Clear();
             pOutliner->SetVertical( false );
 
@@ -95,11 +98,15 @@ void SdrOutlinerCache::disposeOutliner( SdrOutliner* pOutliner )
         }
         else
         {
-            maActiveOutliners.erase(std::remove(maActiveOutliners.begin(), maActiveOutliners.end(), pOutliner), maActiveOutliners.end());
+            maActiveOutliners.erase(pOutliner);
             delete pOutliner;
         }
     }
 }
 
+std::vector< SdrOutliner* > SdrOutlinerCache::GetActiveOutliners() const
+{
+    return std::vector< SdrOutliner* >(maActiveOutliners.begin(), maActiveOutliners.end());
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index 26e18ae..60c6a49 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -1842,8 +1842,26 @@ void SAL_CALL SvxCustomShape::setPropertyValue( const OUString& aPropertyName, c
     throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, css::beans::PropertyVetoException, css::lang::IllegalArgumentException, std::exception)
 {
     ::SolarMutexGuard aGuard;
+
     SdrObject* pObject = mpObj.get();
 
+    // tdf#98163 Use a custom slot to have filter code flush the UNO
+    // API implementations of SdrObjCustomShape. Used e.g. by
+    // ~SdXMLCustomShapeContext, see there for more information
+    const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
+    if(sFlushCustomShapeUnoApiObjects == aPropertyName)
+    {
+        SdrObjCustomShape* pTarget = dynamic_cast< SdrObjCustomShape* >(pObject);
+        if(pTarget)
+        {
+            // Luckily, the object causing problems in tdf#93994 is not the
+            // UNO API object, but the XCustomShapeEngine involved. This
+            // object is on-demand replacable and can be reset here. This
+            // will free the involved EditEngine and VirtualDevice.
+            pTarget->mxCustomShapeEngine.set(nullptr);
+        }
+    }
+
     bool bCustomShapeGeometry = pObject && aPropertyName == "CustomShapeGeometry";
 
     bool bMirroredX = false;
diff --git a/xmloff/source/draw/ximpbody.cxx b/xmloff/source/draw/ximpbody.cxx
index 227280e..45c626d 100644
--- a/xmloff/source/draw/ximpbody.cxx
+++ b/xmloff/source/draw/ximpbody.cxx
@@ -278,29 +278,6 @@ void SdXMLDrawPageContext::EndElement()
         if(xNodeSupplier.is())
             xmloff::AnimationNodeContext::postProcessRootNode( GetSdImport(), xNodeSupplier->getAnimationNode(), xPageProps );
     }
-
-    // tdf#93994 call a custom slot to be able to reset the UNO API
-    // implementations held on the SdrObjects of type
-    // SdrObjCustomShape - those tend to linger until the entire file
-    // is loaded. For large files with a lot of these 32bit systems
-    // may crash due to being out of ressources after ca. 4200
-    // Outliners and VirtualDevices used there as RefDevice
-    try
-    {
-        uno::Reference< beans::XPropertySet > xPropSet(GetLocalShapesContext(), uno::UNO_QUERY);
-
-        if(xPropSet.is())
-        {
-            const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
-            uno::Any aAny;
-            aAny <<= sal_True;
-            xPropSet->setPropertyValue(sFlushCustomShapeUnoApiObjects, aAny);
-        }
-    }
-    catch(const uno::Exception&)
-    {
-        OSL_FAIL("could not flush after load");
-    }
 }
 
 SdXMLBodyContext::SdXMLBodyContext( SdXMLImport& rImport,
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index 91af3ee..5383b32 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -3898,6 +3898,29 @@ void SdXMLCustomShapeContext::EndElement()
     }
 
     SdXMLShapeContext::EndElement();
+
+    // tdf#98163 call a custom slot to be able to reset the UNO API
+    // implementations held on the SdrObjects of type
+    // SdrObjCustomShape - those tend to linger until the entire file
+    // is loaded. For large files with a lot of these, 32bit systems
+    // may crash due to being out of ressources after ca. 4200
+    // Outliners and VirtualDevices used there as RefDevice
+    try
+    {
+        uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY);
+
+        if(xPropSet.is())
+        {
+            const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
+            uno::Any aAny;
+            aAny <<= sal_True;
+            xPropSet->setPropertyValue(sFlushCustomShapeUnoApiObjects, aAny);
+        }
+    }
+    catch(const uno::Exception&)
+    {
+        OSL_FAIL("could not flush after load");
+    }
 }
 
 SvXMLImportContext* SdXMLCustomShapeContext::CreateChildContext(
commit 27db0b033235bb5379b5af4f530413750bee9f29
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date:   Tue Jan 12 18:18:40 2016 +0100

    tdf#96522 reset CustomShapeEngine at import
    
    Do not reset UNO API xShape at import time as described in tdf#93994, better
    reset the involved XCustomShapeEngine which allocates and holds the
    EditEngine and VirtualDevice. Resetting the UNO API object leads to problems
    when e.g. an animation effect is set for the shape. This happens since the
    animation effect remembers the xShape using a weak reference, thus being
    no real on-demand constructable object.
    
    Change-Id: I7b421f578ebf003af2745e449cd02ba368b455dd
    Reviewed-on: https://gerrit.libreoffice.org/21401
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit 50f024844b1e00249e638df6db029f09465c4c10)
    Reviewed-on: https://gerrit.libreoffice.org/24842
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx
index 8dbb921..f7f1ecc 100644
--- a/sd/source/ui/unoidl/unopage.cxx
+++ b/sd/source/ui/unoidl/unopage.cxx
@@ -624,7 +624,15 @@ void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName
 
                 if(pCustomShape)
                 {
-                    pCustomShape->setUnoShape(nullptr);
+                    // tdf#96522 do not reset UNO API implementation since e.g. the
+                    // animation evtl. added to the object uses weak references and
+                    // will be lost when resetting it. In that sense it is *not* a
+                    // on-demand recreatable ressource.
+                    // Luckily, the object causing problems in tdf#93994 is not the
+                    // UNO API object, but the XCustomShapeEngine involved. This
+                    // object is on-demand replacable and can be reset here. This
+                    // will free the involved EditEngine and VirtualDevice.
+                    pCustomShape->mxCustomShapeEngine.set(nullptr);
                 }
             }
 
commit 67755e4a3b0634d123ad68b107381bf90b6d6487
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date:   Wed Nov 18 15:37:26 2015 +0100

    Resolves: tdf#93994 flush API objects at load time
    
    When importing SdrObjCustomShape for each an Outliner and a
    VirtualDevice as RefDevice are created and held. On 32bit systems this
    breaks the import with many such objects (in the bugdoc around 4300). On
    64bit it works, but more memory as necessary is used. To avoid this,
    flush the UNO API implementations at these objects after one page is
    imported.  Do not do this for each single object, that will break the
    connector import which does some processing later.
    
    Change-Id: I7296edd40f01c1a40258808d78bf39e6d4fe29bf
    Reviewed-on: https://gerrit.libreoffice.org/19990
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit e67a834c5d1a14889ab97b79df5b579934f27c30)
    Reviewed-on: https://gerrit.libreoffice.org/24841
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx
index 98a9aa3..8dbb921 100644
--- a/sd/source/ui/unoidl/unopage.cxx
+++ b/sd/source/ui/unoidl/unopage.cxx
@@ -73,6 +73,7 @@
 #include "unohelp.hxx"
 #include <vcl/dibtools.hxx>
 #include <svx/svdograf.hxx>
+#include <svx/svdoashp.hxx>
 
 using ::com::sun::star::animations::XAnimationNode;
 using ::com::sun::star::animations::XAnimationNodeSupplier;
@@ -605,6 +606,32 @@ void SAL_CALL SdGenericDrawPage::setPropertyValue( const OUString& aPropertyName
 
     throwIfDisposed();
 
+    // tdf#93994 Use a custom slot to have filter code flush the UNO
+    // API implementations of SdrObjCustomShape. Used e.g. by
+    // SdXMLDrawPageContext::EndElement(), see there for more
+    // information
+    if(SvxFmDrawPage::mpPage)
+    {
+        const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
+
+        if(sFlushCustomShapeUnoApiObjects == aPropertyName)
+        {
+            SdrObjListIter aIter(static_cast< SdPage& >(*SvxFmDrawPage::mpPage), IM_DEEPWITHGROUPS);
+
+            while(aIter.IsMore())
+            {
+                SdrObjCustomShape* pCustomShape = dynamic_cast< SdrObjCustomShape* >(aIter.Next());
+
+                if(pCustomShape)
+                {
+                    pCustomShape->setUnoShape(nullptr);
+                }
+            }
+
+            return;
+        }
+    }
+
     const SfxItemPropertySimpleEntry* pEntry = mpPropSet->getPropertyMapEntry(aPropertyName);
 
     switch( pEntry ? pEntry->nWID : -1 )
diff --git a/xmloff/source/draw/ximpbody.cxx b/xmloff/source/draw/ximpbody.cxx
index 2fea468..227280e 100644
--- a/xmloff/source/draw/ximpbody.cxx
+++ b/xmloff/source/draw/ximpbody.cxx
@@ -37,6 +37,7 @@
 #include "PropertySetMerger.hxx"
 #include "animationimport.hxx"
 #include <tools/debug.hxx>
+#include <osl/diagnose.hxx>
 
 using namespace ::com::sun::star;
 
@@ -277,6 +278,29 @@ void SdXMLDrawPageContext::EndElement()
         if(xNodeSupplier.is())
             xmloff::AnimationNodeContext::postProcessRootNode( GetSdImport(), xNodeSupplier->getAnimationNode(), xPageProps );
     }
+
+    // tdf#93994 call a custom slot to be able to reset the UNO API
+    // implementations held on the SdrObjects of type
+    // SdrObjCustomShape - those tend to linger until the entire file
+    // is loaded. For large files with a lot of these 32bit systems
+    // may crash due to being out of ressources after ca. 4200
+    // Outliners and VirtualDevices used there as RefDevice
+    try
+    {
+        uno::Reference< beans::XPropertySet > xPropSet(GetLocalShapesContext(), uno::UNO_QUERY);
+
+        if(xPropSet.is())
+        {
+            const OUString sFlushCustomShapeUnoApiObjects("FlushCustomShapeUnoApiObjects");
+            uno::Any aAny;
+            aAny <<= sal_True;
+            xPropSet->setPropertyValue(sFlushCustomShapeUnoApiObjects, aAny);
+        }
+    }
+    catch(const uno::Exception&)
+    {
+        OSL_FAIL("could not flush after load");
+    }
 }
 
 SdXMLBodyContext::SdXMLBodyContext( SdXMLImport& rImport,
commit 5d7badd2f2341171733c5fabf111ecf9674bc3d4
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Sat Apr 30 14:58:27 2016 +0900

    tdf#99258 bail out if we fail to reserve the texture + more
    
    (cherry picked from commit d22ca8d8cb050b9006720f39c612c5c32eab8795)
    
    also includes coverity fixes from commits:
    
    coverity#1358428 fix "Null pointer dereferences"
    4e07c7e279b21c4ae93b832a65e221e2dab5391d
    
    cid#1358836 reorganize to silence Resource leak in object
    6e970c11645f1a05638e49da9e2911fe59628838
    
    Check if we have an OpenGL context before using API that requires it
    347e46da399b8cc96d9dd8dbfd62120db473b555
    
    opengl: Check if texture is valid before asking for Id
    0214aa8ce427905477602dbf1d55278c4959fcac
    
    Change-Id: I830e313352b69a7665bff953aadb1334be0dc847
    Reviewed-on: https://gerrit.libreoffice.org/24829
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>

diff --git a/vcl/inc/opengl/AccumulatedTextures.hxx b/vcl/inc/opengl/AccumulatedTextures.hxx
index e74c065..882a694 100644
--- a/vcl/inc/opengl/AccumulatedTextures.hxx
+++ b/vcl/inc/opengl/AccumulatedTextures.hxx
@@ -88,8 +88,11 @@ public:
         maEntries.clear();
     }
 
-    void insert(OpenGLTexture& rTexture, const SalColor& aColor, const SalTwoRect& r2Rect)
+    bool insert(OpenGLTexture& rTexture, const SalColor& aColor, const SalTwoRect& r2Rect)
     {
+        if (!rTexture)
+            return false;
+
         GLuint nTextureId = rTexture.Id();
 
         if (maEntries.find(nTextureId) == maEntries.end())
@@ -100,6 +103,8 @@ public:
 
         std::unique_ptr<AccumulatedTexturesEntry>& rEntry = maEntries[nTextureId];
         rEntry->insert(rTexture, aColor, r2Rect);
+
+        return true;
     }
 
     AccumulatedTexturesMap& getAccumulatedTexturesMap()
diff --git a/vcl/opengl/PackedTextureAtlas.cxx b/vcl/opengl/PackedTextureAtlas.cxx
index 0231cbd..c8e9c3f 100644
--- a/vcl/opengl/PackedTextureAtlas.cxx
+++ b/vcl/opengl/PackedTextureAtlas.cxx
@@ -110,7 +110,7 @@ Node* Node::insert(int nWidth, int nHeight, int nPadding)
 
 struct PackedTexture
 {

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list