[Libreoffice-commits] core.git: Branch 'distro/collabora/lov-5.2' - 169 commits - accessibility/inc accessibility/source basic/qa basic/source canvas/source chart2/source config_host.mk.in configure.ac connectivity/source cui/source cui/uiconfig desktop/source download.lst drawinglayer/source editeng/source embeddedobj/source embedserv/source external/coinmp external/curl external/jpeg-turbo external/mdds external/nss external/poppler extras/source filter/source filter/uiconfig formula/source framework/source i18npool/source include/editeng include/filter include/formula include/oox include/opencl include/sax include/svtools include/svx include/vcl jvmfwk/distributions Makefile.in officecfg/registry oox/source opencl/source readlicense_oo/license reportdesign/source RepositoryExternal.mk sal/rtl sax/source sc/inc sc/Library_sc.mk sc/qa sc/source sd/qa sd/source sd/uiconfig sd/UIConfig_sdraw.mk sfx2/classification sfx2/Package_classification.mk sfx2/source slideshow/Library_OGLTrans.mk slideshow/s ource svtools/source svx/source svx/uiconfig sw/qa sw/source vcl/inc vcl/opengl vcl/source vcl/unx vcl/win wizards/com writerfilter/source xmloff/source

Tor Lillqvist tml at collabora.com
Sun Nov 13 09:08:58 UTC 2016


 Makefile.in                                                         |    2 
 RepositoryExternal.mk                                               |   24 
 accessibility/inc/accessibility/standard/vclxaccessiblelist.hxx     |    2 
 accessibility/inc/accessibility/standard/vclxaccessiblelistitem.hxx |   16 
 accessibility/source/standard/vclxaccessiblelist.cxx                |    4 
 accessibility/source/standard/vclxaccessiblelistitem.cxx            |   82 
 basic/qa/cppunit/test_vba.cxx                                       |    6 
 basic/source/runtime/stdobj.cxx                                     |    1 
 canvas/source/cairo/cairo_canvashelper.cxx                          |    5 
 chart2/source/controller/main/ChartController.cxx                   |    7 
 chart2/source/controller/sidebar/ChartElementsPanel.cxx             |    3 
 config_host.mk.in                                                   |    2 
 configure.ac                                                        |   27 
 connectivity/source/drivers/firebird/DatabaseMetaData.cxx           |    4 
 cui/source/tabpages/border.cxx                                      |    2 
 cui/source/tabpages/transfrm.cxx                                    |    8 
 cui/uiconfig/ui/numberingoptionspage.ui                             |   20 
 desktop/source/app/opencl.cxx                                       |    3 
 download.lst                                                        |   10 
 drawinglayer/source/processor2d/vclhelperbufferdevice.cxx           |    1 
 editeng/source/items/frmitems.cxx                                   |   12 
 editeng/source/misc/svxacorr.cxx                                    |   18 
 embeddedobj/source/commonembedding/visobj.cxx                       |    5 
 embeddedobj/source/msole/olecomponent.cxx                           |   17 
 embeddedobj/source/msole/olevisual.cxx                              |   16 
 embedserv/source/embed/docholder.cxx                                |    2 
 external/coinmp/ExternalProject_coinmp.mk                           |    1 
 external/curl/ExternalPackage_curl.mk                               |    2 
 external/curl/ExternalProject_curl.mk                               |    2 
 external/curl/UnpackedTarball_curl.mk                               |    3 
 external/curl/curl-7.26.0_win-proxy.patch                           |   45 
 external/curl/curl-freebsd.patch.1                                  |   32 
 external/curl/curl-msvc-schannel.patch.1                            |    4 
 external/curl/curl-msvc.patch.1                                     |   12 
 external/jpeg-turbo/jpeg-turbo.win_build.patch.1                    |   28 
 external/mdds/UnpackedTarball_mdds.mk                               |    1 
 external/mdds/tdf90579.patch.0                                      |   23 
 external/nss/ExternalPackage_nss.mk                                 |    5 
 external/nss/UnpackedTarball_nss.mk                                 |    1 
 external/nss/clang-cl.patch.0                                       |    4 
 external/nss/nss-winXP-sdk.patch.1                                  |    5 
 external/nss/nss.nowerror.patch                                     |    8 
 external/nss/nss.patch                                              |   26 
 external/nss/nss.windowbuild.patch.0                                |   55 
 external/nss/nss.windows.patch                                      |    6 
 external/nss/nss_macosx.patch                                       |   10 
 external/nss/ubsan.patch.0                                          |   29 
 external/poppler/ExternalProject_poppler.mk                         |    2 
 external/poppler/UnpackedTarball_poppler.mk                         |    1 
 external/poppler/poppler-libjpeg.patch.1                            |   23 
 extras/source/autocorr/emoji/emoji.ulf                              |   24 
 extras/source/autocorr/lang/bg/DocumentList.xml                     |   12 
 extras/source/autocorr/lang/ca/DocumentList.xml                     |   53 
 extras/source/autocorr/lang/cs/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/da/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/en-AU/DocumentList.xml                  |   24 
 extras/source/autocorr/lang/en-GB/DocumentList.xml                  |   24 
 extras/source/autocorr/lang/en-US/DocumentList.xml                  |   24 
 extras/source/autocorr/lang/es/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/fi/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/fr/DocumentList.xml                     |   36 
 extras/source/autocorr/lang/hr/DocumentList.xml                     |   12 
 extras/source/autocorr/lang/hu/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/is/DocumentList.xml                     |   13 
 extras/source/autocorr/lang/it/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/ja/DocumentList.xml                     |   12 
 extras/source/autocorr/lang/ko/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/lt/DocumentList.xml                     |   95 
 extras/source/autocorr/lang/nl-BE/DocumentList.xml                  |   24 
 extras/source/autocorr/lang/nl/DocumentList.xml                     |   36 
 extras/source/autocorr/lang/pl/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/pt-BR/DocumentList.xml                  |   24 
 extras/source/autocorr/lang/pt/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/ro/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/sk/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/sl/DocumentList.xml                     |   12 
 extras/source/autocorr/lang/sv/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/tr/DocumentList.xml                     |   24 
 extras/source/autocorr/lang/zh-CN/DocumentList.xml                  |   13 
 extras/source/autocorr/lang/zh-TW/DocumentList.xml                  |   72 
 filter/source/msfilter/eschesdo.cxx                                 |   13 
 filter/source/msfilter/mscodec.cxx                                  |  200 
 filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl       |    4 
 filter/uiconfig/ui/pdfgeneralpage.ui                                |    6 
 formula/source/core/api/token.cxx                                   |    5 
 framework/source/services/substitutepathvars.cxx                    |    3 
 framework/source/uielement/resourcemenucontroller.cxx               |    6 
 i18npool/source/search/textsearch.cxx                               |    4 
 include/editeng/boxitem.hxx                                         |    5 
 include/filter/msfilter/mscodec.hxx                                 |  213 
 include/formula/tokenarray.hxx                                      |   11 
 include/oox/crypto/CryptTools.hxx                                   |    3 
 include/oox/crypto/Standard2007Engine.hxx                           |   68 
 include/oox/drawingml/fillproperties.hxx                            |    1 
 include/oox/export/drawingml.hxx                                    |    2 
 include/oox/ole/vbaproject.hxx                                      |    6 
 include/opencl/openclwrapper.hxx                                    |    6 
 include/sax/fshelper.hxx                                            |    2 
 include/svtools/htmlout.hxx                                         |    2 
 include/svx/graphctl.hxx                                            |    2 
 include/svx/sidebar/AreaPropertyPanelBase.hxx                       |    2 
 include/svx/svdoole2.hxx                                            |   16 
 include/svx/svdundo.hxx                                             |   14 
 include/vcl/opengl/OpenGLContext.hxx                                |   16 
 include/vcl/window.hxx                                              |    2 
 jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml           |    6 
 jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml              |    6 
 officecfg/registry/schema/org/openoffice/Office/Impress.xcs         |    2 
 oox/source/crypto/CryptTools.cxx                                    |   14 
 oox/source/crypto/DocumentDecryption.cxx                            |   22 
 oox/source/crypto/Standard2007Engine.cxx                            |   67 
 oox/source/drawingml/fillproperties.cxx                             |    4 
 oox/source/drawingml/fillpropertiesgroupcontext.cxx                 |    3 
 oox/source/drawingml/shape.cxx                                      |    2 
 oox/source/export/chartexport.cxx                                   |    5 
 oox/source/export/drawingml.cxx                                     |   15 
 oox/source/export/shapes.cxx                                        |    4 
 oox/source/ole/vbaproject.cxx                                       |    5 
 oox/source/ppt/pptshape.cxx                                         |    1 
 oox/source/ppt/presentationfragmenthandler.cxx                      |   21 
 opencl/source/openclwrapper.cxx                                     |  102 
 readlicense_oo/license/CREDITS.fodt                                 | 3529 +++++-----
 reportdesign/source/core/inc/ReportUndoFactory.hxx                  |    2 
 reportdesign/source/core/sdr/ReportUndoFactory.cxx                  |    4 
 reportdesign/source/ui/dlg/Condition.cxx                            |    2 
 sal/rtl/strtmpl.cxx                                                 |    9 
 sax/source/tools/fastserializer.cxx                                 |    6 
 sc/Library_sc.mk                                                    |    1 
 sc/inc/bulkdatahint.hxx                                             |    2 
 sc/inc/conditio.hxx                                                 |    2 
 sc/inc/documentlinkmgr.hxx                                          |    5 
 sc/inc/dpobject.hxx                                                 |    2 
 sc/inc/dpsave.hxx                                                   |    2 
 sc/inc/externalrefmgr.hxx                                           |    3 
 sc/inc/markdata.hxx                                                 |   15 
 sc/inc/rangelst.hxx                                                 |    2 
 sc/inc/scabstdlg.hxx                                                |    4 
 sc/inc/scitems.hxx                                                  |    3 
 sc/qa/unit/data/xlsx/pivot-table/shared-dategroup.xlsx              |binary
 sc/qa/unit/data/xlsx/pivot-table/shared-nested-dategroup.xlsx       |binary
 sc/qa/unit/data/xlsx/pivot-table/shared-numgroup.xlsx               |binary
 sc/qa/unit/data/xlsx/pivot-table/shared_group.xlsx                  |binary
 sc/qa/unit/subsequent_filters-test.cxx                              |  150 
 sc/source/core/data/bcaslot.cxx                                     |   16 
 sc/source/core/data/colorscale.cxx                                  |    4 
 sc/source/core/data/column.cxx                                      |   16 
 sc/source/core/data/conditio.cxx                                    |   12 
 sc/source/core/data/documen2.cxx                                    |    2 
 sc/source/core/data/documen7.cxx                                    |    6 
 sc/source/core/data/document.cxx                                    |    8 
 sc/source/core/data/document10.cxx                                  |    7 
 sc/source/core/data/dpcache.cxx                                     |    5 
 sc/source/core/data/dpobject.cxx                                    |   80 
 sc/source/core/data/drwlayer.cxx                                    |    2 
 sc/source/core/data/formulacell.cxx                                 |    5 
 sc/source/core/data/markdata.cxx                                    |   30 
 sc/source/core/data/table1.cxx                                      |    9 
 sc/source/core/data/table2.cxx                                      |    6 
 sc/source/core/data/table3.cxx                                      |    7 
 sc/source/core/data/table4.cxx                                      |    8 
 sc/source/core/inc/bcaslot.hxx                                      |   11 
 sc/source/core/opencl/formulagroupcl.cxx                            |   29 
 sc/source/core/opencl/op_addin.cxx                                  |    6 
 sc/source/core/opencl/op_database.cxx                               |   82 
 sc/source/core/opencl/op_financial.cxx                              |  330 
 sc/source/core/opencl/op_logical.cxx                                |   26 
 sc/source/core/opencl/op_math.cxx                                   |  160 
 sc/source/core/opencl/op_statistical.cxx                            |  466 -
 sc/source/core/opencl/opbase.cxx                                    |    6 
 sc/source/core/opencl/opbase.hxx                                    |    2 
 sc/source/core/tool/bulkdatahint.cxx                                |    4 
 sc/source/core/tool/cellkeytranslator.cxx                           |    6 
 sc/source/core/tool/charthelper.cxx                                 |   10 
 sc/source/core/tool/compare.cxx                                     |    5 
 sc/source/core/tool/compiler.cxx                                    |   58 
 sc/source/core/tool/grouparealistener.cxx                           |   21 
 sc/source/core/tool/interpr1.cxx                                    |    6 
 sc/source/core/tool/interpr2.cxx                                    |   22 
 sc/source/core/tool/interpr4.cxx                                    |   26 
 sc/source/core/tool/interpr8.cxx                                    |   56 
 sc/source/core/tool/rangelst.cxx                                    |   22 
 sc/source/core/tool/refupdat.cxx                                    |    4 
 sc/source/core/tool/token.cxx                                       |   75 
 sc/source/filter/excel/xeview.cxx                                   |    2 
 sc/source/filter/excel/xicontent.cxx                                |  106 
 sc/source/filter/excel/xilink.cxx                                   |   12 
 sc/source/filter/excel/xistream.cxx                                 |   70 
 sc/source/filter/inc/defnamesbuffer.hxx                             |    4 
 sc/source/filter/inc/pivotcachebuffer.hxx                           |    7 
 sc/source/filter/inc/pivottablebuffer.hxx                           |   10 
 sc/source/filter/inc/workbookhelper.hxx                             |    2 
 sc/source/filter/inc/xistream.hxx                                   |   67 
 sc/source/filter/inc/xlcontent.hxx                                  |    2 
 sc/source/filter/oox/defnamesbuffer.cxx                             |   10 
 sc/source/filter/oox/formulabuffer.cxx                              |   47 
 sc/source/filter/oox/pivotcachebuffer.cxx                           |    5 
 sc/source/filter/oox/pivottablebuffer.cxx                           |   77 
 sc/source/filter/oox/workbookfragment.cxx                           |    3 
 sc/source/filter/oox/workbookhelper.cxx                             |   17 
 sc/source/filter/xml/celltextparacontext.cxx                        |    9 
 sc/source/filter/xml/celltextparacontext.hxx                        |    3 
 sc/source/filter/xml/xmlcelli.cxx                                   |    6 
 sc/source/filter/xml/xmlcelli.hxx                                   |    2 
 sc/source/filter/xml/xmlexprt.cxx                                   |   43 
 sc/source/filter/xml/xmlimprt.cxx                                   |    1 
 sc/source/filter/xml/xmlimprt.hxx                                   |    1 
 sc/source/ui/Accessibility/AccessibleCsvControl.cxx                 |   33 
 sc/source/ui/app/msgpool.cxx                                        |    7 
 sc/source/ui/attrdlg/scdlgfact.cxx                                  |    7 
 sc/source/ui/attrdlg/scdlgfact.hxx                                  |    4 
 sc/source/ui/condformat/condformatdlg.cxx                           |  214 
 sc/source/ui/condformat/condformatdlgitem.cxx                       |   77 
 sc/source/ui/condformat/condformatmgr.cxx                           |   13 
 sc/source/ui/docshell/dbdocfun.cxx                                  |   54 
 sc/source/ui/docshell/docfunc.cxx                                   |   54 
 sc/source/ui/docshell/docsh.cxx                                     |    7 
 sc/source/ui/docshell/docsh4.cxx                                    |   12 
 sc/source/ui/docshell/documentlinkmgr.cxx                           |   26 
 sc/source/ui/docshell/externalrefmgr.cxx                            |   16 
 sc/source/ui/inc/AccessibleCsvControl.hxx                           |    9 
 sc/source/ui/inc/condformatdlg.hxx                                  |   33 
 sc/source/ui/inc/condformatdlgitem.hxx                              |   68 
 sc/source/ui/inc/condformatmgr.hxx                                  |    3 
 sc/source/ui/inc/docfunc.hxx                                        |    5 
 sc/source/ui/inc/msgpool.hxx                                        |    2 
 sc/source/ui/inc/undoblk.hxx                                        |   10 
 sc/source/ui/undo/undoblk.cxx                                       |  105 
 sc/source/ui/undo/undoblk3.cxx                                      |    2 
 sc/source/ui/unoobj/cellsuno.cxx                                    |    2 
 sc/source/ui/unoobj/dapiuno.cxx                                     |    2 
 sc/source/ui/view/cellsh1.cxx                                       |   74 
 sc/source/ui/view/gridwin.cxx                                       |   24 
 sc/source/ui/view/tabcont.cxx                                       |    3 
 sc/source/ui/view/tabview4.cxx                                      |   24 
 sc/source/ui/view/tabvwsh2.cxx                                      |   19 
 sc/source/ui/view/tabvwsh4.cxx                                      |    2 
 sc/source/ui/view/tabvwshc.cxx                                      |   47 
 sc/source/ui/view/viewfun2.cxx                                      |    2 
 sc/source/ui/view/viewfun3.cxx                                      |    4 
 sd/UIConfig_sdraw.mk                                                |    2 
 sd/qa/unit/data/pptx/tdf103473.pptx                                 |binary
 sd/qa/unit/data/pptx/tdf103792.pptx                                 |binary
 sd/qa/unit/import-tests.cxx                                         |   38 
 sd/qa/unit/tiledrendering/data/tdf102223.odp                        |binary
 sd/qa/unit/tiledrendering/data/tdf103083.fodp                       |  932 ++
 sd/qa/unit/tiledrendering/tiledrendering.cxx                        |  117 
 sd/source/core/drawdoc.cxx                                          |    6 
 sd/source/core/drawdoc3.cxx                                         |   13 
 sd/source/ui/annotations/annotationwindow.cxx                       |    4 
 sd/source/ui/docshell/docshel4.cxx                                  |    4 
 sd/source/ui/func/fuprlout.cxx                                      |   18 
 sd/source/ui/func/futext.cxx                                        |   15 
 sd/source/ui/func/undoback.cxx                                      |   56 
 sd/source/ui/inc/undoback.hxx                                       |   12 
 sd/source/ui/unoidl/UnoDocumentSettings.cxx                         |    2 
 sd/source/ui/view/drviews1.cxx                                      |    9 
 sd/source/ui/view/drviews2.cxx                                      |    1 
 sd/source/ui/view/sdview.cxx                                        |   43 
 sd/uiconfig/sdraw/popupmenu/pagepanemaster.xml                      |   20 
 sd/uiconfig/sdraw/popupmenu/pagepanenoselmaster.xml                 |   16 
 sfx2/Package_classification.mk                                      |    3 
 sfx2/classification/example_ca-ES.xml                               |   71 
 sfx2/classification/example_fr-FR.xml                               |   84 
 sfx2/classification/example_nl-NL.xml                               |   71 
 sfx2/source/doc/docfile.cxx                                         |    9 
 sfx2/source/doc/templatedlg.cxx                                     |   10 
 slideshow/Library_OGLTrans.mk                                       |    4 
 slideshow/source/engine/OGLTrans/generic/OGLTrans_Operation.cxx     |    8 
 svtools/source/svhtml/htmlout.cxx                                   |   44 
 svx/source/dialog/_contdlg.cxx                                      |   10 
 svx/source/dialog/frmsel.cxx                                        |    1 
 svx/source/dialog/graphctl.cxx                                      |   32 
 svx/source/dialog/imapdlg.cxx                                       |    3 
 svx/source/sidebar/area/AreaPropertyPanelBase.cxx                   |   13 
 svx/source/sidebar/tools/Popup.cxx                                  |    2 
 svx/source/svdraw/svdoole2.cxx                                      |   18 
 svx/source/svdraw/svdotext.cxx                                      |   14 
 svx/source/svdraw/svdundo.cxx                                       |   83 
 svx/source/table/svdotable.cxx                                      |   18 
 svx/source/tbxctrls/tbcontrl.cxx                                    |   17 
 svx/source/unodraw/unoshap4.cxx                                     |    4 
 svx/uiconfig/ui/sidebararea.ui                                      |    2 
 sw/qa/extras/odfimport/data/tdf103025.odt                           |binary
 sw/qa/extras/odfimport/odfimport.cxx                                |    9 
 sw/qa/extras/ooxmlexport/data/tdf103001.docx                        |binary
 sw/qa/extras/ooxmlexport/data/tdf103389.docx                        |binary
 sw/qa/extras/ooxmlexport/data/tdf103544.docx                        |binary
 sw/qa/extras/ooxmlexport/data/tdf103573.docx                        |binary
 sw/qa/extras/ooxmlexport/data/tdf79329.docx                         |binary
 sw/qa/extras/ooxmlexport/data/tdf81345.docx                         |binary
 sw/qa/extras/ooxmlexport/data/tdf95031.docx                         |binary
 sw/qa/extras/ooxmlexport/ooxmlexport4.cxx                           |   25 
 sw/qa/extras/ooxmlexport/ooxmlexport7.cxx                           |   59 
 sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx                       |    4 
 sw/qa/extras/ooxmlimport/data/tdf100830.docx                        |binary
 sw/qa/extras/ooxmlimport/data/tdf103664.docx                        |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                            |   25 
 sw/qa/extras/rtfimport/data/tdf84684.rtf                            |  399 +
 sw/qa/extras/rtfimport/rtfimport.cxx                                |   14 
 sw/qa/extras/ww8import/data/tdf102334.doc                           |binary
 sw/qa/extras/ww8import/ww8import.cxx                                |    6 
 sw/source/core/doc/DocumentLinksAdministrationManager.cxx           |   83 
 sw/source/core/doc/notxtfrm.cxx                                     |   16 
 sw/source/core/docnode/node.cxx                                     |    8 
 sw/source/core/layout/colfrm.cxx                                    |    6 
 sw/source/core/layout/pagechg.cxx                                   |   16 
 sw/source/core/text/txtftn.cxx                                      |    2 
 sw/source/core/unocore/unodraw.cxx                                  |    9 
 sw/source/filter/basflt/fltshell.cxx                                |    6 
 sw/source/filter/ww8/docxattributeoutput.cxx                        |   37 
 sw/source/filter/ww8/docxattributeoutput.hxx                        |    7 
 sw/source/filter/ww8/docxexport.cxx                                 |    8 
 sw/source/filter/ww8/docxsdrexport.cxx                              |    6 
 sw/source/filter/ww8/wrtw8sty.cxx                                   |   15 
 sw/source/filter/ww8/ww8par.cxx                                     |  110 
 sw/source/filter/ww8/ww8par2.cxx                                    |    7 
 sw/source/ui/dbui/dbinsdlg.cxx                                      |   39 
 sw/source/ui/misc/bookmark.cxx                                      |   18 
 sw/source/uibase/app/docshini.cxx                                   |    3 
 sw/source/uibase/uiview/view2.cxx                                   |    2 
 sw/source/uibase/utlui/navipi.cxx                                   |    4 
 sw/source/uibase/utlui/unotools.cxx                                 |    4 
 vcl/inc/opengl/watchdog.hxx                                         |   38 
 vcl/inc/opengl/zone.hxx                                             |    1 
 vcl/inc/salframe.hxx                                                |    4 
 vcl/inc/unx/gtk/gtkframe.hxx                                        |    6 
 vcl/inc/unx/gtk/gtkinst.hxx                                         |    6 
 vcl/opengl/areaScaleFragmentShader.glsl                             |  113 
 vcl/opengl/gdiimpl.cxx                                              |   16 
 vcl/opengl/salbmp.cxx                                               |   38 
 vcl/opengl/scale.cxx                                                |   10 
 vcl/opengl/win/gdiimpl.cxx                                          |    5 
 vcl/source/app/salvtables.cxx                                       |    3 
 vcl/source/control/spinfld.cxx                                      |    4 
 vcl/source/gdi/pdfextoutdevdata.cxx                                 |    6 
 vcl/source/gdi/pdfwriter_impl.cxx                                   |   36 
 vcl/source/opengl/OpenGLHelper.cxx                                  |   43 
 vcl/source/window/floatwin.cxx                                      |    2 
 vcl/source/window/menu.cxx                                          |   15 
 vcl/source/window/menubarwindow.cxx                                 |    7 
 vcl/source/window/menufloatingwindow.cxx                            |   60 
 vcl/source/window/menufloatingwindow.hxx                            |    6 
 vcl/source/window/paint.cxx                                         |    3 
 vcl/source/window/taskpanelist.cxx                                  |    2 
 vcl/source/window/window2.cxx                                       |   16 
 vcl/unx/generic/glyphs/gcach_layout.cxx                             |   30 
 vcl/unx/gtk/a11y/atklistener.cxx                                    |    3 
 vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx                            |   88 
 vcl/unx/gtk/gtkinst.cxx                                             |   21 
 vcl/unx/gtk/gtkprintwrapper.cxx                                     |    7 
 vcl/unx/gtk/gtksalframe.cxx                                         |   30 
 vcl/unx/gtk3/gtk3gtkframe.cxx                                       |   29 
 vcl/unx/gtk3/gtk3gtkinst.cxx                                        |  200 
 vcl/win/gdi/salfont.cxx                                             |  110 
 vcl/win/gdi/salgdi2.cxx                                             |   67 
 wizards/com/sun/star/wizards/agenda/AgendaWizardDialogImpl.py       |    2 
 wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py             |    2 
 wizards/com/sun/star/wizards/letter/LetterWizardDialogImpl.py       |    2 
 wizards/com/sun/star/wizards/ui/event/CommonListener.py             |    2 
 writerfilter/source/dmapper/DomainMapper.cxx                        |   20 
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx            |    7 
 writerfilter/source/dmapper/DomainMapperTableHandler.hxx            |    2 
 writerfilter/source/dmapper/DomainMapper_Impl.cxx                   |    3 
 writerfilter/source/dmapper/DomainMapper_Impl.hxx                   |    4 
 writerfilter/source/dmapper/GraphicHelpers.cxx                      |   10 
 writerfilter/source/dmapper/PropertyMap.cxx                         |    7 
 writerfilter/source/dmapper/TableManager.cxx                        |   10 
 writerfilter/source/dmapper/TableManager.hxx                        |    3 
 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx               |   16 
 writerfilter/source/ooxml/OOXMLFastContextHandler.hxx               |    2 
 writerfilter/source/ooxml/model.xml                                 |    2 
 writerfilter/source/rtftok/rtfsdrimport.cxx                         |   19 
 writerfilter/source/rtftok/rtfsdrimport.hxx                         |    2 
 xmloff/source/chart/PropertyMaps.cxx                                |   11 
 374 files changed, 8356 insertions(+), 4780 deletions(-)

New commits:
commit 07ad38b58db829aca5d6d941b0b92710f1cf44ee
Author: Tor Lillqvist <tml at collabora.com>
Date:   Sun Nov 13 11:07:52 2016 +0200

    Bump version to 5.2.3.5
    
    Change-Id: Ieec2d27f81d3f6393f48aa0a52f4a7809524f493

diff --git a/configure.ac b/configure.ac
index 965e01a..9bf0c73 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ dnl in order to create a configure script.
 # several non-alphanumeric characters, those are split off and used only for the
 # ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
 
-AC_INIT([LibreOffice Vanilla],[5.2.1.4],[],[],[http://documentfoundation.org/])
+AC_INIT([LibreOffice Vanilla],[5.2.3.5],[],[],[http://documentfoundation.org/])
 
 AC_PREREQ([2.59])
 
commit bb67a3f9847eb364c1d0aea82b97962bfabc3453
Author: Julien Nabet <serval2412 at yahoo.fr>
Date:   Fri Nov 11 20:53:49 2016 +0100

    tdf#71251: VARCHAR max length is 32765 for Firebird
    
    At least for Firebird 2.5 (see http://www.firebirdsql.org/en/firebird-technical-specifications/)
    Let's put the same for CHAR
    
    Cherry-picked from ba8a41bac3765f7b3562d357aeb13f752ea14ba4
    Reviewed-on: https://gerrit.libreoffice.org/30783
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    Tested-by: Julien Nabet <serval2412 at yahoo.fr>
    
    Change-Id: I4ab232689093b0418a7c1a9751685f41f2dabbf7
    Reviewed-on: https://gerrit.libreoffice.org/30786
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Lionel Elie Mamane <lionel at mamane.lu>

diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
index f5b1a7e..1caa8af 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
@@ -903,7 +903,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
         // SQL_TEXT
         aRow[1] = new ORowSetValueDecorator(OUString("CHAR"));
         aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_TEXT));
-        aRow[3] = new ORowSetValueDecorator(sal_Int16(32767)); // Prevision = max length
+        aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
         aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
         aRow[9] = new ORowSetValueDecorator(
                 sal_Int16(ColumnSearch::FULL)); // Searchable
@@ -915,7 +915,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
         // SQL_VARYING
         aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
         aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_VARYING));
-        aRow[3] = new ORowSetValueDecorator(sal_Int16(32767)); // Prevision = max length
+        aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
         aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
         aRow[9] = new ORowSetValueDecorator(
                 sal_Int16(ColumnSearch::FULL)); // Searchable
commit 93439ca1deb30fcdacc24042d2e4b62013eb756d
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
Date:   Thu Nov 10 00:41:49 2016 +0100

    tdf#103792: No placeholder text imported for empty title shape
    
    Change-Id: I95b4358f0d4311e8f427c8de18863049fb718d9b
    Reviewed-on: https://gerrit.libreoffice.org/30731
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
    (cherry picked from commit dc024cdd91e3c33eeff8eea22fdef0d90d4dd2c0)
    Reviewed-on: https://gerrit.libreoffice.org/30762
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index a3ab467..483ba4d 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1140,7 +1140,7 @@ Reference< XShape > Shape::createAndInsert(
                         }
                     }
                 }
-
+                xText->setString("");
                 Reference < XTextCursor > xAt = xText->createTextCursor();
                 getTextBody()->insertAt( rFilterBase, xText, xAt, aCharStyleProperties, mpMasterTextListStyle );
             }
diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx
index 06a173b..ad02b2d 100644
--- a/oox/source/ppt/pptshape.cxx
+++ b/oox/source/ppt/pptshape.cxx
@@ -141,7 +141,6 @@ void PPTShape::addShape(
                 {
                     sServiceName = "com.sun.star.presentation.TitleTextShape";
                     aMasterTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getTitleTextStyle() : rSlidePersist.getTitleTextStyle();
-                    bClearText = true;
                 }
                 break;
                 case XML_subTitle :
diff --git a/sd/qa/unit/data/pptx/tdf103792.pptx b/sd/qa/unit/data/pptx/tdf103792.pptx
new file mode 100755
index 0000000..e48d25e
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf103792.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index da809a2..0fb52dd 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -123,6 +123,7 @@ public:
     void testTdf99030();
     void testTdf49561();
     void testTdf103473();
+    void testTdf103792();
 
     CPPUNIT_TEST_SUITE(SdImportTest);
 
@@ -174,6 +175,7 @@ public:
     CPPUNIT_TEST(testTdf99030);
     CPPUNIT_TEST(testTdf49561);
     CPPUNIT_TEST(testTdf103473);
+    CPPUNIT_TEST(testTdf103792);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -1424,6 +1426,24 @@ void SdImportTest::testTdf103473()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testTdf103792()
+{
+    // Title text shape on the actual slide contained no text neither a placeholder text.
+    sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tdf103792.pptx"), PPTX);
+
+    const SdrPage *pPage = GetPage(1, xDocShRef);
+    CPPUNIT_ASSERT_MESSAGE("No page found", pPage != nullptr);
+    SdrObject *pObj = pPage->GetObj(0);
+    CPPUNIT_ASSERT_MESSAGE("Wrong object", pObj != nullptr);
+    SdrTextObj *pTxtObj = dynamic_cast<SdrTextObj *>(pObj);
+    CPPUNIT_ASSERT_MESSAGE("Not a text object", pTxtObj != nullptr);
+
+    const EditTextObject& aEdit = pTxtObj->GetOutlinerParaObject()->GetTextObject();
+    CPPUNIT_ASSERT_EQUAL(OUString("Click to add Title"), aEdit.GetText(0));
+
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit bdda86ddcb2cf378954390e0ce2d89f109806908
Author: Bartosz Kosiorek <gang65 at poczta.onet.pl>
Date:   Thu Oct 20 10:50:31 2016 +0200

    tdf#101042 Fix for frozen windows in Excel
    
    Window protection is "not allowed to move and resize windows" in MS Excel,
    it is definitely not Frozen Panes ( maData.mbFrozenPanes )
    
    Change-Id: I04f0429738a6daecb26274f169c5118dba73e895
    Reviewed-on: https://gerrit.libreoffice.org/30076
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>
    (cherry picked from commit 0637d0f43d3dc5b41a1bbc5726d6a68b7c36a519)
    Reviewed-on: https://gerrit.libreoffice.org/30777
    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/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx
index 09fbbc1..550c9ed 100644
--- a/sc/source/filter/excel/xeview.cxx
+++ b/sc/source/filter/excel/xeview.cxx
@@ -414,7 +414,7 @@ void XclExpTabViewSettings::SaveXml( XclExpXmlStream& rStrm )
     sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
     rWorksheet->startElement( XML_sheetViews, FSEND );
     rWorksheet->startElement( XML_sheetView,
-            XML_windowProtection,           XclXmlUtils::ToPsz( maData.mbFrozenPanes ),
+            // OOXTODO: XML_windowProtection,
             XML_showFormulas,               XclXmlUtils::ToPsz( maData.mbShowFormulas ),
             XML_showGridLines,              XclXmlUtils::ToPsz( maData.mbShowGrid ),
             XML_showRowColHeaders,          XclXmlUtils::ToPsz( maData.mbShowHeadings ),
commit d527f686f5dd8d776d2beceaca24ebe758908d85
Author: Tamás Zolnai <tamas.zolnai at collabora.com>
Date:   Sun Nov 6 18:42:30 2016 +0000

    tdf#103544: DOCX exp.: Image loss when have a frame anchored to the same para.
    
    Regression from:
    83d51e5e52688c4c9bc0ad70a511458bb06a242d
    
    Partly revert the commit causes this regression.
    I checked the related bugs (tdf#78590,tdf#80748)
    intended to be fixed by this commit and reverting
    this part does not bring back the corruption.
    I guess something changed in frames' and text boxes'
    import in the meantime, because this MergeMarks::IGNORE
    is useless now.
    
    Reviewed-on: https://gerrit.libreoffice.org/30351
    Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
    Tested-by: Tamás Zolnai <tamas.zolnai at collabora.com>
    
    Conflicts:
    	sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
    
    Change-Id: If17776e8628561961c7ce2a2994e3fc609f75639
    Reviewed-on: https://gerrit.libreoffice.org/30358
    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/include/sax/fshelper.hxx b/include/sax/fshelper.hxx
index 4c79a36..599aae1 100644
--- a/include/sax/fshelper.hxx
+++ b/include/sax/fshelper.hxx
@@ -60,7 +60,7 @@ const sal_Int32 FSEND_internal = -1; // same as XML_TOKEN_INVALID
 
 namespace sax_fastparser {
 
-enum class MergeMarks { APPEND = 0, PREPEND = 1, POSTPONE = 2, IGNORE = 3 };
+enum class MergeMarks { APPEND = 0, PREPEND = 1, POSTPONE = 2};
 
 typedef css::uno::Reference< css::xml::sax::XFastAttributeList > XFastAttributeListRef;
 
diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx
index 49ed24b..620fe68 100644
--- a/sax/source/tools/fastserializer.cxx
+++ b/sax/source/tools/fastserializer.cxx
@@ -405,7 +405,7 @@ namespace sax_fastparser {
         // flush, so that we get everything in getData()
         maCachedOutputStream.flush();
 
-        if (maMarkStack.size() == 1 && eMergeType != MergeMarks::IGNORE)
+        if (maMarkStack.size() == 1)
         {
 #ifdef DBG_UTIL
             while (!maMarkStack.top()->m_DebugEndedElements.empty())
@@ -469,8 +469,6 @@ namespace sax_fastparser {
                     topDebugEndedElements,
                     topDebugStartedElements);
                 break;
-            case MergeMarks::IGNORE:
-                break;
         }
 #endif
         if (maMarkStack.empty())
@@ -488,8 +486,6 @@ namespace sax_fastparser {
             case MergeMarks::APPEND:   maMarkStack.top()->append( aMerge );   break;
             case MergeMarks::PREPEND:  maMarkStack.top()->prepend( aMerge );  break;
             case MergeMarks::POSTPONE: maMarkStack.top()->postpone( aMerge ); break;
-            case MergeMarks::IGNORE:   break;
-
         }
     }
 
diff --git a/sw/qa/extras/ooxmlexport/data/tdf103544.docx b/sw/qa/extras/ooxmlexport/data/tdf103544.docx
new file mode 100644
index 0000000..2e18f21
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf103544.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
index c3b94a7..d7c1f22 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
@@ -25,6 +25,7 @@
 #include <com/sun/star/text/GraphicCrop.hpp>
 #include <com/sun/star/text/HoriOrientation.hpp>
 #include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
 #include <pagedesc.hxx>
 
 #include <comphelper/sequenceashashmap.hxx>
@@ -1171,6 +1172,19 @@ DECLARE_OOXMLEXPORT_TEST(testTdf103573, "tdf103573.docx")
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Not centered horizontally relatively to right page border", text::RelOrientation::PAGE_RIGHT, nValue);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf103544, "tdf103544.docx")
+{
+    // We have two shapes: a frame and an image
+    uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xDrawPage->getCount());
+
+    // Image was lost because of the frame export
+    uno::Reference<beans::XPropertySet> xImage(getShape(1), uno::UNO_QUERY);
+    auto xGraphic = getProperty<uno::Reference<graphic::XGraphic> >(xImage, "Graphic");
+    CPPUNIT_ASSERT(xGraphic.is());
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index 9af064c..3552546 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -498,8 +498,8 @@ DECLARE_OOXMLEXPORT_TEST(testFDO78590, "FDO78590.docx")
         return;
 
     // This is to ensure that the fld starts and ends inside a hyperlink...
-    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:framePr", "w", "9851" );
-    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:framePr", "h", "1669" );
+    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:framePr", "w", "9851" );
+    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[2]/w:pPr/w:framePr", "h", "1669" );
 }
 
 DECLARE_OOXMLEXPORT_TEST(testSdtCitationRun, "sdt-citation-run.docx")
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index da5f181..bdfaac4 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -579,10 +579,7 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
     //sdtcontent is written so Set m_bParagraphHasDrawing to false
     m_rExport.SdrExporter().setParagraphHasDrawing( false );
     m_bRunTextIsOn = false;
-    if(aFramePrTextbox.empty())
-        m_pSerializer->mergeTopMarks(Tag_StartParagraph_1);
-    else
-        m_pSerializer->mergeTopMarks(Tag_StartParagraph_1, sax_fastparser::MergeMarks::IGNORE);
+    m_pSerializer->mergeTopMarks(Tag_StartParagraph_1);
 
     // Write framePr
     if(!aFramePrTextbox.empty())
commit 040249c16ff50faadb79dda9aed2e0be04cb0a04
Author: Laurent Balland-Poirier <laurent.balland-poirier at laposte.net>
Date:   Fri Nov 11 13:37:09 2016 +0100

    tdf#100352 Backport ca-ES, fr-FR and nl-NL classification files
    
    Change-Id: I561ff1906c1ddfde5d66d31270633fc4de94589b
    Reviewed-on: https://gerrit.libreoffice.org/30775
    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/sfx2/Package_classification.mk b/sfx2/Package_classification.mk
index 4ed779c..71684f4 100644
--- a/sfx2/Package_classification.mk
+++ b/sfx2/Package_classification.mk
@@ -11,7 +11,10 @@ $(eval $(call gb_Package_Package,sfx2_classification,$(SRCDIR)/sfx2))
 
 $(eval $(call gb_Package_add_files,sfx2_classification,$(LIBO_SHARE_FOLDER)/classification,\
 	classification/example.xml \
+	classification/example_ca-ES.xml \
+	classification/example_fr-FR.xml \
 	classification/example_hu-HU.xml \
+	classification/example_nl-NL.xml \
 	classification/example_pt-BR.xml \
 	classification/example_sl-SI.xml \
 ))
diff --git a/sfx2/classification/example_ca-ES.xml b/sfx2/classification/example_ca-ES.xml
new file mode 100644
index 0000000..f62d647
--- /dev/null
+++ b/sfx2/classification/example_ca-ES.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<baf:BusinessAuthorization xmlns:baf="urn:tscp:names:baf:1.1">
+    <baf:PolicyAuthorityName>Autoritat de polítiques TSCP de exemple</baf:PolicyAuthorityName>
+    <baf:PolicyName>Política TSCP de exemple</baf:PolicyName>
+    <baf:AdministrativeData>
+        <baf:ProgramID>urn:example:tscp:1</baf:ProgramID>
+    </baf:AdministrativeData>
+    <baf:Included>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:non-business" Name="Altres afers">
+            <baf:LabelingRules/>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>0</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:general-business" Name="Afers generals">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificació: afers generals</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>1</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:confidential" Name="Confidencial">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificació: confidencial</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <baf:Value>Aquest contingut és de caràcter confidencial. No el distribuïu externament sense autorització.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <baf:Value>Confidencial</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>2</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:internal-only" Name="Ús intern">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificació: només d’ús intern</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <baf:Value>Aquest contingut és només d’ús intern. No el distribuïu externament.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <baf:Value>Ús intern</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>3</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+    </baf:Included>
+</baf:BusinessAuthorization>
+<!-- vim:set shiftwidth=4 softtabstop=4 expandtab:
+-->
diff --git a/sfx2/classification/example_fr-FR.xml b/sfx2/classification/example_fr-FR.xml
new file mode 100644
index 0000000..4e0ab99
--- /dev/null
+++ b/sfx2/classification/example_fr-FR.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<baf:BusinessAuthorization xmlns:baf="urn:tscp:names:baf:1.1">
+    <!-- Translators: this string can be localized -->
+    <baf:PolicyAuthorityName>Exemple d'autorité TSCP</baf:PolicyAuthorityName>
+    <!-- Translators: this string can be localized -->
+    <baf:PolicyName>Exemple de stratégie TSCP</baf:PolicyName>
+    <baf:AdministrativeData>
+        <baf:ProgramID>urn:example:tscp:1</baf:ProgramID>
+    </baf:AdministrativeData>
+    <baf:Included>
+        <!-- Translators: the Name attribute in this string can be localized -->
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:non-business" Name="Public">
+            <baf:LabelingRules/>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>0</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <!-- Translators: the Name attribute in this string can be localized -->
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:general-business" Name="Professionnel">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Classification : professionnel</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>1</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <!-- Translators: the Name attribute in this string can be localized -->
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:confidential" Name="Confidentiel">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Classification : confidentiel</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Ce contenu est marqué confidentiel. Ne le communiquez pas à l'extérieur sans un accord de l'entreprise.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Confidentiel</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>2</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <!-- Translators: the Name attribute in this string can be localized -->
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:internal-only" Name="Exclusivement en interne">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Classification : exclusivement en interne</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Ce contenu est marqué pour un usage interne exclusivement. Il ne doit pas être communiqué  à l'extérieur de l'entreprise.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <!-- Translators: this string can be localized -->
+                    <baf:Value>Interne exclusivement</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>3</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+    </baf:Included>
+</baf:BusinessAuthorization>
+<!-- vim:set shiftwidth=4 softtabstop=4 expandtab:
+-->
diff --git a/sfx2/classification/example_nl-NL.xml b/sfx2/classification/example_nl-NL.xml
new file mode 100644
index 0000000..7afc170
--- /dev/null
+++ b/sfx2/classification/example_nl-NL.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<baf:BusinessAuthorization xmlns:baf="urn:tscp:names:baf:1.1">
+    <baf:PolicyAuthorityName>Voorbeeld beleidsauthoriteit TSCP</baf:PolicyAuthorityName>
+    <baf:PolicyName>Voorbeeld beleid TSCP</baf:PolicyName>
+    <baf:AdministrativeData>
+        <baf:ProgramID>urn:example:tscp:1</baf:ProgramID>
+    </baf:AdministrativeData>
+    <baf:Included>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:non-business" Name="Openbaar">
+            <baf:LabelingRules/>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>0</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:general-business" Name="Algemeen bedrijfsvoering">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificatie: Algemeen bedrijfsvoering</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>1</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:confidential" Name="Vertrouwelijk">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificatie: Vertrouwelijk</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <baf:Value>De inhoud van dit document is vertrouwelijk. Verspreid het uitsluitend met de vereiste toestemming.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <baf:Value>Vertrouwelijk</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>2</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+        <baf:BusinessAuthorizationCategory Identifier="urn:example:tscp:1:internal-only" Name="Intern">
+            <baf:LabelingRules>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Header</baf:Identifier>
+                    <baf:Value>Classificatie: Intern</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Footer</baf:Identifier>
+                    <baf:Value>De inhoud van dit document is uitsluitend voor intern gebruik. Verspreid het niet buiten de organisatie.</baf:Value>
+                </baf:VisualMarkingPart>
+                <baf:VisualMarkingPart>
+                    <baf:Identifier>Document: Watermark</baf:Identifier>
+                    <baf:Value>Intern</baf:Value>
+                </baf:VisualMarkingPart>
+            </baf:LabelingRules>
+            <baf:ImpactLevel>
+                <baf:Scale>UK-Cabinet</baf:Scale>
+                <baf:ConfidentalityValue>3</baf:ConfidentalityValue>
+            </baf:ImpactLevel>
+        </baf:BusinessAuthorizationCategory>
+    </baf:Included>
+</baf:BusinessAuthorization>
+<!-- vim:set shiftwidth=4 softtabstop=4 expandtab:
+-->
commit 028b80db26e80b147b508fdfdc9782c1ba842d27
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Nov 9 15:12:39 2016 +0100

    Resolves: tdf#103689 do not slice 3D area broadcasters into separate sheets
    
    Change-Id: Ie167e5e5e953c3e8064b8e128d52f6aa6740575b
    (cherry picked from commit 129eddc18b4f2cb1320b60bf68de537cf86b60f2)
    Reviewed-on: https://gerrit.libreoffice.org/30720
    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/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index c171b44..64eecf9 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -736,6 +736,11 @@ void ScBroadcastAreaSlotMachine::StartListeningArea(
     }
     else
     {
+        // A new area needs to be inserted to the corresponding slots, for 3D
+        // ranges for all sheets, do not slice into per sheet areas or the
+        // !bDone will break too early (i.e. after the first sheet) if
+        // subsequent listeners are to be added.
+        ScBroadcastArea* pArea = nullptr;
         bool bDone = false;
         for (SCTAB nTab = rRange.aStart.Tab();
                 !bDone && nTab <= rRange.aEnd.Tab(); ++nTab)
@@ -750,7 +755,6 @@ void ScBroadcastAreaSlotMachine::StartListeningArea(
             SCSIZE nOff = nStart;
             SCSIZE nBreak = nOff + nRowBreak;
             ScBroadcastAreaSlot** pp = ppSlots + nOff;
-            ScBroadcastArea* pArea = nullptr;
             while ( !bDone && nOff <= nEnd )
             {
                 if ( !*pp )
commit 73f6f293c2007148f38360adfeb4084a63be67a5
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Nov 7 23:49:46 2016 +0100

    Resolves: tdf#103701 bulk-broadcast the correct hint ID for formula groups
    
    BulkBroadcastGroupAreas() and BulkDataHint and thus
    FormulaGroupAreaListener::Notify() omitted to transport the actual hint
    and assumed SC_HINT_DATACHANGED, but SC_HINT_TABLEOPDIRTY needs to be
    handled as well.
    
    (cherry picked from commit 05d2a66955f8a6552a79696474386ca9f45f9ef2)
    
    Backported.
    
     Conflicts:
    	sc/inc/bulkdatahint.hxx
    	sc/inc/document.hxx
    	sc/source/core/data/bcaslot.cxx
    	sc/source/core/data/documen7.cxx
    	sc/source/core/data/document.cxx
    	sc/source/core/inc/bcaslot.hxx
    	sc/source/core/tool/bulkdatahint.cxx
    	sc/source/core/tool/grouparealistener.cxx
    
    Change-Id: I765f7c95f7aeab295f35dcf6949a3b1926cbe248
    Reviewed-on: https://gerrit.libreoffice.org/30701
    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/sc/inc/bulkdatahint.hxx b/sc/inc/bulkdatahint.hxx
index 4b37584..c35e027 100644
--- a/sc/inc/bulkdatahint.hxx
+++ b/sc/inc/bulkdatahint.hxx
@@ -28,7 +28,7 @@ class BulkDataHint : public SfxSimpleHint
     BulkDataHint& operator= ( const BulkDataHint& ) = delete;
 
 public:
-    BulkDataHint( ScDocument& rDoc, const ColumnSpanSet* pSpans );
+    BulkDataHint( ScDocument& rDoc, const ColumnSpanSet* pSpans, sal_uInt32 nHintId );
     virtual ~BulkDataHint();
 
     void setSpans( const ColumnSpanSet* pSpans );
diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index 8d5e1bb..c171b44 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -1091,14 +1091,14 @@ void ScBroadcastAreaSlotMachine::EnterBulkBroadcast()
     ++nInBulkBroadcast;
 }
 
-void ScBroadcastAreaSlotMachine::LeaveBulkBroadcast()
+void ScBroadcastAreaSlotMachine::LeaveBulkBroadcast( sal_uInt32 nHintId )
 {
     if (nInBulkBroadcast > 0)
     {
         if (--nInBulkBroadcast == 0)
         {
             ScBroadcastAreasBulk().swap( aBulkBroadcastAreas);
-            BulkBroadcastGroupAreas();
+            BulkBroadcastGroupAreas( nHintId );
         }
     }
 }
@@ -1122,12 +1122,12 @@ void ScBroadcastAreaSlotMachine::InsertBulkGroupArea( ScBroadcastArea* pArea, co
     pSet->set(rRange, true);
 }
 
-void ScBroadcastAreaSlotMachine::BulkBroadcastGroupAreas()
+void ScBroadcastAreaSlotMachine::BulkBroadcastGroupAreas( sal_uInt32 nHintId )
 {
     if (m_BulkGroupAreas.empty())
         return;
 
-    sc::BulkDataHint aHint(*pDoc, nullptr);
+    sc::BulkDataHint aHint(*pDoc, nullptr, nHintId);
 
     bool bBroadcasted = false;
     BulkGroupAreasType::iterator it = m_BulkGroupAreas.begin(), itEnd = m_BulkGroupAreas.end();
@@ -1154,7 +1154,7 @@ void ScBroadcastAreaSlotMachine::BulkBroadcastGroupAreas()
 
     m_BulkGroupAreas.clear();
     if (bBroadcasted)
-        pDoc->TrackFormulas();
+        pDoc->TrackFormulas( nHintId );
 }
 
 size_t ScBroadcastAreaSlotMachine::RemoveBulkArea( const ScBroadcastArea* pArea )
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index dddcde6..9c30f0f 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -1005,7 +1005,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos,
             sc::CopyToDocContext aCxt(*this);
             nDestPos = std::min(nDestPos, (SCTAB)(GetTableCount() - 1));
             {   // scope for bulk broadcast
-                ScBulkBroadcast aBulkBroadcast( pBASM);
+                ScBulkBroadcast aBulkBroadcast( pBASM, SC_HINT_DATACHANGED);
                 if (!bResultsOnly)
                 {
                     const bool bGlobalNamesToLocal = false;
diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx
index 6816010..70e7fba 100644
--- a/sc/source/core/data/documen7.cxx
+++ b/sc/source/core/data/documen7.cxx
@@ -62,7 +62,7 @@ void ScDocument::Broadcast( const ScHint& rHint )
         return ;    // Clipboard or Undo
     if ( eHardRecalcState == HARDRECALCSTATE_OFF )
     {
-        ScBulkBroadcast aBulkBroadcast( pBASM);     // scoped bulk broadcast
+        ScBulkBroadcast aBulkBroadcast( pBASM, rHint.GetId());     // scoped bulk broadcast
         bool bIsBroadcasted = false;
         SvtBroadcaster* pBC = GetBroadcaster(rHint.GetAddress());
         if ( pBC )
@@ -98,7 +98,7 @@ void ScDocument::BroadcastCells( const ScRange& rRange, sal_uInt32 nHint, bool b
 
     if (eHardRecalcState == HARDRECALCSTATE_OFF)
     {
-        ScBulkBroadcast aBulkBroadcast( pBASM);     // scoped bulk broadcast
+        ScBulkBroadcast aBulkBroadcast( pBASM, nHint);     // scoped bulk broadcast
         bool bIsBroadcasted = false;
 
         if (bBroadcastSingleBroadcasters)
@@ -226,7 +226,7 @@ void ScDocument::AreaBroadcast( const ScHint& rHint )
         return ;    // Clipboard or Undo
     if (eHardRecalcState == HARDRECALCSTATE_OFF)
     {
-        ScBulkBroadcast aBulkBroadcast( pBASM);     // scoped bulk broadcast
+        ScBulkBroadcast aBulkBroadcast( pBASM, rHint.GetId());     // scoped bulk broadcast
         if ( pBASM->AreaBroadcast( rHint ) )
             TrackFormulas( rHint.GetId() );
     }
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 1ae8454..3ce2df4 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -2904,7 +2904,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
     StartListeningFromClip( nAllCol1, nAllRow1, nAllCol2, nAllRow2, rMark, nInsFlag );
 
     {
-        ScBulkBroadcast aBulkBroadcast( GetBASM());
+        ScBulkBroadcast aBulkBroadcast( GetBASM(), SC_HINT_DATACHANGED);
 
         // Set all formula cells dirty, and collect non-empty non-formula cell
         // positions so that we can broadcast on them below.
@@ -2992,7 +2992,7 @@ void ScDocument::CopyMultiRangeFromClip(
                            aDestRange.aEnd.Col(), aDestRange.aEnd.Row(), rMark, nInsFlag );
 
     {
-        ScBulkBroadcast aBulkBroadcast( GetBASM());
+        ScBulkBroadcast aBulkBroadcast( GetBASM(), SC_HINT_DATACHANGED);
 
         // Set formula cells dirty and collect non-formula cells.
         SetDirtyFromClip(
@@ -3722,7 +3722,7 @@ void ScDocument::SetAllFormulasDirty( const sc::SetFormulaDirtyContext& rCxt )
     bool bOldAutoCalc = GetAutoCalc();
     bAutoCalc = false;      // no mulitple calculations
     {   // scope for bulk broadcast
-        ScBulkBroadcast aBulkBroadcast( GetBASM());
+        ScBulkBroadcast aBulkBroadcast( GetBASM(), SC_HINT_DATACHANGED);
         TableContainer::iterator it = maTabs.begin();
         for (;it != maTabs.end(); ++it)
             if (*it)
@@ -3743,7 +3743,7 @@ void ScDocument::SetDirty( const ScRange& rRange, bool bIncludeEmptyCells )
     bool bOldAutoCalc = GetAutoCalc();
     bAutoCalc = false;      // no mulitple calculations
     {   // scope for bulk broadcast
-        ScBulkBroadcast aBulkBroadcast( GetBASM());
+        ScBulkBroadcast aBulkBroadcast( GetBASM(), SC_HINT_DATACHANGED);
         SCTAB nTab2 = rRange.aEnd.Tab();
         for (SCTAB i=rRange.aStart.Tab(); i<=nTab2 && i < static_cast<SCTAB>(maTabs.size()); i++)
             if (maTabs[i]) maTabs[i]->SetDirty( rRange,
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 479c17a..923005a 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -242,7 +242,7 @@ void ScTable::DeleteRow(
     }
 
     {   // scope for bulk broadcast
-        ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM());
+        ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM(), SC_HINT_DATACHANGED);
         for (SCCOL j=nStartCol; j<=nEndCol; j++)
             aCol[j].DeleteRow(nStartRow, nSize, pGroupPos);
     }
@@ -430,7 +430,7 @@ void ScTable::DeleteArea(
     if (ValidColRow(nCol1, nRow1) && ValidColRow(nCol2, nRow2))
     {
         {   // scope for bulk broadcast
-            ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM());
+            ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM(), SC_HINT_DATACHANGED);
             for (SCCOL i = nCol1; i <= nCol2; i++)
                 aCol[i].DeleteArea(nRow1, nRow2, nDelFlag, bBroadcast, pBroadcastSpans);
         }
@@ -457,7 +457,7 @@ void ScTable::DeleteArea(
 void ScTable::DeleteSelection( InsertDeleteFlags nDelFlag, const ScMarkData& rMark, bool bBroadcast )
 {
     {   // scope for bulk broadcast
-        ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM());
+        ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM(), SC_HINT_DATACHANGED);
         for (SCCOL i=0; i<=MAXCOL; i++)
             aCol[i].DeleteSelection(nDelFlag, rMark, bBroadcast);
     }
diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx
index a7d020b..e4f0dbd 100644
--- a/sc/source/core/inc/bcaslot.hxx
+++ b/sc/source/core/inc/bcaslot.hxx
@@ -318,12 +318,12 @@ public:
                                             const ScRange& rRange,
                                             SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
     void                EnterBulkBroadcast();
-    void                LeaveBulkBroadcast();
+    void                LeaveBulkBroadcast( sal_uInt32 nHintId );
     bool                InsertBulkArea( const ScBroadcastArea* p );
 
     void InsertBulkGroupArea( ScBroadcastArea* pArea, const ScRange& rRange );
     void RemoveBulkGroupArea( ScBroadcastArea* pArea );
-    void BulkBroadcastGroupAreas();
+    void BulkBroadcastGroupAreas( sal_uInt32 nHintId );
 
     /// @return: how many removed
     size_t              RemoveBulkArea( const ScBroadcastArea* p );
@@ -350,8 +350,11 @@ public:
 class ScBulkBroadcast
 {
     ScBroadcastAreaSlotMachine* pBASM;
+    sal_uInt32                  mnHintId;
 public:
-    explicit ScBulkBroadcast( ScBroadcastAreaSlotMachine* p ) : pBASM(p)
+    explicit ScBulkBroadcast( ScBroadcastAreaSlotMachine* p, sal_uInt32 nHintId ) :
+        pBASM(p),
+        mnHintId(nHintId)
     {
         if (pBASM)
             pBASM->EnterBulkBroadcast();
@@ -359,7 +362,7 @@ public:
     ~ScBulkBroadcast()
     {
         if (pBASM)
-            pBASM->LeaveBulkBroadcast();
+            pBASM->LeaveBulkBroadcast( mnHintId );
     }
 };
 
diff --git a/sc/source/core/tool/bulkdatahint.cxx b/sc/source/core/tool/bulkdatahint.cxx
index 72ac7c0..fde0012 100644
--- a/sc/source/core/tool/bulkdatahint.cxx
+++ b/sc/source/core/tool/bulkdatahint.cxx
@@ -21,8 +21,8 @@ struct BulkDataHint::Impl
         mpSpans(pSpans) {}
 };
 
-BulkDataHint::BulkDataHint( ScDocument& rDoc, const ColumnSpanSet* pSpans ) :
-    SfxSimpleHint(SC_HINT_BULK_DATACHANGED), mpImpl(new Impl(rDoc, pSpans)) {}
+BulkDataHint::BulkDataHint( ScDocument& rDoc, const ColumnSpanSet* pSpans, sal_uInt32 nHintId ) :
+    SfxSimpleHint( SC_HINT_BULK_DATACHANGED | nHintId ), mpImpl(new Impl(rDoc, pSpans)) {}
 
 BulkDataHint::~BulkDataHint()
 {
diff --git a/sc/source/core/tool/grouparealistener.cxx b/sc/source/core/tool/grouparealistener.cxx
index 70847d82..dd89c69 100644
--- a/sc/source/core/tool/grouparealistener.cxx
+++ b/sc/source/core/tool/grouparealistener.cxx
@@ -111,19 +111,16 @@ void FormulaGroupAreaListener::Notify( const SfxHint& rHint )
     if (!pSimpleHint)
         return;
 
-    switch (pSimpleHint->GetId())
+    // SC_HINT_BULK_DATACHANGED may include (SC_HINT_DATACHANGED |
+    // SC_HINT_TABLEOPDIRTY) so has to be checked first.
+    if (pSimpleHint->GetId() & SC_HINT_BULK_DATACHANGED)
     {
-        case SC_HINT_DATACHANGED:
-            notifyCellChange(rHint, static_cast<const ScHint*>(pSimpleHint)->GetAddress());
-        break;
-        case SC_HINT_BULK_DATACHANGED:
-        {
-            const BulkDataHint& rBulkHint = static_cast<const BulkDataHint&>(*pSimpleHint);
-            notifyBulkChange(rBulkHint);
-        }
-        break;
-        default:
-            ;
+        const BulkDataHint& rBulkHint = static_cast<const BulkDataHint&>(rHint);
+        notifyBulkChange(rBulkHint);
+    }
+    else if (pSimpleHint->GetId() & (SC_HINT_DATACHANGED | SC_HINT_TABLEOPDIRTY))
+    {
+        notifyCellChange(rHint, static_cast<const ScHint*>(&rHint)->GetAddress());
     }
 }
 
commit ae38dbaeaf4772aec0c0727cda26a109d482909a
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Fri Nov 11 01:27:49 2016 +0200

    tdf#103826 Missing master page pane context menus in Draw
    
    (cherry picked from commit 749fe62b32acc3159cf2756aae16df36f091a862)
    
    changes from master: Removed officecfg part to avoid breaking
    string freeze, added nullptr check to be on the safe side.
    
    Change-Id: I355e9507692e770063a91d05efd3ebc3e2671d57
    Reviewed-on: https://gerrit.libreoffice.org/30766
    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/framework/source/uielement/resourcemenucontroller.cxx b/framework/source/uielement/resourcemenucontroller.cxx
index 57674a1..2358f1b 100644
--- a/framework/source/uielement/resourcemenucontroller.cxx
+++ b/framework/source/uielement/resourcemenucontroller.cxx
@@ -181,6 +181,9 @@ void ResourceMenuController::updatePopupMenu()
         }
     }
 
+    if ( !m_xMenuContainer.is() )
+        return;
+
     // Clear previous content.
     if ( m_xMenuBarManager.is() )
     {
@@ -246,9 +249,6 @@ void ResourceMenuController::addVerbs( const css::uno::Sequence< css::embed::Ver
 
 void ResourceMenuController::fillToolbarData()
 {
-    if ( !m_xMenuContainer.is() )
-        return;
-
     VCLXMenu* pAwtMenu = VCLXMenu::GetImplementation( m_xPopupMenu );
     Menu* pVCLMenu = pAwtMenu->GetMenu();
 
diff --git a/sd/UIConfig_sdraw.mk b/sd/UIConfig_sdraw.mk
index b166919..089814d 100644
--- a/sd/UIConfig_sdraw.mk
+++ b/sd/UIConfig_sdraw.mk
@@ -34,6 +34,8 @@ $(eval $(call gb_UIConfig_add_popupmenufiles,modules/sdraw,\
 	sd/uiconfig/sdraw/popupmenu/multiselect \
 	sd/uiconfig/sdraw/popupmenu/oleobject \
 	sd/uiconfig/sdraw/popupmenu/outlinetext \
+	sd/uiconfig/sdraw/popupmenu/pagepanemaster \
+	sd/uiconfig/sdraw/popupmenu/pagepanenoselmaster \
 	sd/uiconfig/sdraw/popupmenu/pagepanenosel \
 	sd/uiconfig/sdraw/popupmenu/pagepane \
 	sd/uiconfig/sdraw/popupmenu/pagetab \
diff --git a/sd/uiconfig/sdraw/popupmenu/pagepanemaster.xml b/sd/uiconfig/sdraw/popupmenu/pagepanemaster.xml
new file mode 100644
index 0000000..bf160df
--- /dev/null
+++ b/sd/uiconfig/sdraw/popupmenu/pagepanemaster.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+<menu:menupopup xmlns:menu="http://openoffice.org/2001/menu">
+  <menu:menuitem menu:id=".uno:Cut"/>
+  <menu:menuitem menu:id=".uno:Copy"/>
+  <menu:menuitem menu:id=".uno:Paste"/>
+  <menu:menuseparator/>
+  <menu:menuitem menu:id=".uno:InsertMasterPage"/>
+  <menu:menuitem menu:id=".uno:DeleteMasterPage"/>
+  <menu:menuitem menu:id=".uno:RenameMasterPage"/>
+  <menu:menuseparator/>
+  <menu:menuitem menu:id=".uno:PresentationLayout"/>
+</menu:menupopup>
diff --git a/sd/uiconfig/sdraw/popupmenu/pagepanenoselmaster.xml b/sd/uiconfig/sdraw/popupmenu/pagepanenoselmaster.xml
new file mode 100644
index 0000000..919e3c5
--- /dev/null
+++ b/sd/uiconfig/sdraw/popupmenu/pagepanenoselmaster.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+<menu:menupopup xmlns:menu="http://openoffice.org/2001/menu">
+  <menu:menuitem menu:id=".uno:Cut"/>
+  <menu:menuitem menu:id=".uno:Copy"/>
+  <menu:menuitem menu:id=".uno:Paste"/>
+  <menu:menuseparator/>
+  <menu:menuitem menu:id=".uno:InsertMasterPage"/>
+</menu:menupopup>
commit 921d0970969b0a8fb7b39d497ff356c156632027
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Tue Nov 8 10:07:18 2016 +0200

    tdf#103087 Border widget must not have focus initially
    
    ... unless it was opened using the keyboard.
    
    (based on 66b75b4ba9f0a1c8003fa52c7a29575e374644a2)
    
    Change-Id: I95753d1c3086177764a08e654a3ff925243743e1
    Reviewed-on: https://gerrit.libreoffice.org/30687
    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/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index b711eb5..28684f4 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -259,7 +259,6 @@ private:
 protected:
     virtual void    Resize() override;
     virtual bool    Close() override;
-    virtual void    GetFocus() override;
 
 public:
     SvxFrameWindow_Impl( sal_uInt16 nId, const Reference< XFrame >& rFrame, vcl::Window* pParentWindow );
@@ -271,6 +270,7 @@ public:
     virtual void    StateChanged( sal_uInt16 nSID, SfxItemState eState,
                                   const SfxPoolItem* pState ) override;
     virtual void    DataChanged( const DataChangedEvent& rDCEvt ) override;
+    virtual void    KeyInput( const KeyEvent& rKEvt ) override;
 };
 
 class SvxLineWindow_Impl : public SfxPopupWindow
@@ -1664,10 +1664,10 @@ void SvxFrameWindow_Impl::dispose()
     SfxPopupWindow::dispose();
 }
 
-void SvxFrameWindow_Impl::GetFocus()
+void SvxFrameWindow_Impl::KeyInput( const KeyEvent& rKEvt )
 {
-    if (aFrameSet)
-        aFrameSet->GrabFocus();
+    aFrameSet->GrabFocus();
+    aFrameSet->KeyInput( rKEvt );
 }
 
 void SvxFrameWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
@@ -2930,6 +2930,13 @@ VclPtr<SfxPopupWindow> SvxFrameToolBoxControl::CreatePopupWindow()
                                FloatWinPopupFlags::AllowTearOff |
                                FloatWinPopupFlags::NoAppFocusClose );
     pFrameWin->StartSelection();
+
+    if ( GetToolBox().IsKeyEvent() )
+    {
+        KeyEvent aEvent( 0, vcl::KeyCode( KEY_HOME ) );
+        pFrameWin->KeyInput( aEvent );
+    }
+
     SetPopupWindow( pFrameWin );
 
     return pFrameWin;
commit 480a2116daf306a07872d7fcf5681a368f4e5f05
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Nov 8 09:11:33 2016 +0100

    tdf#79329 DOCX import: fix missing outer table with floattable at cell start
    
    The bug document has a normal table, then its C1 cell starts with a
    nested table, which is floating. The problem is that converting the
    nested table to a textframe invalidates the start text range of the C1
    cell in the outer table we store, so the conversion of the outer table
    from text to table fails.
    
    This never worked, so to avoid the regression just don't convert inner
    floating tables to textframes when they're anchored at the cell start.
    A more general fix in the future can be addressing the actual
    invalidation of the cell start/end text ranges, and then this specific
    fix will not be necessary anymore.
    
    (cherry picked from commit c1eebcdac9f2b289fd363399130c485ca5ff444c)
    
    Conflicts:
    	sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
    	writerfilter/source/dmapper/DomainMapper.cxx
    
    Change-Id: I12cefa41977cf719b07b0fb3ef9ec423c17ef3b1
    Reviewed-on: https://gerrit.libreoffice.org/30770
    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/qa/extras/ooxmlexport/data/tdf79329.docx b/sw/qa/extras/ooxmlexport/data/tdf79329.docx
new file mode 100644
index 0000000..142f295
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf79329.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
index 6babd92..c3b94a7 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx
@@ -59,6 +59,14 @@ DECLARE_OOXMLEXPORT_TEST( testChildNodesOfCubicBezierTo, "FDO74774.docx")
         "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice/w:drawing[1]/wp:inline[1]/a:graphic[1]/a:graphicData[1]/wpg:wgp[1]/wps:wsp[3]/wps:spPr[1]/a:custGeom[1]/a:pathLst[1]/a:path[1]/a:cubicBezTo[2]/a:pt[3]");
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf79329, "tdf79329.docx")
+{
+    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
+    // This was 1: only the inner, not the outer table was created.
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xTables->getCount());
+}
+
 DECLARE_OOXMLEXPORT_TEST(testMSwordHang,"test_msword_hang.docx")
 {
     // fdo#74771:
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index e309870..a46c6f6 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -2542,6 +2542,11 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
     break;
     case NS_ooxml::LN_tblStart:
 
+        if (m_pImpl->hasTableManager())
+        {
+            bool bTableStartsAtCellStart = m_pImpl->m_nTableDepth > 0 && m_pImpl->m_nTableCellDepth > m_pImpl->m_nLastTableCellParagraphDepth + 1;
+            m_pImpl->getTableManager().setTableStartsAtCellStart(bTableStartsAtCellStart);
+        }
         /*
          * Hack for Importing Section Properties
          * LO is not able to import section properties if first element in the
@@ -2559,6 +2564,13 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
     case NS_ooxml::LN_tblEnd:
         m_pImpl->m_nTableDepth--;
     break;
+    case NS_ooxml::LN_tcStart:
+        m_pImpl->m_nTableCellDepth++;
+    break;
+    case NS_ooxml::LN_tcEnd:
+        m_pImpl->m_nTableCellDepth--;
+        m_pImpl->m_nLastTableCellParagraphDepth = 0;
+    break;
     case NS_ooxml::LN_glow_glow:
     case NS_ooxml::LN_shadow_shadow:
     case NS_ooxml::LN_reflection_reflection:
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index 1769982..43ef3be 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -969,7 +969,7 @@ static void lcl_ApplyCellParaProps(uno::Reference<table::XCell> const& xCell,
     }
 }
 
-void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
+void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart)
 {
 #ifdef DEBUG_WRITERFILTER
     TagLogger::getInstance().startElement("tablehandler.endTable");
@@ -1114,7 +1114,10 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel)
             {
                 // m_xText points to the body text, get the current xText from m_rDMapper_Impl, in case e.g. we would be in a header.
                 uno::Reference<text::XTextAppendAndConvert> xTextAppendAndConvert(m_rDMapper_Impl.GetTopTextAppend(), uno::UNO_QUERY);
-                if (xTextAppendAndConvert.is())
+                // Only execute the conversion if the table is not anchored at
+                // the start of an outer table cell, that's not yet
+                // implemented.
+                if (xTextAppendAndConvert.is() && !bTableStartsAtCellStart)
                     xTextAppendAndConvert->convertToTextFrame(xStart, xEnd, comphelper::containerToSequence(aFrameProperties));
             }
         }
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
index b1ac2f1..ed9cb04 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -94,7 +94,7 @@ public:
      */
     void startTable(unsigned int nDepth, const TablePropertyMapPtr& pProps);
     /// Handle end of table.
-    void endTable(unsigned int nestedTableLevel);
+    void endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart);
     /**
        Handle start of row.
 
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index dc054bc..08de96e 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -232,6 +232,8 @@ DomainMapper_Impl::DomainMapper_Impl(
         m_bIsNewDoc(!rMediaDesc.getUnpackedValueOrDefault("InsertMode", false)),
         m_bInTableStyleRunProps(false),
         m_nTableDepth(0),
+        m_nTableCellDepth(0),
+        m_nLastTableCellParagraphDepth(0),
         m_bHasFtnSep(false),
         m_bIgnoreNextPara(false),
         m_bIgnoreNextTab(false),
@@ -1023,6 +1025,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap )
     TagLogger::getInstance().startElement("finishParagraph");
 #endif
 
+    m_nLastTableCellParagraphDepth = m_nTableCellDepth;
     ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pPropertyMap.get() );
     if (m_aTextAppendStack.empty())
         return;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 5b33c39..5f2ce81 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -818,6 +818,10 @@ public:
      * inTbl SPRM or not).
      */
     sal_Int32 m_nTableDepth;
+    /// Raw table cell depth.
+    sal_Int32 m_nTableCellDepth;
+    /// Table cell depth of the last finished paragraph.
+    sal_Int32 m_nLastTableCellParagraphDepth;
 
     /// If the document has a footnote separator.
     bool m_bHasFtnSep;
diff --git a/writerfilter/source/dmapper/TableManager.cxx b/writerfilter/source/dmapper/TableManager.cxx
index b574d83..432abc9 100644
--- a/writerfilter/source/dmapper/TableManager.cxx
+++ b/writerfilter/source/dmapper/TableManager.cxx
@@ -314,7 +314,7 @@ void TableManager::resolveCurrentTable()
                 mpTableDataHandler->endRow();
             }
 
-            mpTableDataHandler->endTable(mTableDataStack.size() - 1);
+            mpTableDataHandler->endTable(mTableDataStack.size() - 1, m_bTableStartsAtCellStart);
         }
         catch (css::uno::Exception const& e)
         {
@@ -454,8 +454,14 @@ void TableManager::cellDepth(sal_uInt32 nDepth)
     mnTableDepthNew = nDepth;
 }
 
+void TableManager::setTableStartsAtCellStart(bool bTableStartsAtCellStart)
+{
+    m_bTableStartsAtCellStart = bTableStartsAtCellStart;
+}
+
 TableManager::TableManager()
-    : mnTableDepthNew(0), mnTableDepth(0), mbKeepUnfinishedRow(false)
+    : mnTableDepthNew(0), mnTableDepth(0), mbKeepUnfinishedRow(false),
+      m_bTableStartsAtCellStart(false)
 {
     setRowEnd(false);
     setInCell(false);
diff --git a/writerfilter/source/dmapper/TableManager.hxx b/writerfilter/source/dmapper/TableManager.hxx
index 334634d..f3d5f66 100644
--- a/writerfilter/source/dmapper/TableManager.hxx
+++ b/writerfilter/source/dmapper/TableManager.hxx
@@ -314,6 +314,8 @@ private:
     std::stack<TableData::Pointer_t> mTableDataStack;
     RowData::Pointer_t mpUnfinishedRow;
     bool mbKeepUnfinishedRow;
+    /// If this is a nested table, does it start at cell start?
+    bool m_bTableStartsAtCellStart;
 
     /**
        handler for resolveCurrentTable
@@ -515,6 +517,7 @@ public:
     bool isIgnore() const;
 
 
+    void setTableStartsAtCellStart(bool bTableStartsAtCellStart);
 };
 
 }
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index 645ade6..d804e1d 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -1284,6 +1284,17 @@ OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell()
 
 void OOXMLFastContextHandlerTextTableCell::startCell()
 {
+    if (isForwardEvents())
+    {
+        OOXMLPropertySet * pProps = new OOXMLPropertySet;
+        {
+            OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
+            OOXMLProperty::Pointer_t pProp(new OOXMLProperty(NS_ooxml::LN_tcStart, pVal, OOXMLProperty::SPRM));
+            pProps->add(pProp);
+        }
+
+        mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+    }
 }
 
 void OOXMLFastContextHandlerTextTableCell::endCell()
@@ -1306,6 +1317,11 @@ void OOXMLFastContextHandlerTextTableCell::endCell()
             OOXMLProperty::Pointer_t pProp(new OOXMLProperty(NS_ooxml::LN_tblCell, pVal, OOXMLProperty::SPRM));
             pProps->add(pProp);
         }
+        {
+            OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
+            OOXMLProperty::Pointer_t pProp(new OOXMLProperty(NS_ooxml::LN_tcEnd, pVal, OOXMLProperty::SPRM));
+            pProps->add(pProp);
+        }
 
         mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
     }
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
index f713fcf..60d423c 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -391,7 +391,7 @@ public:
 
     virtual std::string getType() const override { return "TextTableCell"; }
 
-    static void startCell();
+    void startCell();
     void endCell();
 };
 
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 61438c3..3b6a03e 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -40,6 +40,8 @@
   <token tokenid="ooxml:object"/>
   <token tokenid="ooxml:tblStart"/>
   <token tokenid="ooxml:tblEnd"/>
+  <token tokenid="ooxml:tcStart"/>
+  <token tokenid="ooxml:tcEnd"/>
 
   <!-- These are not directly generated from OOXML XML elements / attributes, need to clean them up in the future. -->
   <token tokenid="ooxml:tblDepth"/>
commit 2d4d306d414b4d598346130f90f1933e9fc84b6f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Thu Nov 3 23:05:25 2016 +0100

    tdf#103803 change from BGRA to RGBA color arrangement on Windows
    
    BGRA is native color arrangement on Windows however some intel
    drivers have problems with large textures if they read from a
    BGRA buffer. So with this commit we switch to RGBA color
    arrangement. This shouldn't cause much performance differences,
    but we need to convert from RGBA to BGRA when printing.
    
    + fix: wrong GL format for RGBA image buffers
    commit: ed42212f53b2e52238346e64dae31a931d6c90a1
    
    Reviewed-on: https://gerrit.libreoffice.org/30544
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 6b571ae4608ac15256eb7582f442ce69975370f3)
    
    Change-Id: Ic112dc6a6c5d8b70e96041d0de15a03bbbdc406f
    Reviewed-on: https://gerrit.libreoffice.org/30763
    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/opengl/salbmp.cxx b/vcl/opengl/salbmp.cxx
index ef081ee..f9b8005 100644
--- a/vcl/opengl/salbmp.cxx
+++ b/vcl/opengl/salbmp.cxx
@@ -55,27 +55,15 @@ inline bool determineTextureFormat(sal_uInt16 nBits, GLenum& nFormat, GLenum& nT
         nType = GL_UNSIGNED_BYTE;
         return true;
     case 16:
-#ifdef _WIN32
-        nFormat = GL_BGR;
-#else
         nFormat = GL_RGB;
-#endif
         nType = GL_UNSIGNED_SHORT_5_6_5;
         return true;
     case 24:
-#ifdef _WIN32
-        nFormat = GL_BGR;
-#else
         nFormat = GL_RGB;
-#endif
         nType = GL_UNSIGNED_BYTE;
         return true;
     case 32:
-#ifdef _WIN32
-        nFormat = GL_BGRA;
-#else
         nFormat = GL_RGBA;
-#endif
         nType = GL_UNSIGNED_BYTE;
         return true;
     default:
@@ -816,16 +804,6 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
             break;
         case 16:
         {
-#ifdef _WIN32
-            pBuffer->mnFormat = ScanlineFormat::N16BitTcLsbMask;
-            ColorMaskElement aRedMask(0x00007c00);
-            aRedMask.CalcMaskShift();
-            ColorMaskElement aGreenMask(0x000003e0);
-            aGreenMask.CalcMaskShift();
-            ColorMaskElement aBlueMask(0x0000001f);
-            aBlueMask.CalcMaskShift();
-            pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
-#else
             pBuffer->mnFormat = ScanlineFormat::N16BitTcMsbMask;
             ColorMaskElement aRedMask(0x0000f800);
             aRedMask.CalcMaskShift();
@@ -834,30 +812,15 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
             ColorMaskElement aBlueMask(0x0000001f);
             aBlueMask.CalcMaskShift();
             pBuffer->maColorMask  = ColorMask(aRedMask, aGreenMask, aBlueMask);
-#endif
             break;
         }
         case 24:
         {
-#ifdef _WIN32
-            pBuffer->mnFormat = ScanlineFormat::N24BitTcBgr;
-#else
             pBuffer->mnFormat = ScanlineFormat::N24BitTcRgb;
-#endif
             break;
         }
         case 32:
         {
-#ifdef _WIN32
-            pBuffer->mnFormat = ScanlineFormat::N32BitTcBgra;
-            ColorMaskElement aRedMask(0x00ff0000);
-            aRedMask.CalcMaskShift();
-            ColorMaskElement aGreenMask(0x0000ff00);
-            aGreenMask.CalcMaskShift();
-            ColorMaskElement aBlueMask(0x000000ff);
-            aBlueMask.CalcMaskShift();
-            pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
-#else
             pBuffer->mnFormat = ScanlineFormat::N32BitTcRgba;
             ColorMaskElement aRedMask(0xff000000);
             aRedMask.CalcMaskShift();
@@ -866,7 +829,6 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
             ColorMaskElement aBlueMask(0x0000ff00);
             aBlueMask.CalcMaskShift();
             pBuffer->maColorMask  = ColorMask(aRedMask, aGreenMask, aBlueMask);
-#endif
             break;
         }
     }
diff --git a/vcl/win/gdi/salgdi2.cxx b/vcl/win/gdi/salgdi2.cxx
index 8514e73..751b8c9 100644
--- a/vcl/win/gdi/salgdi2.cxx
+++ b/vcl/win/gdi/salgdi2.cxx
@@ -73,6 +73,45 @@ void WinSalGraphics::copyArea( long nDestX, long nDestY,
 namespace
 {
 
+class ColorScanlineConverter
+{
+public:
+    ScanlineFormat meSourceFormat;
+    ScanlineFormat meDestinationFormat;
+
+    int mnComponentSize;
+    int mnComponentExchangeIndex;
+
+    long mnScanlineSize;
+
+    ColorScanlineConverter(ScanlineFormat eSourceFormat, ScanlineFormat eDestinationFormat, int nComponentSize, long nScanlineSize)
+        : meSourceFormat(eSourceFormat)
+        , meDestinationFormat(eDestinationFormat)
+        , mnComponentSize(nComponentSize)
+        , mnComponentExchangeIndex(0)
+        , mnScanlineSize(nScanlineSize)
+    {
+        if (meSourceFormat == ScanlineFormat::N32BitTcAbgr ||
+            meSourceFormat == ScanlineFormat::N32BitTcArgb)
+        {
+            mnComponentExchangeIndex = 1;
+        }
+    }
+
+    void convertScanline(sal_uInt8* pSource, sal_uInt8* pDestination)
+    {
+        for (int x = 0; x < mnScanlineSize; x += mnComponentSize)
+        {
+            for (int i = 0; i < mnComponentSize; ++i)
+            {
+                pDestination[x + i] = pSource[x + i];
+            }
+            pDestination[x + mnComponentExchangeIndex + 0] = pSource[x + mnComponentExchangeIndex + 2];
+            pDestination[x + mnComponentExchangeIndex + 2] = pSource[x + mnComponentExchangeIndex + 0];
+        }
+    }
+};
+
 void convertToWinSalBitmap(SalBitmap& rSalBitmap, WinSalBitmap& rWinSalBitmap)
 {
          BitmapPalette aBitmapPalette;
@@ -90,11 +129,31 @@ void convertToWinSalBitmap(SalBitmap& rSalBitmap, WinSalBitmap& rWinSalBitmap)
         sal_uInt8* pSource(pRead->mpBits);
         sal_uInt8* pDestination(pWrite->mpBits);
 
-        for (long y = 0; y < pRead->mnHeight; y++)
+        std::unique_ptr<ColorScanlineConverter> pConverter;
+
+        if (pRead->mnFormat == ScanlineFormat::N24BitTcRgb)
+            pConverter.reset(new ColorScanlineConverter(ScanlineFormat::N24BitTcRgb, ScanlineFormat::N24BitTcBgr,
+                                                        3, pRead->mnScanlineSize));
+        else if (pRead->mnFormat == ScanlineFormat::N32BitTcRgba)
+            pConverter.reset(new ColorScanlineConverter(ScanlineFormat::N32BitTcRgba, ScanlineFormat::N32BitTcBgra,
+                                                        4, pRead->mnScanlineSize));
+        if (pConverter)
+        {
+            for (long y = 0; y < pRead->mnHeight; y++)
+            {
+                pConverter->convertScanline(pSource, pDestination);
+                pSource += pRead->mnScanlineSize;
+                pDestination += pWrite->mnScanlineSize;
+            }
+        }
+        else
         {
-            memcpy(pDestination, pSource, pRead->mnScanlineSize);
-            pSource += pRead->mnScanlineSize;
-            pDestination += pWrite->mnScanlineSize;
+            for (long y = 0; y < pRead->mnHeight; y++)
+            {
+                memcpy(pDestination, pSource, pRead->mnScanlineSize);
+                pSource += pRead->mnScanlineSize;
+                pDestination += pWrite->mnScanlineSize;
+            }
         }
         rWinSalBitmap.ReleaseBuffer(pWrite, BitmapAccessMode::Write);
 
commit 483b00e699125523b048279569a2f964a7296c3f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Thu Nov 3 23:11:18 2016 +0100

    tdf#103804 reduced register areaScale shader and detection for intel
    
    Some intel drivers crash when areaScale shader with "large" array
    is used. This adds a "reduced register" version of the areaScale
    shader. We still use the first version of the shader for other
    drivers and switch between the 2 implementations with a runtime
    detection.
    
    Change-Id: I1860f898c03b40a600eb1b41f7262719382a7171
    Reviewed-on: https://gerrit.libreoffice.org/30571
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit d115a235bf3ff5366d992d01fb418a3eacb9d125)
    Reviewed-on: https://gerrit.libreoffice.org/30764
    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/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
index 6863467..a7cc2d6 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -52,6 +52,15 @@ struct VCL_DLLPUBLIC GLWindow
     virtual ~GLWindow();
 };
 
+struct VCL_DLLPUBLIC OpenGLCapabilitySwitch
+{
+    bool mbLimitedShaderRegisters;
+
+    OpenGLCapabilitySwitch()
+        : mbLimitedShaderRegisters(false)
+    {}
+};
+
 class VCL_DLLPUBLIC OpenGLContext
 {
     friend class OpenGLTests;
@@ -94,6 +103,11 @@ public:
         return mpRenderState;
     }
 
+    OpenGLCapabilitySwitch& getOpenGLCapabilitySwitch()
+    {
+        return maOpenGLCapabilitySwitch;
+    }
+
     /// Is this GL context the current context ?
     virtual bool isCurrent();
     /// Is any GL context the current context ?
@@ -165,6 +179,8 @@ protected:
     OpenGLFramebuffer* mpFirstFramebuffer;
     OpenGLFramebuffer* mpLastFramebuffer;
 
+    OpenGLCapabilitySwitch maOpenGLCapabilitySwitch;
+
 private:
     struct ProgramHash
     {
diff --git a/vcl/opengl/areaScaleFragmentShader.glsl b/vcl/opengl/areaScaleFragmentShader.glsl
index c83c5e0..e161336 100644
--- a/vcl/opengl/areaScaleFragmentShader.glsl
+++ b/vcl/opengl/areaScaleFragmentShader.glsl
@@ -7,13 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#version 120
-#if __VERSION__ < 130
-int min( int a, int b ) { return a < b ? a : b; }
-float min( float a, float b ) { return a < b ? a : b; }
-#endif
-
-/* TODO Use textureOffset for newest version of GLSL */
+#version 130
 
 uniform sampler2D sampler;
 uniform int swidth;
@@ -34,23 +28,108 @@ varying vec2 mask_coord;
 uniform sampler2D mask;
 #endif
 
+vec4 getTexel(int x, int y)
+{
+    vec2 offset = vec2(x * xsrcconvert, y * ysrcconvert);
+    vec4 texel = texture2D(sampler, offset);
+#ifdef MASKED
+    texel.a = 1.0 - texture2D(mask, offset).r;
+#endif
+    return texel;
+}
+
+#ifdef USE_REDUCED_REGISTER_VARIANT
+
+void main(void)
+{
+    // Convert to pixel coordinates again.
+    int dx = int(tex_coord.s * xdestconvert);
+    int dy = int(tex_coord.t * ydestconvert);
+
+    // Compute the range of source pixels which will make up this destination pixel.
+    float fsx1 = min(dx * xscale,   float(swidth - 1));
+    float fsx2 = min(fsx1 + xscale, float(swidth - 1));
+
+    float fsy1 = min(dy * yscale,   float(sheight - 1));
+    float fsy2 = min(fsy1 + yscale, float(sheight - 1));
+
+    // To whole pixel coordinates.
+    int xstart = int(floor(fsx1));
+    int xend   = int(floor(fsx2));
+
+    int ystart = int(floor(fsy1));
+    int yend   = int(floor(fsy2));
+
+    float xlength = fsx2 - fsx1;
+    float ylength = fsy2 - fsy1;
+
+    float xContribution[3];
+    xContribution[0] = (1.0 - max(0.0, fsx1 - xstart))     / xlength;
+    xContribution[1] =  1.0 / xlength;
+    xContribution[2] = (1.0 - max(0.0, (xend + 1) - fsx2)) / xlength;
+
+    float yContribution[3];
+    yContribution[0] = (1.0 - max(0.0, fsy1 - ystart))     / ylength;
+    yContribution[1] =  1.0 / ylength;
+    yContribution[2] = (1.0 - max(0.0, (yend + 1) - fsy2)) / ylength;
+
+    vec4 sumAll = vec4(0.0, 0.0, 0.0, 0.0);
+    vec4 texel;
+    // First Y pass
+    {
+        vec4 sumX = vec4(0.0, 0.0, 0.0, 0.0);
+
+        sumX += getTexel(xstart, ystart) * xContribution[0];
+        for (int x = xstart + 1; x < xend; ++x)
+        {
+           sumX += getTexel(x, ystart) * xContribution[1];
+        }
+        sumX += getTexel(xend, ystart) * xContribution[2];
+
+        sumAll += sumX * yContribution[0];
+    }
+
+    // Middle Y Passes
+    for (int y = ystart + 1; y < yend; ++y)
+    {
+        vec4 sumX = vec4(0.0, 0.0, 0.0, 0.0);
+
+        sumX += getTexel(xstart, y) * xContribution[0];
+        for (int x = xstart + 1; x < xend; ++x)
+        {
+            sumX += getTexel(x, y) * xContribution[1];
+        }
+        sumX += getTexel(xend, y) * xContribution[2];
+
+        sumAll += sumX * yContribution[1];
+    }
+
+    // Last Y pass
+    {
+        vec4 sumX = vec4(0.0, 0.0, 0.0, 0.0);
+
+        sumX += getTexel(xstart, yend) * xContribution[0];
+        for (int x = xstart + 1; x < xend; ++x)
+        {
+            sumX += getTexel(x, yend) * xContribution[1];
+        }
+        sumX += getTexel(xend, yend) * xContribution[2];
+
+        sumAll += sumX * yContribution[2];
+    }
+
+    gl_FragColor = sumAll;
+}
+#else
 void main(void)
 {
     // Convert to pixel coordinates again.
     int dx = int( tex_coord.s * xdestconvert );
     int dy = int( tex_coord.t * ydestconvert );
 
-    // Note: These values are always the same for the same X (or Y),
-    // so they could be precalculated in C++ and passed to the shader,
-    // but GLSL has limits on the size of uniforms passed to it,
-    // so it'd need something like texture buffer objects from newer
-    // GLSL versions, and it seems the hassle is not really worth it.
-
-    // How much each column/row will contribute to the resulting pixel.
-    // assert( xscale <= 100 ); assert( yscale <= 100 );
     float xratio[ 16 + 2 ];
     float yratio[ 16 + 2 ];
-    // For finding the first and last source pixel.
+
     int xpixel[ 16 + 2 ];
     int ypixel[ 16 + 2 ];
 
@@ -147,5 +226,5 @@ void main(void)
 
     gl_FragColor = sum;
 }
-
+#endif
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 6c91013..34a8b51 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -1259,7 +1259,11 @@ bool scaleTexture(const rtl::Reference< OpenGLContext > &xContext,
     int nNewWidth = nWidth / ixscale;
     int nNewHeight = nHeight / iyscale;
 
-    OpenGLProgram* pProgram = xContext->UseProgram("textureVertexShader", "areaScaleFragmentShader");
+    OString sUseReducedRegisterVariantDefine;
+    if (xContext->getOpenGLCapabilitySwitch().mbLimitedShaderRegisters)
+        sUseReducedRegisterVariantDefine = OString("#define USE_REDUCED_REGISTER_VARIANT\n");
+
+    OpenGLProgram* pProgram = xContext->UseProgram("textureVertexShader", "areaScaleFragmentShader", sUseReducedRegisterVariantDefine);
     if (pProgram == nullptr)
         return false;
 
@@ -1324,6 +1328,11 @@ void OpenGLSalGraphicsImpl::DrawTransformedTexture(
     // See OpenGLSalBitmap::ImplScaleArea().
     bool areaScaling = false;
     bool fastAreaScaling = false;
+
+    OString sUseReducedRegisterVariantDefine;
+    if (mpContext->getOpenGLCapabilitySwitch().mbLimitedShaderRegisters)
+        sUseReducedRegisterVariantDefine = OString("#define USE_REDUCED_REGISTER_VARIANT\n");
+
     OUString textureFragmentShader;
     if( ixscale >= 2 && iyscale >= 2 )  // scale ratio less than 50%
     {
@@ -1388,7 +1397,7 @@ void OpenGLSalGraphicsImpl::DrawTransformedTexture(
     {
         if( !UseProgram( "transformedTextureVertexShader",
                 textureFragmentShader.isEmpty() ? "maskedTextureFragmentShader" : textureFragmentShader,
-                "#define MASKED" ) )
+                "#define MASKED\n" + sUseReducedRegisterVariantDefine))
             return;
         mpProgram->SetTexture( "mask", aInMask );
         GLfloat aMaskCoord[8];
@@ -1400,7 +1409,8 @@ void OpenGLSalGraphicsImpl::DrawTransformedTexture(
     else
     {
         if( !UseProgram( "transformedTextureVertexShader",
-                textureFragmentShader.isEmpty() ? "textureFragmentShader" : textureFragmentShader ) )
+                textureFragmentShader.isEmpty() ? "textureFragmentShader" : textureFragmentShader,
+                sUseReducedRegisterVariantDefine))
             return;
     }
 
diff --git a/vcl/opengl/scale.cxx b/vcl/opengl/scale.cxx
index 9feb933..3e2b9d4 100644
--- a/vcl/opengl/scale.cxx
+++ b/vcl/opengl/scale.cxx
@@ -231,8 +231,14 @@ bool OpenGLSalBitmap::ImplScaleArea( const rtl::Reference< OpenGLContext > &xCon
 
     // TODO Make sure the framebuffer is alright
 
+    OString sUseReducedRegisterVariantDefine;
+    if (xContext->getOpenGLCapabilitySwitch().mbLimitedShaderRegisters)
+        sUseReducedRegisterVariantDefine = OString("#define USE_REDUCED_REGISTER_VARIANT\n");
+
     OpenGLProgram* pProgram = xContext->UseProgram( "textureVertexShader",
-        fast ? OUString( "areaScaleFastFragmentShader" ) : OUString( "areaScaleFragmentShader" ));
+        fast ? OUString( "areaScaleFastFragmentShader" ) : OUString( "areaScaleFragmentShader" ),
+        sUseReducedRegisterVariantDefine);
+
     if( pProgram == nullptr )
         return false;
 
@@ -281,7 +287,7 @@ bool OpenGLSalBitmap::ImplScaleArea( const rtl::Reference< OpenGLContext > &xCon
         ixscale = 1 / rScaleX;
         iyscale = 1 / rScaleY;
 
-        pProgram = xContext->UseProgram("textureVertexShader", "areaScaleFragmentShader");
+        pProgram = xContext->UseProgram("textureVertexShader", "areaScaleFragmentShader", sUseReducedRegisterVariantDefine);
         if (pProgram == nullptr)
             return false;
 
diff --git a/vcl/opengl/win/gdiimpl.cxx b/vcl/opengl/win/gdiimpl.cxx
index 310eb14..8d1fbea 100644
--- a/vcl/opengl/win/gdiimpl.cxx
+++ b/vcl/opengl/win/gdiimpl.cxx
@@ -633,6 +633,11 @@ bool WinOpenGLContext::ImplInit()
 
     bFirstCall = false;
 
+    static OString aVendor(reinterpret_cast<const char*>(glGetString(GL_VENDOR)));
+
+    if (aVendor.equalsIgnoreAsciiCase("intel"))
+        maOpenGLCapabilitySwitch.mbLimitedShaderRegisters = true;
+
     return true;
 }
 
commit f362b060454e4f068683b49b43a90ea82aa92c6e
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Oct 19 23:04:34 2016 +0200

    Resolves: tdf#97968 adjust references during Cut&Paste of formula groups
    
    ... and split groups for cases where references point outside or into the moved
    range.
    
    Change-Id: Iab799e94eed1677f266413b6304651ac4d330e95
    (cherry picked from commit dfa92e106f7eaa8c3fc6cda034001197ecc53a8f)
    Reviewed-on: https://gerrit.libreoffice.org/30067
    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/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index bb1f564..ed04ccd 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -2072,6 +2072,7 @@ class UpdateRefOnNonCopy : public std::unary_function<sc::FormulaGroupEntry, voi
     const sc::RefUpdateContext* mpCxt;
     ScDocument* mpUndoDoc;
     bool mbUpdated;
+    bool mbClipboardSource;
 
     void recompileTokenArray( ScFormulaCell& rTopCell )
     {
@@ -2176,8 +2177,11 @@ class UpdateRefOnNonCopy : public std::unary_function<sc::FormulaGroupEntry, voi
         ScAddress aPos = pTop->aPos;
         ScAddress aOldPos = aPos;
 
+        bool bCellMoved;
         if (mpCxt->maRange.In(aPos))
         {
+            bCellMoved = true;
+
             // The cell is being moved or copied to a new position. The
             // position has already been updated prior to this call.
             // Determine its original position before the move which will be
@@ -2188,6 +2192,10 @@ class UpdateRefOnNonCopy : public std::unary_function<sc::FormulaGroupEntry, voi
                 aPos.Row() - mpCxt->mnRowDelta,
                 aPos.Tab() - mpCxt->mnTabDelta);
         }
+        else
+        {
+            bCellMoved = false;
+        }
 
         bool bRecalcOnMove = pCode->IsRecalcModeOnRefMove();
         if (bRecalcOnMove)
@@ -2224,7 +2232,10 @@ class UpdateRefOnNonCopy : public std::unary_function<sc::FormulaGroupEntry, voi
                 p->SetDirty();
             }
 
-            fillUndoDoc(aOldPos, rGroup.mnLength, *pOldCode);
+            // Move from clipboard is Cut&Paste, then do not copy the original
+            // positions' formula cells to the Undo document.
+            if (!mbClipboardSource || !bCellMoved)
+                fillUndoDoc(aOldPos, rGroup.mnLength, *pOldCode);
         }
     }
 
@@ -2264,7 +2275,8 @@ public:
         SCCOL nCol, SCTAB nTab, const sc::RefUpdateContext* pCxt,
         ScDocument* pUndoDoc) :
         mnCol(nCol), mnTab(nTab), mpCxt(pCxt),
-        mpUndoDoc(pUndoDoc), mbUpdated(false) {}
+        mpUndoDoc(pUndoDoc), mbUpdated(false),
+        mbClipboardSource(pCxt->mrDoc.IsClipboardSource()){}
 
     void operator() ( sc::FormulaGroupEntry& rGroup )
     {
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index f17e8eb..28fdcad 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -4476,6 +4476,9 @@ void checkBounds(
         {
             assert(!"can't move");
         }
+
+        // Check bounds also against the range moved into.
+        pDeletedRange = &rCxt.maRange;
     }
     else if (rCxt.meMode == URM_INSDEL &&
             ((rCxt.mnColDelta < 0 && rCxt.maRange.aStart.Col() > 0) ||
commit 3498a66f723dd2b57897a21a1a65c66a03688f15
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 10 16:10:07 2016 +0000

    Resolves: tdf#103809 the argument is a bool* not a VclPtr
    
    (cherry picked from commit 8445764681bfe7bd6cd31194878e1314a8fafa3b)
    
    Change-Id: Ia07f4ff7b243708304186c840135ec1180621fa5
    Reviewed-on: https://gerrit.libreoffice.org/30760
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/sw/source/uibase/utlui/navipi.cxx b/sw/source/uibase/utlui/navipi.cxx
index 2a62187..365653e 100644
--- a/sw/source/uibase/utlui/navipi.cxx
+++ b/sw/source/uibase/utlui/navipi.cxx
@@ -230,7 +230,7 @@ IMPL_LINK_TYPED( SwNavigationPI, ToolBoxSelectHdl, ToolBox *, pBox, void )
         {
             // #i75416# move the execution of the search to an asynchronously called static link
             bool* pbNext = new bool( FN_DOWN == nCurrItemId );
-            Application::PostUserEvent( LINK(pView, SwView, MoveNavigationHdl), pbNext, true );
+            Application::PostUserEvent( LINK(pView, SwView, MoveNavigationHdl), pbNext );
         }
         break;
         case FN_SHOW_ROOT:
commit 688612e06d0c38fd6ce90fef466d5a4faefddc01
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Nov 7 17:06:54 2016 +0000

    google docs can generate a pptx with an empty cmLst
    
    Change-Id: I2a3dcae5361929c6880b2da1b3107cb2c8141f32
    (cherry picked from commit e6157763e9fff300b86f3c17398216f306ba3f32)
    Reviewed-on: https://gerrit.libreoffice.org/30672
    Reviewed-by: David Tardon <dtardon at redhat.com>
    Tested-by: David Tardon <dtardon at redhat.com>

diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx
index 944f134..b67eb8b 100644
--- a/oox/source/ppt/presentationfragmenthandler.cxx
+++ b/oox/source/ppt/presentationfragmenthandler.cxx
@@ -325,15 +325,18 @@ void PresentationFragmentHandler::importSlide(sal_uInt32 nSlide, bool bFirstPage
                 pCommentsPersistPtr->getCommentsList().cmLst.clear();
                 importSlide( xCommentsFragmentHandler, pCommentsPersistPtr );
 
-                //set comment chars for last comment on slide
-                SlideFragmentHandler* comment_handler =
-                    dynamic_cast<SlideFragmentHandler*>(xCommentsFragmentHandler.get());
-                // some comments have no text -> set empty string as text to avoid
-                // crash (back() on empty vector is undefined) and losing other
-                // comment data that might be there (author, position, timestamp etc.)
-                pCommentsPersistPtr->getCommentsList().cmLst.back().setText(
-                        comment_handler->getCharVector().empty() ? "" :
-                        comment_handler->getCharVector().back() );
+                if (!pCommentsPersistPtr->getCommentsList().cmLst.empty())
+                {
+                    //set comment chars for last comment on slide
+                    SlideFragmentHandler* comment_handler =
+                        dynamic_cast<SlideFragmentHandler*>(xCommentsFragmentHandler.get());
+                    // some comments have no text -> set empty string as text to avoid
+                    // crash (back() on empty vector is undefined) and losing other
+                    // comment data that might be there (author, position, timestamp etc.)
+                    pCommentsPersistPtr->getCommentsList().cmLst.back().setText(
+                            comment_handler->getCharVector().empty() ? "" :
+                            comment_handler->getCharVector().back() );
+                }
                 pCommentsPersistPtr->getCommentAuthors().setValues(maAuthorList);
 
                 //insert all comments from commentsList
commit b09054de8fe149f1eb39a0589053b28e52aea7b5
Author: David Tardon <dtardon at redhat.com>
Date:   Sat Nov 5 16:38:14 2016 +0100

    remove OpenGL transitions config. file from scheme
    
    The OpenGL transitions are optional, so the respective config. file
    should only be listed in the ogltrans module.
    
    This reverts commit dafcb2844bda4af2bc290548548392bda3262307.
    
    Change-Id: Ie785db07d04a0baf3dc9fd385f1d8a34837dc38b
    (cherry picked from commit f316f413f589989013bf161170087e77a82db2d3)
    Reviewed-on: https://gerrit.libreoffice.org/30611
    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/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
index 2ba88b4..0354165 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
@@ -452,7 +452,7 @@
           </desc>
           <label>List of files containing transition effects</label>
         </info>
-        <value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/config/soffice.cfg/simpress/transitions.xml;vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/config/soffice.cfg/simpress/transitions-ogl.xml</value>
+        <value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/config/soffice.cfg/simpress/transitions.xml</value>
       </prop>
       <prop oor:name="EffectFiles" oor:type="oor:string-list" oor:nillable="false">
         <!-- OldPath: -->
commit 17dbf686cd6f77cb07b7b810f12b3942f2776f1c
Author: Justin Luth <justin_luth at sil.org>
Date:   Sat Nov 5 11:11:29 2016 +0300

    tdf#90070 don't clip flys with borders
    
    regression from commit e598ab04476a32a08f18e8f0662fafa5f78f1a4a
    very aggressively forced a new frame size via compat setting
    CLIPPED_PICTURES on any fly - not just images.
    
    This only affects MS-format documents, EXCEPT that it is a document
    property, so if the file every spent any part of it's life in MS-format,
    it will always retain that compatibility setting. That explains
    why the problem was intermittent for me - and was hard to reproduce
    in a clean document, even though I'd seen it in .ODTs.
    
    bIgnoreLine (ignore the fact that there is no visible line)
    was a confusing word choice for "if there is no line,
    then return a spacing size of zero". bEvenIfNoLine=false is better.
    
    Change-Id: I50a3bdef3a67339ae517ee6319920651bc56f9be
    Reviewed-on: https://gerrit.libreoffice.org/30585
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>
    (cherry picked from commit d034f273cb24ebe4fde20ad9089ac11cccf316d0)
    Reviewed-on: https://gerrit.libreoffice.org/30595

diff --git a/editeng/source/items/frmitems.cxx b/editeng/source/items/frmitems.cxx
index 00a41e2..5c9c0ea 100644
--- a/editeng/source/items/frmitems.cxx
+++ b/editeng/source/items/frmitems.cxx
@@ -2390,7 +2390,7 @@ void SvxBoxItem::SetDistance( sal_uInt16 nNew, SvxBoxItemLine nLine )
 }
 
 
-sal_uInt16 SvxBoxItem::CalcLineSpace( SvxBoxItemLine nLine, bool bIgnoreLine ) const
+sal_uInt16 SvxBoxItem::CalcLineSpace( SvxBoxItemLine nLine, bool bEvenIfNoLine ) const
 {
     SvxBorderLine* pTmp = nullptr;
     sal_uInt16 nDist = 0;
@@ -2420,11 +2420,19 @@ sal_uInt16 SvxBoxItem::CalcLineSpace( SvxBoxItemLine nLine, bool bIgnoreLine ) c
     {
         nDist = nDist + pTmp->GetScaledWidth();
     }
-    else if( !bIgnoreLine )
+    else if( !bEvenIfNoLine )
         nDist = 0;
     return nDist;
 }
 
+bool SvxBoxItem::HasBorder( bool bTreatPaddingAsBorder ) const
+{
+    return  CalcLineSpace( SvxBoxItemLine::BOTTOM,   bTreatPaddingAsBorder )
+            || CalcLineSpace( SvxBoxItemLine::RIGHT, bTreatPaddingAsBorder )
+            || CalcLineSpace( SvxBoxItemLine::TOP,   bTreatPaddingAsBorder )
+            || CalcLineSpace( SvxBoxItemLine::LEFT,  bTreatPaddingAsBorder );
+}
+
 // class SvxBoxInfoItem --------------------------------------------------
 
 SvxBoxInfoItem::SvxBoxInfoItem( const sal_uInt16 nId ) :
diff --git a/include/editeng/boxitem.hxx b/include/editeng/boxitem.hxx
index 58ccb21..2fa7ef0 100644
--- a/include/editeng/boxitem.hxx
+++ b/include/editeng/boxitem.hxx
@@ -109,8 +109,9 @@ public:
     void SetRemoveAdjacentCellBorder( bool bSet = true ) { bRemoveAdjCellBorder = bSet; }
 
     // Line width plus Space plus inward distance
-    // bIgnoreLine = TRUE -> Also return distance, when no Line is set
-    sal_uInt16  CalcLineSpace( SvxBoxItemLine nLine, bool bIgnoreLine = false ) const;
+    // bEvenIfNoLine = TRUE -> Also return distance, when no Line is set
+    sal_uInt16  CalcLineSpace( SvxBoxItemLine nLine, bool bEvenIfNoLine = false ) const;
+    bool HasBorder( bool bTreatPaddingAsBorder = false ) const;
     static css::table::BorderLine2 SvxLineToLine( const editeng::SvxBorderLine* pLine, bool bConvert );
     static bool LineToSvxLine(const css::table::BorderLine& rLine, editeng::SvxBorderLine& rSvxLine, bool bConvert);
     static bool LineToSvxLine(const css::table::BorderLine2& rLine, editeng::SvxBorderLine& rSvxLine, bool bConvert);
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx
index d391bfa..8578e45 100644
--- a/sw/source/core/doc/notxtfrm.cxx
+++ b/sw/source/core/doc/notxtfrm.cxx
@@ -277,11 +277,23 @@ void SwNoTextFrame::Paint(vcl::RenderContext& rRenderContext, SwRect const& rRec
 
     // In case the picture fly frm was clipped, render it with the origin
     // size instead of scaling it
-    if ( rNoTNd.getIDocumentSettingAccess()->get( DocumentSettingId::CLIPPED_PICTURES ) )
+    if ( pGrfNd && rNoTNd.getIDocumentSettingAccess()->get( DocumentSettingId::CLIPPED_PICTURES ) )
     {
         const SwFlyFreeFrame *pFly = dynamic_cast< const SwFlyFreeFrame* >( FindFlyFrame() );
         if( pFly )
-            aGrfArea = SwRect( Frame().Pos( ), pFly->GetUnclippedFrame( ).SSize( ) );
+        {
+            bool bGetUnclippedFrame=true;
+            const SfxPoolItem* pItem;
+            if( pFly->GetFormat() && SfxItemState::SET == pFly->GetFormat()->GetItemState(RES_BOX, false, &pItem) )
+            {
+                const SvxBoxItem& rBox = *static_cast<const SvxBoxItem*>(pItem);
+                if( rBox.HasBorder( /*bTreatPaddingAsBorder*/true) )
+                    bGetUnclippedFrame = false;
+            }
+
+            if( bGetUnclippedFrame )
+                aGrfArea = SwRect( Frame().Pos( ), pFly->GetUnclippedFrame( ).SSize( ) );
+        }
     }
 
     aPaintArea.Intersection_( aOrigPaint );
commit b6354501a0b7689ea4e12f8c616a362f66af0988
Author: Justin Luth <justin_luth at sil.org>
Date:   Wed Oct 26 19:59:32 2016 +0300

    tdf#62625 - reopen temp stream to readBasic .xls VBA
    
    InputStream was closed, but an InStream was still open,
    so InputStream was not being re-created.
    Apparently either most web protocols aren't properly closed,
    or else a second stream is needed for these kinds of protocols.
    
    Required on Linux for INetProtocol::Http, Generic, Smb, Sftp
    and perhaps more.  Required on Windows/Mac for Remote WebDAV
    (although http://xx/xx.xls worked)
    
    Change-Id: Icb732518fb8185168c5ed1cb9e32c84c9d8d71bb
    Reviewed-on: https://gerrit.libreoffice.org/30303
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    (cherry picked from commit d9c7b0a01162254240a1328fa594991eccf6bc65)
    Reviewed-on: https://gerrit.libreoffice.org/30662
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index f681bbf..a792860 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -2368,7 +2368,8 @@ void SfxMedium::GetLockingStream_Impl()
 
 void SfxMedium::GetMedium_Impl()
 {
-    if ( !pImpl->m_pInStream )
+    if ( !pImpl->m_pInStream
+        || (pImpl->bIsTemp && !pImpl->xInputStream.is() && !pImpl->m_xInputStreamToLoadFrom.is() && !pImpl->xStream.is() && !pImpl->m_xLockingStream.is() ) )
     {
         pImpl->bDownloadDone = false;
         Reference< css::task::XInteractionHandler > xInteractionHandler = GetInteractionHandler();
commit 37e3b2fcdccc068622d3c5bdc59edec6f8daa733
Author: David Tardon <dtardon at redhat.com>
Date:   Sun Nov 6 14:00:50 2016 +0100

    tdf#103696 ensure glm always uses radians
    
    This is set just locally for OGLTrans, because I have no idea what the
    other places that use glm expect...
    
    Change-Id: I83675ef2463ab945cb3d6885f803dcbae60a5558
    (cherry picked from commit afe235a0abf9ef91a353a4d0dccf56961abd2fbf)
    Reviewed-on: https://gerrit.libreoffice.org/30610
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/slideshow/Library_OGLTrans.mk b/slideshow/Library_OGLTrans.mk
index db1c788..032a88c 100644
--- a/slideshow/Library_OGLTrans.mk
+++ b/slideshow/Library_OGLTrans.mk
@@ -15,6 +15,10 @@ $(eval $(call gb_Library_add_defs,OGLTrans,\
 ))
 endif
 
+$(eval $(call gb_Library_add_defs,OGLTrans,\
+    -DGLM_FORCE_RADIANS \
+))
+
 $(eval $(call gb_Library_use_sdk_api,OGLTrans))
 
 $(eval $(call gb_Library_use_libraries,OGLTrans,\
commit e605851978056000e9492246020fb755fb0cbccf
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Oct 18 19:30:24 2016 +0200

    Resolves: tdf#101583 references to be expanded must be at least 2 cols/rows
    
    ... wide/tall also in named expressions.
    
    Change-Id: If0c192def74812cc9405ae633b6f83f7021344d0
    (cherry picked from commit 6b9804b8f2ca85e9eb42d344d17cfee7a7a9414c)
    Reviewed-on: https://gerrit.libreoffice.org/30023
    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/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index a0eb39b..f17e8eb 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -3538,28 +3538,36 @@ bool adjustDoubleRefInName(
     {
         if (rCxt.mnRowDelta > 0 && !rRef.Ref1.IsRowRel() && !rRef.Ref2.IsRowRel())
         {
-            // Check and see if we should expand the range at the top.
-            ScRange aSelectedRange = getSelectedRange(rCxt);
             ScRange aAbs = rRef.toAbs(rPos);
-            if (aSelectedRange.Intersects(aAbs))
+            // Expand only if at least two rows tall.
+            if (aAbs.aStart.Row() < aAbs.aEnd.Row())
             {
-                // Selection intersects the referenced range. Only expand the
-                // bottom position.
-                rRef.IncEndRowSticky(rCxt.mnRowDelta, rPos);
-                return true;
+                // Check and see if we should expand the range at the top.
+                ScRange aSelectedRange = getSelectedRange(rCxt);
+                if (aSelectedRange.Intersects(aAbs))
+                {
+                    // Selection intersects the referenced range. Only expand the
+                    // bottom position.
+                    rRef.IncEndRowSticky(rCxt.mnRowDelta, rPos);
+                    return true;
+                }
             }
         }
         if (rCxt.mnColDelta > 0 && !rRef.Ref1.IsColRel() && !rRef.Ref2.IsColRel())
         {
-            // Check and see if we should expand the range at the left.
-            ScRange aSelectedRange = getSelectedRange(rCxt);
             ScRange aAbs = rRef.toAbs(rPos);
-            if (aSelectedRange.Intersects(aAbs))
+            // Expand only if at least two columns wide.
+            if (aAbs.aStart.Col() < aAbs.aEnd.Col())
             {
-                // Selection intersects the referenced range. Only expand the
-                // right position.
-                rRef.IncEndColSticky(rCxt.mnColDelta, rPos);
-                return true;
+                // Check and see if we should expand the range at the left.
+                ScRange aSelectedRange = getSelectedRange(rCxt);
+                if (aSelectedRange.Intersects(aAbs))
+                {
+                    // Selection intersects the referenced range. Only expand the
+                    // right position.
+                    rRef.IncEndColSticky(rCxt.mnColDelta, rPos);
+                    return true;
+                }
             }
         }
     }
@@ -3783,8 +3791,11 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
                         {
                             // Check if we could expand range reference by the bottom
                             // edge. For named expressions, we only expand absolute
-                            // references.
-                            if (!rRef.Ref1.IsRowRel() && !rRef.Ref2.IsRowRel() && aAbs.aEnd.Row()+1 == rCxt.maRange.aStart.Row())
+                            // references. Reference must be at least two rows
+                            // tall.
+                            if (!rRef.Ref1.IsRowRel() && !rRef.Ref2.IsRowRel() &&
+                                    aAbs.aStart.Row() < aAbs.aEnd.Row() &&
+                                    aAbs.aEnd.Row()+1 == rCxt.maRange.aStart.Row())
                             {
                                 // Expand by the bottom edge.
                                 rRef.Ref2.IncRow(rCxt.mnRowDelta);
@@ -3795,8 +3806,11 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
                         {
                             // Check if we could expand range reference by the right
                             // edge. For named expressions, we only expand absolute
-                            // references.
-                            if (!rRef.Ref1.IsColRel() && !rRef.Ref2.IsColRel() && aAbs.aEnd.Col()+1 == rCxt.maRange.aStart.Col())

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list