[Libreoffice-commits] core.git: Branch 'distro/cib/libreoffice-6-2' - 69 commits - configure.ac connectivity/registry cui/source cui/uiconfig download.lst editeng/source external/python3 fpicker/source i18npool/source include/editeng include/svl include/svx include/vcl jvmfwk/distributions jvmfwk/inc jvmfwk/plugins jvmfwk/source pyuno/source sc/inc sc/qa sc/source sc/uiconfig sd/source sd/uiconfig sfx2/source shell/source solenv/clang-format starmath/inc starmath/source svl/source svx/source sw/qa sw/source sw/uiconfig toolkit/source translations vcl/CppunitTest_vcl_gen.mk vcl/headless vcl/inc vcl/opengl vcl/qa vcl/qt5 vcl/source vcl/unx vcl/win writerfilter/source xmlsecurity/inc xmlsecurity/qa xmlsecurity/source

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Fri Apr 12 07:05:09 UTC 2019


 configure.ac                                                                  |    4 
 connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu |   15 
 connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu     |    5 
 cui/source/inc/paragrph.hxx                                                   |   30 
 cui/source/tabpages/border.cxx                                                |   12 
 cui/source/tabpages/paragrph.cxx                                              |  104 +
 cui/uiconfig/ui/colorpage.ui                                                  |    1 
 cui/uiconfig/ui/textflowpage.ui                                               |    3 
 download.lst                                                                  |    8 
 editeng/source/misc/svxacorr.cxx                                              |   23 
 external/python3/UnpackedTarball_python3.mk                                   |    1 
 external/python3/python-3.5.7-c99.patch.1                                     |   62 
 fpicker/source/win32/asyncrequests.cxx                                        |   10 
 i18npool/source/calendar/calendar_gregorian.cxx                               |    2 
 i18npool/source/collator/data/hu_charset.txt                                  |    6 
 i18npool/source/localedata/data/ja_JP.xml                                     |    8 
 i18npool/source/localedata/data/kmr_Latn_TR.xml                               |   13 
 include/editeng/svxacorr.hxx                                                  |    2 
 include/svl/sigstruct.hxx                                                     |    5 
 include/svx/hexcolorcontrol.hxx                                               |    7 
 include/vcl/svimpbox.hxx                                                      |    2 
 include/vcl/viewdataentry.hxx                                                 |    7 
 include/vcl/winscheduler.hxx                                                  |    5 
 jvmfwk/distributions/OpenOfficeorg/javavendors_linux.xml                      |    2 
 jvmfwk/distributions/OpenOfficeorg/javavendors_macosx.xml                     |    2 
 jvmfwk/distributions/OpenOfficeorg/javavendors_wnt.xml                        |    2 
 jvmfwk/inc/fwkbase.hxx                                                        |   11 
 jvmfwk/inc/libxmlutil.hxx                                                     |    4 
 jvmfwk/inc/vendorplugin.hxx                                                   |   94 -
 jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx                           |  109 -
 jvmfwk/plugins/sunmajor/pluginlib/util.cxx                                    |    7 
 jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx                              |   18 
 jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx                              |    5 
 jvmfwk/source/elements.cxx                                                    |    4 
 jvmfwk/source/framework.cxx                                                   |  273 +--
 jvmfwk/source/fwkbase.cxx                                                     |   18 
 jvmfwk/source/libxmlutil.cxx                                                  |    2 
 pyuno/source/loader/pythonloader.py                                           |    2 
 sc/inc/column.hxx                                                             |   28 
 sc/inc/global.hxx                                                             |    2 
 sc/inc/sharedformula.hxx                                                      |   13 
 sc/qa/unit/ucalc.hxx                                                          |    6 
 sc/qa/unit/ucalc_sharedformula.cxx                                            |  730 ++++++++++
 sc/source/core/data/column.cxx                                                |    4 
 sc/source/core/data/column3.cxx                                               |  362 ++++
 sc/source/core/data/column4.cxx                                               |   11 
 sc/source/core/data/global.cxx                                                |    5 
 sc/source/core/data/simpleformulacalc.cxx                                     |   10 
 sc/source/core/data/table2.cxx                                                |    2 
 sc/source/core/tool/interpr1.cxx                                              |   23 
 sc/source/core/tool/sharedformula.cxx                                         |   46 
 sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx                   |    3 
 sc/source/ui/undo/undoblk.cxx                                                 |   32 
 sc/source/ui/unoobj/shapeuno.cxx                                              |   14 
 sc/source/ui/view/notemark.cxx                                                |   17 
 sc/uiconfig/scalc/ui/notebookbar.ui                                           |    8 
 sc/uiconfig/scalc/ui/notebookbar_compact.ui                                   |   16 
 sc/uiconfig/scalc/ui/notebookbar_groupedbar_compact.ui                        |    8 
 sc/uiconfig/scalc/ui/notebookbar_groupedbar_full.ui                           |   24 
 sd/source/ui/slideshow/slideshowimpl.cxx                                      |    8 
 sd/uiconfig/sdraw/ui/notebookbar.ui                                           |    8 
 sd/uiconfig/sdraw/ui/notebookbar_groupedbar_compact.ui                        |    8 
 sd/uiconfig/simpress/ui/notebookbar.ui                                        |    8 
 sd/uiconfig/simpress/ui/notebookbar_groupedbar_compact.ui                     |    8 
 sd/uiconfig/simpress/ui/notebookbar_groupedbar_full.ui                        |   24 
 sfx2/source/appl/workwin.cxx                                                  |    5 
 sfx2/source/dialog/dinfdlg.cxx                                                |   10 
 shell/source/unix/exec/shellexec.cxx                                          |   37 
 shell/source/win32/SysShExec.cxx                                              |  114 +
 solenv/clang-format/blacklist                                                 |    4 
 starmath/inc/dialog.hxx                                                       |    8 
 starmath/source/dialog.cxx                                                    |    9 
 svl/source/numbers/zformat.cxx                                                |    2 
 svx/source/dialog/hexcolorcontrol.cxx                                         |   29 
 svx/source/svdraw/svdundo.cxx                                                 |    8 
 sw/qa/extras/ooxmlexport/data/tdf121456.docx                                  |binary
 sw/qa/extras/ooxmlexport/data/tdf123054.docx                                  |binary
 sw/qa/extras/ooxmlexport/data/tdf124384.docx                                  |binary
 sw/qa/extras/ooxmlexport/ooxmlexport10.cxx                                    |    2 
 sw/qa/extras/ooxmlexport/ooxmlexport11.cxx                                    |   23 
 sw/qa/extras/ooxmlexport/ooxmlexport4.cxx                                     |   11 
 sw/qa/extras/uiwriter/data2/tdf122942.odt                                     |binary
 sw/qa/extras/uiwriter/uiwriter.cxx                                            |   21 
 sw/qa/extras/uiwriter/uiwriter2.cxx                                           |   34 
 sw/source/core/doc/DocumentRedlineManager.cxx                                 |   61 
 sw/source/core/doc/notxtfrm.cxx                                               |   29 
 sw/source/core/frmedt/feshview.cxx                                            |   23 
 sw/source/core/inc/wrong.hxx                                                  |    3 
 sw/source/core/text/inftxt.cxx                                                |    2 
 sw/source/core/txtnode/ndtxt.cxx                                              |   10 
 sw/source/core/unocore/unostyle.cxx                                           |    3 
 sw/source/filter/ww8/docxattributeoutput.cxx                                  |  228 +--
 sw/source/ui/index/cnttab.cxx                                                 |    2 
 sw/source/uibase/inc/wrtsh.hxx                                                |    2 
 sw/source/uibase/uiview/view2.cxx                                             |    2 
 sw/source/uibase/uno/unotxdoc.cxx                                             |   22 
 sw/source/uibase/wrtsh/move.cxx                                               |    3 
 sw/uiconfig/swriter/ui/notebookbar.ui                                         |    8 
 sw/uiconfig/swriter/ui/notebookbar_compact.ui                                 |    8 
 sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui                      |    8 
 sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui                         |   16 
 toolkit/source/controls/controlmodelcontainerbase.cxx                         |    9 
 toolkit/source/controls/tabpagemodel.cxx                                      |    5 
 translations                                                                  |    2 
 vcl/CppunitTest_vcl_gen.mk                                                    |    1 
 vcl/headless/svpgdi.cxx                                                       |   40 
 vcl/headless/svpvd.cxx                                                        |    8 
 vcl/inc/headless/svpgdi.hxx                                                   |    3 
 vcl/inc/qt5/Qt5Instance.hxx                                                   |    2 
 vcl/inc/win/salframe.h                                                        |    1 
 vcl/opengl/gdiimpl.cxx                                                        |   19 
 vcl/qa/cppunit/gen/gen.cxx                                                    |   36 
 vcl/qa/cppunit/pdfexport/data/tdf121615.odt                                   |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx                                        |   58 
 vcl/qt5/Qt5Data.cxx                                                           |   13 
 vcl/qt5/Qt5Frame.cxx                                                          |    4 
 vcl/qt5/Qt5Graphics_GDI.cxx                                                   |    4 
 vcl/qt5/Qt5Instance.cxx                                                       |   14 
 vcl/source/app/salvtables.cxx                                                 |    7 
 vcl/source/app/winscheduler.cxx                                               |   12 
 vcl/source/control/edit.cxx                                                   |   14 
 vcl/source/edit/textundo.cxx                                                  |   11 
 vcl/source/filter/jpeg/JpegWriter.cxx                                         |    5 
 vcl/source/gdi/bitmapex.cxx                                                   |    2 
 vcl/source/treelist/svimpbox.cxx                                              |   25 
 vcl/source/treelist/treelistbox.cxx                                           |   12 
 vcl/source/treelist/viewdataentry.cxx                                         |    2 
 vcl/source/window/dialog.cxx                                                  |    4 
 vcl/unx/gtk3/gtk3gtkframe.cxx                                                 |    8 
 vcl/unx/gtk3/gtk3gtkinst.cxx                                                  |   15 
 vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx                                  |    6 
 vcl/unx/kde5/KDE5SalGraphics.cxx                                              |    4 
 vcl/unx/kde5/KDE5SalInstance.cxx                                              |    2 
 vcl/win/window/salframe.cxx                                                   |   18 
 writerfilter/source/dmapper/DomainMapper_Impl.cxx                             |    5 
 xmlsecurity/inc/xsecctl.hxx                                                   |    7 
 xmlsecurity/qa/unit/signing/data/notype-xades.odt                             |binary
 xmlsecurity/qa/unit/signing/signing.cxx                                       |   61 
 xmlsecurity/source/helper/ooxmlsecparser.cxx                                  |    2 
 xmlsecurity/source/helper/xsecctl.cxx                                         |    4 
 xmlsecurity/source/helper/xsecparser.cxx                                      |    4 
 xmlsecurity/source/helper/xsecsign.cxx                                        |   17 
 xmlsecurity/source/helper/xsecverify.cxx                                      |    6 
 143 files changed, 2573 insertions(+), 962 deletions(-)

New commits:
commit feca4bf320ae33dd1926f3a1afdc77c3b4f7b2a4
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Tue Apr 9 14:51:54 2019 +0200
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Apr 11 18:02:30 2019 +0200

    tdf#124503: Support JRE installations with unknown java.vendor property
    
    After recent additions of 61c4f96d6ae6a80370774e53287edb27cbce8067 "Support
    AdoptOpenJDK" and 41507db590b24e1b9b45d95cad55c71ba2e4091d "Support Amazon
    Corretto" to our hard-coded list, there is now reports that at least Debian and
    Ubuntu tried to distribute versions of OpenJDK with the java.vendor propety set
    to string like "Debian" or "Ubuntu".  Instead of trying to catch up with an
    ever-growing hard-coded list, it is probably better to stop relying exclusively
    on such a hard-coded list, and for unknown vendor values, try out whether the
    SunInfo backend (which supports the "generic" OpenJDK) would be able to handle
    the given JRE.  (For simplicity, assume that any versions of such JREs are
    supported.  Our baseline is Java 6, and there are unlikely any older versions of
    JREs from unknown vendors out there.  If this turns out to be problematic, we
    could include information about problematic vendors after all, or add a general
    check that JREs from unknown vendors are at least Java 6.)
    
    Many functions in jvmfwk/inc/vendorplugin.hxx that used to take a set of
    sVendor/sMinVersion/sMaxVerison/arExcludeList paramters had to be revised to
    take a vendorSettings parameter instead, and
    VendorSettings::getVersionInformation has been changed to return a
    boost::optional, so that unknown vendors can be handled gracefully.
    
    Change-Id: Ibf915f2ddd59e09b77e2c03be688cac0547b9ac9
    Reviewed-on: https://gerrit.libreoffice.org/70460
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    (cherry picked from commit 3d27b2fa9c5a03f78e5145377402f8a88e3da1be)
    Reviewed-on: https://gerrit.libreoffice.org/70586
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/jvmfwk/source/fwkbase.hxx b/jvmfwk/inc/fwkbase.hxx
similarity index 93%
rename from jvmfwk/source/fwkbase.hxx
rename to jvmfwk/inc/fwkbase.hxx
index b3779cda96b6..8fe077b79a28 100644
--- a/jvmfwk/source/fwkbase.hxx
+++ b/jvmfwk/inc/fwkbase.hxx
@@ -16,10 +16,15 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#ifndef INCLUDED_JVMFWK_SOURCE_FWKBASE_HXX
-#define INCLUDED_JVMFWK_SOURCE_FWKBASE_HXX
+#ifndef INCLUDED_JVMFWK_INC_FWKBASE_HXX
+#define INCLUDED_JVMFWK_INC_FWKBASE_HXX
+
+#include <sal/config.h>
+
+#include <boost/optional.hpp>
 
 #include <rtl/ustring.hxx>
+#include "elements.hxx"
 #include "libxmlutil.hxx"
 
 namespace jfw
@@ -34,7 +39,7 @@ class VendorSettings
 public:
     VendorSettings();
 
-    VersionInfo getVersionInformation(const OUString & sVendor) const;
+    boost::optional<VersionInfo> getVersionInformation(const OUString & sVendor) const;
 
     ::std::vector< OUString> getSupportedVendors() const;
 };
diff --git a/jvmfwk/source/libxmlutil.hxx b/jvmfwk/inc/libxmlutil.hxx
similarity index 96%
rename from jvmfwk/source/libxmlutil.hxx
rename to jvmfwk/inc/libxmlutil.hxx
index 8a58280b406d..078d285ac78f 100644
--- a/jvmfwk/source/libxmlutil.hxx
+++ b/jvmfwk/inc/libxmlutil.hxx
@@ -16,8 +16,8 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#ifndef INCLUDED_JVMFWK_SOURCE_LIBXMLUTIL_HXX
-#define INCLUDED_JVMFWK_SOURCE_LIBXMLUTIL_HXX
+#ifndef INCLUDED_JVMFWK_INC_LIBXMLUTIL_HXX
+#define INCLUDED_JVMFWK_INC_LIBXMLUTIL_HXX
 
 #include <libxml/parser.h>
 #include <libxml/xpath.h>
diff --git a/jvmfwk/inc/vendorplugin.hxx b/jvmfwk/inc/vendorplugin.hxx
index f370f1123375..0aa6d84276e3 100644
--- a/jvmfwk/inc/vendorplugin.hxx
+++ b/jvmfwk/inc/vendorplugin.hxx
@@ -28,10 +28,10 @@
 
 #include <memory>
 #include <vector>
-#include <utility>
-#include "elements.hxx"
 #include "vendorbase.hxx"
 
+namespace jfw { class VendorSettings; }
+
 /**
    @file
    <p>
@@ -56,7 +56,6 @@ enum class javaPluginError
     WrongVersionFormat,
     FailedVersion,
     NoJre,
-    WrongVendor,
     WrongArch,
     VmCreationFailed
 };
@@ -64,26 +63,14 @@ enum class javaPluginError
 
 /** obtains information about installations of Java Runtime Environments (JREs).
 
-    <p>The function gathers information about available JREs which have the same
-    vendor as determined by the <code>sVendor</code> parameter. Only information
+    <p>The function gathers information about available JREs. Only information
     about those JREs which match the version requirements are returned. These
-    requirements are specified by the parameters <code>sMinVersion</code>,
-    <code>sMaxVersion</code> and <code>arExcludeList</code>.
+    requirements are specified by the parameter <code>vendorSettings</code>.
     </p>
     <p>
     The JavaInfo structures returned in <code>parJavaInfo</code> should be ordered
     according to their version. The one, representing a JRE with the highest
     version should be the first in the array. </p>
-    @param sVendor
-        [in] only JREs from this vendor are examined. This parameter always contains
-        a vendor string. That is, the string it is not empty.
-    @param sMinVersion
-        [in] represents the minimum version of a JRE. The string can be empty.
-    @param sMaxVersion
-        [in] represents the maximum version of a JRE. The string can be empty.
-    @param arExcludeList
-        [in] contains a list of "bad" versions. JREs which have one of these
-        versions must not be returned by this function.
     @param parJavaInfo
         [out] if the function runs successfully then <code>parJavaInfo</code> contains
         on return a vector of pointers to <code>JavaInfo</code> objects.
@@ -91,40 +78,25 @@ enum class javaPluginError
     @return
     javaPluginError::NONE the function ran successfully.</br>
     javaPluginError::Error an error occurred during execution.</br>
-    javaPluginError::InvalidArg an argument was not valid.</br>
     javaPluginError::WrongVersionFormat the version strings in
-    <code>sMinVersion,sMaxVersion,arExcludeList</code> are not recognized as valid
+    <code>vendorSettings</code> are not recognized as valid
     version strings.
  */
 javaPluginError jfw_plugin_getAllJavaInfos(
     bool checkJavaHomeAndPath,
-    OUString const& sVendor,
-    OUString const& sMinVersion,
-    OUString const& sMaxVersion,
-    std::vector<OUString> const & arExcludeList,
+    jfw::VendorSettings const & vendorSettings,
     std::vector<std::unique_ptr<JavaInfo>> * parJavaInfo,
     std::vector<rtl::Reference<jfw_plugin::VendorBase>> & infos);
 
 /** obtains information for a JRE at a given location.
 
-   <p>If the given location belongs to a JRE whoose vendor matches the
-   sVendor argument and the JRE has a version which meets the requirements as
-   specified by <code>sMinVersion, sMaxVersion, arExcludeList</code> then
-   this function shall return a JavaInfo object for this JRE if this implementation
-   supports this vendor.</p>
+   <p>If the given location belongs to a JRE
+   and the JRE has a version which meets the requirements as
+   specified by <code>vendorSettings</code> then
+   this function shall return a JavaInfo object for this JRE.</p>
 
    @param sLocation
        [in] a file URL to the directory of the JRE.
-   @param sVendor
-      [in] a name of a vendor. This parameter always contains
-        a vendor string. That is, the string it is not empty.
-   @param sMinVersion
-       [in] represents the minimum version of a JRE.
-   @param sMaxVersion
-       [in] represents the maximum version of a JRE.
-   @param arExcludeList
-       [in] contains a list of "bad" versions. JREs which have one of these
-        versions must not be returned by this function.
    @param ppInfo
        [out] if the function runs successfully then <code>ppInfo</code> contains
         on return a pointer to a <code>JavaInfo</code> object.
@@ -134,37 +106,23 @@ javaPluginError jfw_plugin_getAllJavaInfos(
    javaPluginError::Error an error occurred during execution.</br>
    javaPluginError::InvalidArg an argument was not valid. For example, sLocation
     is an empty string.</br>
-   javaPluginError::WrongVersionFormat the version strings in
-    <code>sMinVersion,sMaxVersion,arExcludeList</code> are not recognized as valid
-    version strings.
    javaPluginError::FailedVersion there is a JRE at the given location but it does not
    meet the version requirements.
-   javaPluginError::NoJre no JRE could be detected at the given location. However, that
-   does not mean necessarily that there is no JRE. There could be a JRE but it has
-   a vendor which is not supported by this API implementation.
+   javaPluginError::NoJre no JRE could be detected at the given location.
  */
 javaPluginError jfw_plugin_getJavaInfoByPath(
     OUString const& sLocation,
-    OUString const& sVendor,
-    OUString const& sMinVersion,
-    OUString const& sMaxVersion,
-    std::vector<OUString> const &arExcludeList,
+    jfw::VendorSettings const & vendorSettings,
     std::unique_ptr<JavaInfo> * ppInfo);
 
 
 /** obtains information for a JRE referenced by the JAVA_HOME environment variable.
 
-   <p>If the JAVA_HOME environment variable is set and points to a JRE whoose vendor
-   matches the requirements given by vecVendorInfos (i.e. it has a vendor that is
-   given in vecVendorInfos and the version requirements for the vendor are met),
+   <p>If the JAVA_HOME environment variable is set and points to a JRE that
+   matches the requirements given by vendorSettings (i.e.
+   the version requirements, if any, for the vendor are met),
    then this function shall return a JavaInfo object for this JRE.</p>
 
-   @param vecVendorInfos
-       [in] vector specifying the vendor and version requirements that the JRE must fulfill.
-       The vector contains pairs of vendors and the respective version requirements
-       for those vendors. The JRE must support the requirements of one given pair in the
-       vector (i.e. it must be of one of the vendors and meet the version requirements
-       - minVersion, maxVersion, excludeVersions - for that specific vendor).
    @param ppInfo
        [out] if the JAVA_HOME environment variable is set and points to a suitable
        JRE, then <code>ppInfo</code> contains
@@ -173,12 +131,12 @@ javaPluginError jfw_plugin_getJavaInfoByPath(
    @return
    javaPluginError::NONE the function ran successfully.</br>
    javaPluginError::NoJre no suitable JRE could be detected at the given location. However, that
-   does not mean necessarily that there is no JRE. There could be a JRE but it has
-   a vendor which is not supported by this API implementation or it does not
+   does not mean necessarily that there is no JRE. There could be a JRE but
+   it does not
    meet the version requirements.
  */
 javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
-    std::vector<std::pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+    jfw::VendorSettings const & vendorSettings,
     std::unique_ptr<JavaInfo> * ppInfo,
     std::vector<rtl::Reference<jfw_plugin::VendorBase>> & infos);
 
@@ -187,20 +145,14 @@ javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
     whose executable is in the PATH.
 
     <p>The function gathers information about available JREs which are on the PATH
-    (PATH environment variable) and meet the vendor and version requirements given by
-    <code>vecVendorInfos</code> (i.e. they have a vendor that is given in
-    <code>vecVendorInfos</code> and the version requirements for the vendor are met).
+    (PATH environment variable) and meet the version requirements given by
+    <code>vendorSettings</code> (i.e.
+    the version requirements, if any, for the vendor are met).
     </p>
     <p>
     The JavaInfo structures returned in <code>vecJavaInfosFromPath</code> should be ordered
     according to their occurrence in the PATH. The one that is the first one on the PATH
     is also the first element in the vector.</p>
-    @param vecVendorInfos
-       [in] vector specifying the vendor and version requirements that the JRE must fulfill.
-       The vector contains pairs of vendors and the respective version requirements
-       for those vendors. The JRE must support the requirements of one given pair in the
-       vector (i.e. it must be of one of the vendors and meet the version requirements
-       - minVersion, maxVersion, excludeVersions - for that specific vendor).
     @param vecJavaInfosFromPath
         [out] if the function runs successfully then <code>vecJavaInfosFromPath</code>
         contains on return a vector of pointers to <code>JavaInfo</code> objects.
@@ -216,7 +168,7 @@ javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
  */
 
 javaPluginError jfw_plugin_getJavaInfosFromPath(
-    std::vector<std::pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+    jfw::VendorSettings const & vendorSettings,
     std::vector<std::unique_ptr<JavaInfo>> & vecJavaInfosFromPath,
     std::vector<rtl::Reference<jfw_plugin::VendorBase>> & infos);
 
@@ -256,8 +208,6 @@ javaPluginError jfw_plugin_getJavaInfosFromPath(
     @return
     javaPluginError::NONE the function ran successfully.</br>
     javaPluginError::Error an error occurred during execution.</br>
-    javaPluginError::WrongVendor the <code>JavaInfo</code> object was not created
-    in by this library and the VM cannot be started.</br>
     JFW_PLUGIN_E_VM_CREATION_FAILED a VM could not be created. The error was caused
     by the JRE.
  */
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index c6f8eeb6a5c8..117fe2c4f581 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -57,6 +57,7 @@
 
 #include <jni.h>
 #include <rtl/byteseq.hxx>
+#include <fwkbase.hxx>
 #include <vendorplugin.hxx>
 #include "util.hxx"
 #include "sunversion.hxx"
@@ -296,19 +297,12 @@ javaPluginError checkJavaVersionRequirements(
 
 javaPluginError jfw_plugin_getAllJavaInfos(
     bool checkJavaHomeAndPath,
-    OUString const& sVendor,
-    OUString const& sMinVersion,
-    OUString const& sMaxVersion,
-    std::vector<OUString> const &arExcludeList,
+    jfw::VendorSettings const & vendorSettings,
     std::vector<std::unique_ptr<JavaInfo>>* parJavaInfo,
     std::vector<rtl::Reference<jfw_plugin::VendorBase>> & infos)
 {
     assert(parJavaInfo);
 
-    OSL_ASSERT(!sVendor.isEmpty());
-    if (sVendor.isEmpty())
-        return javaPluginError::InvalidArg;
-
     //Find all JREs
     vector<rtl::Reference<VendorBase> > vecInfos =
         addAllJREInfos(checkJavaHomeAndPath, infos);
@@ -316,17 +310,16 @@ javaPluginError jfw_plugin_getAllJavaInfos(
 
     for (auto const& vecInfo : vecInfos)
     {
+        if (auto const versionInfo = vendorSettings.getVersionInformation(vecInfo->getVendor()))
+        {
+            javaPluginError err = checkJavaVersionRequirements(
+                vecInfo, versionInfo->sMinVersion, versionInfo->sMaxVersion, versionInfo->vecExcludeVersions);
 
-        if (sVendor != vecInfo->getVendor())
-            continue;
-
-        javaPluginError err = checkJavaVersionRequirements(
-            vecInfo, sMinVersion, sMaxVersion, arExcludeList);
-
-        if (err == javaPluginError::FailedVersion || err == javaPluginError::WrongArch)
-            continue;
-        else if (err == javaPluginError::WrongVersionFormat)
-            return err;
+            if (err == javaPluginError::FailedVersion || err == javaPluginError::WrongArch)
+                continue;
+            else if (err == javaPluginError::WrongVersionFormat)
+                return err;
+        }
 
         vecVerifiedInfos.push_back(vecInfo);
     }
@@ -343,10 +336,7 @@ javaPluginError jfw_plugin_getAllJavaInfos(
 
 javaPluginError jfw_plugin_getJavaInfoByPath(
     OUString const& sPath,
-    OUString const& sVendor,
-    OUString const& sMinVersion,
-    OUString const& sMaxVersion,
-    std::vector<OUString> const &arExcludeList,
+    jfw::VendorSettings const & vendorSettings,
     std::unique_ptr<JavaInfo> * ppInfo)
 {
     assert(ppInfo != nullptr);
@@ -354,19 +344,17 @@ javaPluginError jfw_plugin_getJavaInfoByPath(
     if (sPath.isEmpty())
         return javaPluginError::InvalidArg;
 
-    OSL_ASSERT(!sVendor.isEmpty());
-    if (sVendor.isEmpty())
-        return javaPluginError::InvalidArg;
-
     rtl::Reference<VendorBase> aVendorInfo = getJREInfoByPath(sPath);
     if (!aVendorInfo.is())
         return javaPluginError::NoJre;
 
     //Check if the detected JRE matches the version requirements
-    if (sVendor != aVendorInfo->getVendor())
-        return javaPluginError::NoJre;
-    javaPluginError errorcode = checkJavaVersionRequirements(
-            aVendorInfo, sMinVersion, sMaxVersion, arExcludeList);
+    javaPluginError errorcode = javaPluginError::NONE;
+    if (auto const versionInfo = vendorSettings.getVersionInformation(aVendorInfo->getVendor()))
+    {
+        errorcode = checkJavaVersionRequirements(
+            aVendorInfo, versionInfo->sMinVersion, versionInfo->sMaxVersion, versionInfo->vecExcludeVersions);
+    }
 
     if (errorcode == javaPluginError::NONE)
         *ppInfo = createJavaInfo(aVendorInfo);
@@ -375,7 +363,7 @@ javaPluginError jfw_plugin_getJavaInfoByPath(
 }
 
 javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
-    std::vector<pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+    jfw::VendorSettings const & vendorSettings,
     std::unique_ptr<JavaInfo> * ppInfo,
     std::vector<rtl::Reference<VendorBase>> & infos)
 {
@@ -389,32 +377,24 @@ javaPluginError jfw_plugin_getJavaInfoFromJavaHome(
     assert(infoJavaHome.size() == 1);
 
     //Check if the detected JRE matches the version requirements
-    for (auto const& vendorInfo : vecVendorInfos)
-    {
-        const OUString& vendor = vendorInfo.first;
-        jfw::VersionInfo versionInfo = vendorInfo.second;
-
-        if (vendor == infoJavaHome[0]->getVendor())
-        {
-            javaPluginError errorcode = checkJavaVersionRequirements(
+    auto const versionInfo = vendorSettings.getVersionInformation(infoJavaHome[0]->getVendor());
+    if (!versionInfo
+        || (checkJavaVersionRequirements(
                 infoJavaHome[0],
-                versionInfo.sMinVersion,
-                versionInfo.sMaxVersion,
-                versionInfo.vecExcludeVersions);
-
-            if (errorcode == javaPluginError::NONE)
-            {
-                *ppInfo = createJavaInfo(infoJavaHome[0]);
-                return javaPluginError::NONE;
-            }
-        }
+                versionInfo->sMinVersion,
+                versionInfo->sMaxVersion,
+                versionInfo->vecExcludeVersions)
+            == javaPluginError::NONE))
+    {
+        *ppInfo = createJavaInfo(infoJavaHome[0]);
+        return javaPluginError::NONE;
     }
 
     return javaPluginError::NoJre;
 }
 
 javaPluginError jfw_plugin_getJavaInfosFromPath(
-    std::vector<std::pair<OUString, jfw::VersionInfo>> const& vecVendorInfos,
+    jfw::VendorSettings const & vendorSettings,
     std::vector<std::unique_ptr<JavaInfo>> & javaInfosFromPath,
     std::vector<rtl::Reference<jfw_plugin::VendorBase>> & infos)
 {
@@ -427,24 +407,16 @@ javaPluginError jfw_plugin_getJavaInfosFromPath(
     // copy infos of JREs that meet version requirements to vecVerifiedInfos
     for (auto const& infosFromPath : vecInfosFromPath)
     {
-        for (auto const& vendorInfo : vecVendorInfos)
-        {
-            const OUString& vendor = vendorInfo.first;
-            jfw::VersionInfo const & versionInfo = vendorInfo.second;
-
-            if (vendor == infosFromPath->getVendor())
-            {
-                javaPluginError errorcode = checkJavaVersionRequirements(
+        auto const versionInfo = vendorSettings.getVersionInformation(infosFromPath->getVendor());
+        if (!versionInfo
+            || (checkJavaVersionRequirements(
                     infosFromPath,
-                    versionInfo.sMinVersion,
-                    versionInfo.sMaxVersion,
-                    versionInfo.vecExcludeVersions);
-
-                if (errorcode == javaPluginError::NONE)
-                {
-                    vecVerifiedInfos.push_back(createJavaInfo(infosFromPath));
-                }
-            }
+                    versionInfo->sMinVersion,
+                    versionInfo->sMaxVersion,
+                    versionInfo->vecExcludeVersions)
+                == javaPluginError::NONE))
+        {
+            vecVerifiedInfos.push_back(createJavaInfo(infosFromPath));
         }
     }
 
@@ -621,9 +593,6 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
     // unless errorcode is volatile the following warning occurs on gcc:
     // warning: variable 'errorcode' might be clobbered by `longjmp' or `vfork'
     volatile javaPluginError errorcode = javaPluginError::NONE;
-    //Check if the Vendor (pInfo->sVendor) is supported by this plugin
-    if ( ! isVendorSupported(pInfo->sVendor))
-        return javaPluginError::WrongVendor;
 #ifdef MACOSX
     rtl::Reference<VendorBase> aVendorInfo = getJREInfoByPath( pInfo->sLocation );
     if ( !aVendorInfo.is() || aVendorInfo->compareVersions( pInfo->sVersion ) < 0 )
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/util.cxx b/jvmfwk/plugins/sunmajor/pluginlib/util.cxx
index 02cd94b295d2..6b1147b149b2 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/util.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/util.cxx
@@ -1032,6 +1032,7 @@ rtl::Reference<VendorBase> getJREInfoByPath(
         }
     }
 
+    auto knownVendor = false;
     if (!sVendorName.isEmpty())
     {
         //find the creator func for the respective vendor name
@@ -1043,10 +1044,16 @@ rtl::Reference<VendorBase> getJREInfoByPath(
             if (sNameMap == sVendorName)
             {
                 ret = createInstance(gVendorMap[c].createFunc, props);
+                knownVendor = true;
                 break;
             }
         }
     }
+    // For unknown vendors, try SunInfo as fallback:
+    if (!knownVendor)
+    {
+        ret = createInstance(SunInfo::createInstance, props);
+    }
     if (!ret.is())
     {
         vecBadPaths.push_back(sFilePath);
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx b/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx
index 5cb85ad39a1c..cf6c152da070 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.cxx
@@ -22,10 +22,6 @@
 #include "gnujre.hxx"
 #include "sunjre.hxx"
 #include "otherjre.hxx"
-#include <osl/thread.h>
-#include <stdio.h>
-#include <sal/log.hxx>
-
 
 namespace jfw_plugin
 {
@@ -54,20 +50,6 @@ BEGIN_VENDOR_MAP()
     VENDOR_MAP_ENTRY("Azul Systems, Inc.", OtherInfo)
 END_VENDOR_MAP()
 
-
-bool isVendorSupported(const OUString& sVendor)
-{
-    const size_t count = SAL_N_ELEMENTS(gVendorMap) - 1;
-    for ( size_t pos = 0; pos < count; ++pos )
-    {
-        if (sVendor.equalsAscii(gVendorMap[pos].sVendorName))
-            return true;
-    }
-    SAL_INFO(
-        "jfw.level2", "sunjavaplugin does not support vendor: " << sVendor);
-    return false;
-}
-
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx b/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx
index b6b1f3113545..d3c3f700451f 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/vendorlist.hxx
@@ -46,11 +46,6 @@ VendorSupportMapEntry const gVendorMap[] ={
 #define END_VENDOR_MAP() \
     {nullptr, nullptr, nullptr} };
 
-/* Examines if the vendor supplied in parameter sVendor is part of the
-   list of supported vendors. That is the arry of VendorSupportMapEntry
-   is search for an respective entry.
-*/
-bool isVendorSupported(const OUString & sVendor);
 }
 
 #endif
diff --git a/jvmfwk/source/elements.cxx b/jvmfwk/source/elements.cxx
index ebd395b466fc..da53de3fd4c7 100644
--- a/jvmfwk/source/elements.cxx
+++ b/jvmfwk/source/elements.cxx
@@ -27,9 +27,9 @@
 #include <osl/mutex.hxx>
 #include <osl/file.hxx>
 #include <fwkutil.hxx>
-#include "fwkbase.hxx"
+#include <fwkbase.hxx>
 #include "framework.hxx"
-#include "libxmlutil.hxx"
+#include <libxmlutil.hxx>
 #include <osl/thread.hxx>
 #include <algorithm>
 #include <libxml/parser.h>
diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx
index a748d77cff37..8d870fd335ae 100644
--- a/jvmfwk/source/framework.cxx
+++ b/jvmfwk/source/framework.cxx
@@ -35,7 +35,7 @@
 #include "framework.hxx"
 #include <fwkutil.hxx>
 #include <elements.hxx>
-#include "fwkbase.hxx"
+#include <fwkbase.hxx>
 
 namespace {
 
@@ -59,8 +59,6 @@ javaFrameworkError jfw_findAllJREs(std::vector<std::unique_ptr<JavaInfo>> *pparI
         osl::MutexGuard guard(jfw::FwkMutex::get());
 
         jfw::VendorSettings aVendorSettings;
-        std::vector<OUString> vecVendors =
-            aVendorSettings.getSupportedVendors();
         //Add the JavaInfos found by jfw_plugin_getAllJavaInfos to the vector
         std::vector<std::unique_ptr<JavaInfo>> vecInfo;
         //get the list of paths to jre locations which have been
@@ -68,69 +66,47 @@ javaFrameworkError jfw_findAllJREs(std::vector<std::unique_ptr<JavaInfo>> *pparI
         const jfw::MergedSettings settings;
         const std::vector<OUString>& vecJRELocations =
             settings.getJRELocations();
-        //Use every plug-in library to get Java installations.
-        for (auto const & vendor: vecVendors)
-        {
-            jfw::VersionInfo versionInfo =
-                aVendorSettings.getVersionInformation(vendor);
+        //Use all plug-in libraries to get Java installations.
+        std::vector<std::unique_ptr<JavaInfo>> arInfos;
+        std::vector<rtl::Reference<jfw_plugin::VendorBase>> infos;
+        javaPluginError plerr = jfw_plugin_getAllJavaInfos(
+            true,
+            aVendorSettings,
+            & arInfos,
+            infos);
 
-            //get all installations of one vendor according to minVersion,
-            //maxVersion and excludeVersions
-            std::vector<std::unique_ptr<JavaInfo>> arInfos;
-            std::vector<rtl::Reference<jfw_plugin::VendorBase>> infos;
-            javaPluginError plerr = jfw_plugin_getAllJavaInfos(
-                true,
-                vendor,
-                versionInfo.sMinVersion,
-                versionInfo.sMaxVersion,
-                versionInfo.vecExcludeVersions,
-                & arInfos,
-                infos);
+        if (plerr != javaPluginError::NONE)
+            return JFW_E_ERROR;
 
-            if (plerr != javaPluginError::NONE)
-                return JFW_E_ERROR;
+        for (auto & j: arInfos)
+            vecInfo.push_back(std::move(j));
 
-            for (auto & j: arInfos)
-                vecInfo.push_back(std::move(j));
+        //Check if any plugin can detect JREs at the location
+        // of the paths added by jfw_addJRELocation
+        //Check every manually added location
+        for (auto const & ii: vecJRELocations)
+        {
+            std::unique_ptr<JavaInfo> aInfo;
+            plerr = jfw_plugin_getJavaInfoByPath(
+                ii,
+                aVendorSettings,
+                &aInfo);
+            if (plerr == javaPluginError::NoJre)
+                continue;
+            if (plerr == javaPluginError::FailedVersion)
+                continue;
+            else if (plerr != javaPluginError::NONE)
+                return JFW_E_ERROR;
 
-            //Check if the current plugin can detect JREs at the location
-            // of the paths added by jfw_addJRELocation
-            //Check every manually added location
-            for (auto const & ii: vecJRELocations)
+            // Was this JRE already added?
+            if (std::none_of(
+                    vecInfo.begin(), vecInfo.end(),
+                    [&aInfo](std::unique_ptr<JavaInfo> const & info) {
+                        return areEqualJavaInfo(
+                            info.get(), aInfo.get());
+                    }))
             {
-                std::unique_ptr<JavaInfo> aInfo;
-                plerr = jfw_plugin_getJavaInfoByPath(
-                    ii,
-                    vendor,
-                    versionInfo.sMinVersion,
-                    versionInfo.sMaxVersion,
-                    versionInfo.vecExcludeVersions,
-                    &aInfo);
-                if (plerr == javaPluginError::NoJre)
-                    continue;
-                if (plerr == javaPluginError::FailedVersion)
-                    continue;
-                else if (plerr != javaPluginError::NONE)
-                    return JFW_E_ERROR;
-
-                // Was this JRE already added?  Different plugins could detect
-                // the same JRE.  Also make sure vecInfo contains only JavaInfos
-                // for the vendors for which there is a javaSelection/plugins/
-                // library entry in the javavendors.xml; jfw_getJavaInfoByPath
-                // can return a JavaInfo of any vendor:
-                if ((std::none_of(
-                         vecInfo.begin(), vecInfo.end(),
-                         [&aInfo](std::unique_ptr<JavaInfo> const & info) {
-                             return areEqualJavaInfo(
-                                 info.get(), aInfo.get());
-                         }))
-                    && (std::find(
-                            vecVendors.begin(), vecVendors.end(),
-                            aInfo->sVendor)
-                        != vecVendors.end()))
-                {
-                    vecInfo.push_back(std::move(aInfo));
-                }
+                vecInfo.push_back(std::move(aInfo));
             }
         }
 
@@ -304,7 +280,6 @@ javaFrameworkError jfw_startVM(
             g_pJavaVM = pVm;
             *ppVM = pVm;
         }
-        OSL_ASSERT(plerr != javaPluginError::WrongVendor);
     }
     catch (const jfw::FrameworkException& e)
     {
@@ -343,25 +318,13 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
 
         // get list of vendors for Java installations
         jfw::VendorSettings aVendorSettings;
-        std::vector<OUString> vecVendors =
-            aVendorSettings.getSupportedVendors();
-
-        // save vendors and respective version requirements pair-wise in a vector
-        std::vector<std::pair<OUString, jfw::VersionInfo>> versionInfos;
-        for (auto const & vendor : vecVendors)
-        {
-            jfw::VersionInfo versionInfo =
-                aVendorSettings.getVersionInformation(vendor);
-
-            versionInfos.emplace_back(vendor, versionInfo);
-        }
 
         std::vector<rtl::Reference<jfw_plugin::VendorBase>> infos;
 
         // first inspect Java installation that the JAVA_HOME
         // environment variable points to (if it is set)
         if (jfw_plugin_getJavaInfoFromJavaHome(
-                versionInfos, &aCurrentInfo, infos)
+                aVendorSettings, &aCurrentInfo, infos)
             == javaPluginError::NONE)
         {
             // compare features
@@ -379,7 +342,7 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
         {
             std::vector<std::unique_ptr<JavaInfo>> vecJavaInfosFromPath;
             if (jfw_plugin_getJavaInfosFromPath(
-                    versionInfos, vecJavaInfosFromPath, infos)
+                    aVendorSettings, vecJavaInfosFromPath, infos)
                 == javaPluginError::NONE)
             {
                 for (auto & pJInfo: vecJavaInfosFromPath)
@@ -405,31 +368,20 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
 
 
         // if no suitable Java installation has been found yet:
-        // first iterate over all vendors to find a suitable Java installation,
+        // first use jfw_plugin_getAllJavaInfos to find a suitable Java installation,
         // then try paths that have been added manually
         if (!bInfoFound)
         {
-            //Use every vendor to get Java installations. At the first usable
-            //Java the loop will break
-            for (auto const & vendor : vecVendors)
+            //get all installations
+            std::vector<std::unique_ptr<JavaInfo>> arInfos;
+            javaPluginError plerr = jfw_plugin_getAllJavaInfos(
+                false,
+                aVendorSettings,
+                & arInfos,
+                infos);
+
+            if (plerr == javaPluginError::NONE)
             {
-                jfw::VersionInfo versionInfo =
-                    aVendorSettings.getVersionInformation(vendor);
-
-                //get all installations of one vendor according to minVersion,
-                //maxVersion and excludeVersions
-                std::vector<std::unique_ptr<JavaInfo>> arInfos;
-                javaPluginError plerr = jfw_plugin_getAllJavaInfos(
-                    false,
-                    vendor,
-                    versionInfo.sMinVersion,
-                    versionInfo.sMaxVersion,
-                    versionInfo.vecExcludeVersions,
-                    & arInfos,
-                    infos);
-
-                if (plerr != javaPluginError::NONE)
-                    continue;
                 //iterate over all installations to find the best which has
                 //all features
                 for (auto & pJInfo: arInfos)
@@ -442,7 +394,6 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
                         //the just found Java implements all required features
                         //currently there is only accessibility!!!
                         aCurrentInfo = std::move(pJInfo);
-                        bInfoFound = true;
                         break;
                     }
                     else if (!aCurrentInfo)
@@ -452,12 +403,8 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
                         aCurrentInfo = std::move(pJInfo);
                     }
                 }
-
-                if (bInfoFound)
-                    break;
-                //All Java installations found by the current plug-in lib
-                //do not provide the required features. Try the next plug-in
             }
+
             if (!aCurrentInfo)
             {//The plug-ins did not find a suitable Java. Now try the paths which have been
             //added manually.
@@ -466,53 +413,41 @@ javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
                 //node.loadFromSettings();
                 const std::vector<OUString> & vecJRELocations =
                     settings.getJRELocations();
-                //use every plug-in to determine the JavaInfo objects
-                for (auto const & vendor : vecVendors)
+                //use all plug-ins to determine the JavaInfo objects
+                for (auto const & JRELocation : vecJRELocations)
                 {
-                    jfw::VersionInfo versionInfo =
-                        aVendorSettings.getVersionInformation(vendor);
-
-                    for (auto const & JRELocation : vecJRELocations)
+                    std::unique_ptr<JavaInfo> aInfo;
+                    javaPluginError err = jfw_plugin_getJavaInfoByPath(
+                        JRELocation,
+                        aVendorSettings,
+                        &aInfo);
+                    if (err == javaPluginError::NoJre)
+                        continue;
+                    if (err == javaPluginError::FailedVersion)
+                        continue;
+                    else if (err !=javaPluginError::NONE)
+                        return JFW_E_ERROR;
+
+                    if (aInfo)
                     {
-                        std::unique_ptr<JavaInfo> aInfo;
-                        javaPluginError err = jfw_plugin_getJavaInfoByPath(
-                            JRELocation,
-                            vendor,
-                            versionInfo.sMinVersion,
-                            versionInfo.sMaxVersion,
-                            versionInfo.vecExcludeVersions,
-                            &aInfo);
-                        if (err == javaPluginError::NoJre)
-                            continue;
-                        if (err == javaPluginError::FailedVersion)
-                            continue;
-                        else if (err !=javaPluginError::NONE)
-                            return JFW_E_ERROR;
-
-                        if (aInfo)
+                        // compare features
+                        // If the user does not require any features (nFeatureFlags = 0)
+                        // then the first installation is used
+                        if ((aInfo->nFeatures & nFeatureFlags) == nFeatureFlags)
                         {
-                            // compare features
-                            // If the user does not require any features (nFeatureFlags = 0)
-                            // then the first installation is used
-                            if ((aInfo->nFeatures & nFeatureFlags) == nFeatureFlags)
-                            {
-                                //the just found Java implements all required features
-                                //currently there is only accessibility!!!
-                                aCurrentInfo = std::move(aInfo);
-                                bInfoFound = true;
-                                break;
-                            }
-                            else if (!aCurrentInfo)
-                            {
-                                // We remember the very first installation in
-                                // aCurrentInfo:
-                                aCurrentInfo = std::move(aInfo);
-                            }
+                            //the just found Java implements all required features
+                            //currently there is only accessibility!!!
+                            aCurrentInfo = std::move(aInfo);
+                            break;
                         }
-                    }//end iterate over paths
-                    if (bInfoFound)
-                        break;
-                }// end iterate plug-ins
+                        else if (!aCurrentInfo)
+                        {
+                            // We remember the very first installation in
+                            // aCurrentInfo:
+                            aCurrentInfo = std::move(aInfo);
+                        }
+                    }
+                }//end iterate over paths
             }
         }
         if (aCurrentInfo)
@@ -623,43 +558,21 @@ javaFrameworkError jfw_getJavaInfoByPath(OUString const & pPath, std::unique_ptr
         osl::MutexGuard guard(jfw::FwkMutex::get());
 
         jfw::VendorSettings aVendorSettings;
-        std::vector<OUString> vecVendors =
-            aVendorSettings.getSupportedVendors();
 
-        //Use every plug-in library to determine if the path represents a
-        //JRE. If a plugin recognized it then the loop will break
-        for (auto const & vendor : vecVendors)
-        {
-            jfw::VersionInfo versionInfo =
-                aVendorSettings.getVersionInformation(vendor);
-
-            //ask the plugin if this is a JRE.
-            //If so check if it meets the version requirements.
-            //Only if it does return a JavaInfo
-            javaPluginError plerr = jfw_plugin_getJavaInfoByPath(
-                pPath,
-                vendor,
-                versionInfo.sMinVersion,
-                versionInfo.sMaxVersion,
-                versionInfo.vecExcludeVersions,
-                ppInfo);
+        //ask all plugins if this is a JRE.
+        //If so check if it meets the version requirements.
+        //Only if it does return a JavaInfo
+        javaPluginError plerr = jfw_plugin_getJavaInfoByPath(
+            pPath,
+            aVendorSettings,
+            ppInfo);
 
-            if (plerr == javaPluginError::NONE)
-            {
-                break;
-            }
-            else if(plerr == javaPluginError::FailedVersion)
-            {//found JRE but it has the wrong version
-                ppInfo->reset();
-                errcode = JFW_E_FAILED_VERSION;
-                break;
-            }
-            else if (plerr == javaPluginError::NoJre)
-            {// plugin does not recognize this path as belonging to JRE
-                continue;
-            }
-            OSL_ASSERT(false);
+        if(plerr == javaPluginError::FailedVersion)
+        {//found JRE but it has the wrong version
+            ppInfo->reset();
+            errcode = JFW_E_FAILED_VERSION;
         }
+        OSL_ASSERT(plerr == javaPluginError::NONE || plerr == javaPluginError::NoJre);
         if (!*ppInfo && errcode != JFW_E_FAILED_VERSION)
             errcode = JFW_E_NOT_RECOGNIZED;
     }
diff --git a/jvmfwk/source/fwkbase.cxx b/jvmfwk/source/fwkbase.cxx
index 2e83e322aa30..206c81546974 100644
--- a/jvmfwk/source/fwkbase.cxx
+++ b/jvmfwk/source/fwkbase.cxx
@@ -29,7 +29,7 @@
 #include "framework.hxx"
 #include <fwkutil.hxx>
 #include <elements.hxx>
-#include "fwkbase.hxx"
+#include <fwkbase.hxx>
 
 using namespace osl;
 
@@ -117,11 +117,23 @@ VendorSettings::VendorSettings():
     }
 }
 
-VersionInfo VendorSettings::getVersionInformation(const OUString & sVendor) const
+boost::optional<VersionInfo> VendorSettings::getVersionInformation(const OUString & sVendor) const
 {
     OSL_ASSERT(!sVendor.isEmpty());
-    VersionInfo aVersionInfo;
     OString osVendor = OUStringToOString(sVendor, RTL_TEXTENCODING_UTF8);
+    CXPathObjectPtr pathObject;
+    pathObject = xmlXPathEvalExpression(
+        reinterpret_cast<xmlChar const *>(
+            OString(
+                "/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"" + osVendor
+                + "\"]/jf:minVersion").getStr()),
+        m_xmlPathContextVendorSettings);
+    if (xmlXPathNodeSetIsEmpty(pathObject->nodesetval))
+    {
+        return {};
+    }
+
+    VersionInfo aVersionInfo;
     //Get minVersion
     OString sExpression = OString(
         "/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") +
diff --git a/jvmfwk/source/libxmlutil.cxx b/jvmfwk/source/libxmlutil.cxx
index d2fe64e391a5..5f1ec5784eb5 100644
--- a/jvmfwk/source/libxmlutil.cxx
+++ b/jvmfwk/source/libxmlutil.cxx
@@ -17,7 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include "libxmlutil.hxx"
+#include <libxmlutil.hxx>
 
 namespace jfw
 {
diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index ef370d3289a7..7bcce11e2e63 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -8238,7 +8238,9 @@ jvmaccess/workbench/exceptiontest1.cxx
 jvmaccess/workbench/exceptiontest2.cxx
 jvmaccess/workbench/javainfo/javainfotest.cxx
 jvmfwk/inc/elements.hxx
+jvmfwk/inc/fwkbase.hxx
 jvmfwk/inc/fwkutil.hxx
+jvmfwk/inc/libxmlutil.hxx
 jvmfwk/inc/vendorbase.hxx
 jvmfwk/inc/vendorplugin.hxx
 jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx
@@ -8262,10 +8264,8 @@ jvmfwk/source/elements.cxx
 jvmfwk/source/framework.cxx
 jvmfwk/source/framework.hxx
 jvmfwk/source/fwkbase.cxx
-jvmfwk/source/fwkbase.hxx
 jvmfwk/source/fwkutil.cxx
 jvmfwk/source/libxmlutil.cxx
-jvmfwk/source/libxmlutil.hxx
 l10ntools/inc/cfglex.hxx
 l10ntools/inc/cfgmerge.hxx
 l10ntools/inc/common.hxx
commit 600fbb77a0869723dd00b6ec1643bac1be2e211c
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Thu Apr 11 09:13:59 2019 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Thu Apr 11 17:25:04 2019 +0200

    tdf#122767 sc opengl: fix rendering artifacts after hiding a cell comment
    
    Actually this is not specific to opengl, affects e.g. the Linux gen
    backend as well, it just doesn't happen with the Windows gdi backend.
    
    The rendering of the caption itself was OK. Focusing on the arrow
    polygon at the end of the comment's "tail" (connector polyline):
    
    - What gets painted is determined by SdrCaptionObj ->
      ViewContactOfSdrCaptionObj::createViewIndependentPrimitive2DSequence(),
      which produces a PolyPolygonColorPrimitive2D, which is then processed by
      VclPixelProcessor2D::tryDrawPolyPolygonColorPrimitive2DDirect().
    
    - The polygon passed to VCL there is within the bounds of the
      invalidation rectangle set in ScNoteMarker::TimeHdl().
    
    So it seems the only reason sometimes these 1px rendering artifacts are
    left around is anti-aliasing. Fix those by simply extending the
    invalidation rectangle in each direction.
    
    (cherry picked from commit 37aa4f0d64e276c46821ef6122483fb6b4c04781)
    
    Change-Id: I37b8e666999d3ff5ee1328fca7ac017ee8c7e9e0
    Reviewed-on: https://gerrit.libreoffice.org/70585
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/sc/source/ui/view/notemark.cxx b/sc/source/ui/view/notemark.cxx
index b18d54a44173..87da6bed3333 100644
--- a/sc/source/ui/view/notemark.cxx
+++ b/sc/source/ui/view/notemark.cxx
@@ -172,21 +172,30 @@ void ScNoteMarker::InvalidateWin()
 {
     if (m_bVisible)
     {
-        m_pWindow->Invalidate( OutputDevice::LogicToLogic(m_aRect, m_aMapMode, m_pWindow->GetMapMode()) );
+        // Extend the invalidated rectangle by 1 pixel in each direction in case AA would slightly
+        // paint outside the nominal area.
+        tools::Rectangle aRect(m_aRect);
+        const Size aPixelSize = m_pWindow->PixelToLogic(Size(1, 1));
+        aRect.AdjustLeft(-aPixelSize.getWidth());
+        aRect.AdjustTop(-aPixelSize.getHeight());
+        aRect.AdjustRight(aPixelSize.getWidth());
+        aRect.AdjustBottom(aPixelSize.getHeight());
+
+        m_pWindow->Invalidate( OutputDevice::LogicToLogic(aRect, m_aMapMode, m_pWindow->GetMapMode()) );
 
         if ( m_pRightWin || m_pBottomWin )
         {
             Size aWinSize = m_pWindow->PixelToLogic( m_pWindow->GetOutputSizePixel(), m_aMapMode );
             if ( m_pRightWin )
-                m_pRightWin->Invalidate( OutputDevice::LogicToLogic(m_aRect,
+                m_pRightWin->Invalidate( OutputDevice::LogicToLogic(aRect,
                                         lcl_MoveMapMode( m_aMapMode, Size( aWinSize.Width(), 0 ) ),
                                         m_pRightWin->GetMapMode()) );
             if ( m_pBottomWin )
-                m_pBottomWin->Invalidate( OutputDevice::LogicToLogic(m_aRect,
+                m_pBottomWin->Invalidate( OutputDevice::LogicToLogic(aRect,
                                         lcl_MoveMapMode( m_aMapMode, Size( 0, aWinSize.Height() ) ),
                                         m_pBottomWin->GetMapMode()) );
             if ( m_pDiagWin )
-                m_pDiagWin->Invalidate( OutputDevice::LogicToLogic(m_aRect,
+                m_pDiagWin->Invalidate( OutputDevice::LogicToLogic(aRect,
                                         lcl_MoveMapMode( m_aMapMode, aWinSize ),
                                         m_pDiagWin->GetMapMode()) );
         }
commit c96949f171b98c3dc4bf954dbf10b1720725ab8f
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Apr 10 16:18:15 2019 +0900
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Apr 11 16:21:26 2019 +0200

    tdf#82009 TreeList move painting of drag target into Paint func.
    
    When we drag a entry in TreeListBox, we execute a PaintDDCursor
    which paints a "cursor" of a possible drag target (for example
    to show where the entry will be moved to if we want to change the
    order). The problem with this fuction is that it paints a line
    directlly at that location, and that it uses invert raster
    operation to draw a line. So to hide the line it just needs to
    draw again. On MacOS this invertion causes a problem and draws
    the whole area black, which is the cause of this bug.
    
    So instead of inverting the drawing of the drag target cursor
    has now been moved into the main Paint method, where it redraws
    the whole entry, and if present, also the drag target cursor.
    This means that all we need to do is Invalidate the entry,
    which then just gets redrawn in a normal Paint pass.
    
    One exception is still MacOS, which doesn't invalidate the entry,
    but redraws the entry directly. DnD is MacOS is a bit different
    as it is not async (if I understand correctly) so the invalidate
    has no effect.
    
    Change-Id: I8542f47940a3b90114ea4bbbac57fd303ca3434b
    Reviewed-on: https://gerrit.libreoffice.org/70521
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 14abbc6e86ba234996dfed477a54030adeac2a52)
    Reviewed-on: https://gerrit.libreoffice.org/70526
    Reviewed-by: Andras Timar <andras.timar at collabora.com>

diff --git a/include/vcl/svimpbox.hxx b/include/vcl/svimpbox.hxx
index 88c068874165..e26594969250 100644
--- a/include/vcl/svimpbox.hxx
+++ b/include/vcl/svimpbox.hxx
@@ -291,7 +291,7 @@ public:
     void                MakeVisible( SvTreeListEntry* pEntry, bool bMoveToTop = false );
     void                ScrollToAbsPos( long nPos );
 
-    void                PaintDDCursor( SvTreeListEntry* );
+    void                PaintDDCursor(SvTreeListEntry* pEntry, bool bShow);
 
     // Images
     inline Image&       implGetImageLocation( const ImageType _eType );
diff --git a/include/vcl/viewdataentry.hxx b/include/vcl/viewdataentry.hxx
index 1277b75edf29..8bf5c6a30b8a 100644
--- a/include/vcl/viewdataentry.hxx
+++ b/include/vcl/viewdataentry.hxx
@@ -51,6 +51,8 @@ class VCL_DLLPUBLIC SvViewDataEntry
     bool mbExpanded:1;
     bool mbFocused:1;
     bool mbSelectable:1;
+    bool mbDragTarget:1;
+
     tools::Rectangle maPaintRectangle;
 
 public:
@@ -63,11 +65,16 @@ public:
     bool IsExpanded() const { return mbExpanded;}
     bool HasFocus() const { return mbFocused;}
     bool IsSelectable() const { return mbSelectable;}
+    bool IsDragTarget() const { return mbDragTarget;}
     void SetFocus( bool bFocus );
     void SetSelected( bool bSelected );
     void SetHighlighted( bool bHighlighted );
     void SetExpanded( bool bExpanded );
     void SetSelectable( bool bSelectable );
+    void SetDragTarget( bool bDragTarget )
+    {
+        mbDragTarget = bDragTarget;
+    }
 
     void Init(size_t nSize);
 
diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx
index a39b18744878..6ba41bbf0823 100644
--- a/vcl/source/treelist/svimpbox.cxx
+++ b/vcl/source/treelist/svimpbox.cxx
@@ -2872,23 +2872,20 @@ IMPL_LINK_NOARG(SvImpLBox, BeginDragHdl, Timer *, void)
     pView->StartDrag( 0, aAsyncBeginDragPos );
 }
 
-void SvImpLBox::PaintDDCursor( SvTreeListEntry* pInsertionPos )
+void SvImpLBox::PaintDDCursor(SvTreeListEntry* pEntry, bool bShow)
 {
-    long nY;
-    if( pInsertionPos )
+    if (pEntry)
     {
-        nY = GetEntryLine( pInsertionPos );
-        nY += pView->GetEntryHeight();
+
+        SvViewDataEntry* pViewData = pView->GetViewData(pEntry);
+        pViewData->SetDragTarget(bShow);
+#ifdef MACOSX
+        // in MacOS we need to draw directly (as we are synchronuous) or no invalidation happens
+        pView->PaintEntry1(*pEntry, GetEntryLine(pEntry), *pView);
+#else
+        InvalidateEntry(pEntry);
+#endif
     }
-    else
-        nY = 1;
-    RasterOp eOldOp = pView->GetRasterOp();
-    pView->SetRasterOp( RasterOp::Invert );
-    Color aOldLineColor = pView->GetLineColor();
-    pView->SetLineColor( COL_BLACK );
-    pView->DrawLine( Point( 0, nY ), Point( aOutputSize.Width(), nY ) );
-    pView->SetLineColor( aOldLineColor );
-    pView->SetRasterOp( eOldOp );
 }
 
 void SvImpLBox::Command( const CommandEvent& rCEvt )
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 0ece3b5eb793..a276f3002922 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -687,7 +687,7 @@ void SvTreeListBox::ImplShowTargetEmphasis( SvTreeListEntry* pEntry, bool bShow)
         return;
     if ( !bShow && !(nImpFlags & SvTreeListBoxFlags::TARGEMPH_VIS) )
         return;
-    pImpl->PaintDDCursor( pEntry );
+    pImpl->PaintDDCursor( pEntry, bShow);
     if( bShow )
         nImpFlags |= SvTreeListBoxFlags::TARGEMPH_VIS;
     else
@@ -2629,7 +2629,6 @@ void SvTreeListBox::InvalidateEntry(SvTreeListEntry* pEntry)
 
 void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::RenderContext& rRenderContext)
 {
-
     tools::Rectangle aRect; // multi purpose
 
     bool bHorSBar = pImpl->HasHorScrollBar();
@@ -2825,6 +2824,15 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render
         nCurTab++;
     }
 
+    if (pViewDataEntry->IsDragTarget())
+    {
+        rRenderContext.Push();
+        rRenderContext.SetLineColor(rSettings.GetDeactiveColor());
+        rRenderContext.SetFillColor(rSettings.GetDeactiveColor());
+        rRenderContext.DrawRect(tools::Rectangle(Point(0, nLine + nTempEntryHeight - 2), Size(nWidth, 2)));
+        rRenderContext.Pop();
+    }
+
     if (bCurFontIsSel || rEntry.GetTextColor())
     {
         rRenderContext.SetTextColor(aBackupTextColor);
diff --git a/vcl/source/treelist/viewdataentry.cxx b/vcl/source/treelist/viewdataentry.cxx
index b6eb6d79562c..855108d3e5e9 100644
--- a/vcl/source/treelist/viewdataentry.cxx
+++ b/vcl/source/treelist/viewdataentry.cxx
@@ -26,6 +26,7 @@ SvViewDataEntry::SvViewDataEntry() :
     mbExpanded(false),
     mbFocused(false),
     mbSelectable(true),
+    mbDragTarget(false),
     maPaintRectangle()
 {
 }
@@ -37,6 +38,7 @@ SvViewDataEntry::SvViewDataEntry( const SvViewDataEntry& rData ) :
     mbExpanded(rData.mbExpanded),
     mbFocused(false),
     mbSelectable(rData.mbSelectable),
+    mbDragTarget(false),
     maPaintRectangle(rData.maPaintRectangle)
 {
 }
commit cafed2e65e86d813822d2c650fa057f1a1f81c06
Author:     Patrick Jaap <patrick.jaap at tu-dresden.de>
AuthorDate: Wed Apr 3 14:58:05 2019 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Apr 11 10:15:29 2019 +0200

    Fix in convertToOOXMLHoriOrient: values of VertOrient were taken
    
    Change-Id: I47093292aeed5c0579dd4b365561ee86935632e4
    Reviewed-on: https://gerrit.libreoffice.org/70197
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
    (cherry picked from commit 2111f607973166ebc39414ba6d2019832bcfe4da)
    Reviewed-on: https://gerrit.libreoffice.org/70513
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 7d6a618b554f..aab60d8cec1c 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -512,24 +512,21 @@ static OString convertToOOXMLVertOrient(sal_Int16 nOrient)
     }
 }
 
-static OString convertToOOXMLHoriOrient(sal_Int16 nOrient)
+static OString convertToOOXMLHoriOrient(sal_Int16 nOrient, bool bIsPosToggle)
 {
     switch( nOrient )
     {
-        case text::VertOrientation::NONE:
+        case text::HoriOrientation::NONE:
             return OString();
-        case text::VertOrientation::CENTER:
-        case text::VertOrientation::LINE_CENTER:
-            return OString( "center" );
-        case text::VertOrientation::BOTTOM:
-            return OString( "bottom" );
-        case text::VertOrientation::LINE_BOTTOM:
-            return OString( "outside" );
-        case text::VertOrientation::TOP:
-            return OString( "top" );
-        case text::VertOrientation::LINE_TOP:
+        case text::HoriOrientation::LEFT:
+            return OString( bIsPosToggle ? "inside" : "left" );
+        case text::HoriOrientation::RIGHT:
+            return OString( bIsPosToggle ? "outside" : "right" );
+        case text::HoriOrientation::CENTER:
+        // fall-through indended
+        case text::HoriOrientation::FULL:
         default:
-            return OString( "inside" );
+            return OString( "center" );
     }
 }
 
@@ -8407,7 +8404,7 @@ void DocxAttributeOutput::FormatVertOrientation( const SwFormatVertOrient& rFlyV
 
 void DocxAttributeOutput::FormatHorizOrientation( const SwFormatHoriOrient& rFlyHori )
 {
-    OString sAlign   = convertToOOXMLHoriOrient( rFlyHori.GetHoriOrient() );
+    OString sAlign   = convertToOOXMLHoriOrient( rFlyHori.GetHoriOrient(), rFlyHori.IsPosToggle() );
     OString sHAnchor = convertToOOXMLHoriOrientRel( rFlyHori.GetRelationOrient() );
 
     if (m_rExport.SdrExporter().getTextFrameSyntax())
commit 62d6082f5a7a87631a4316b2107f1d8fc7e8c820
Author:     Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Wed Apr 10 13:32:25 2019 +0200
Commit:     Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Thu Apr 11 07:22:25 2019 +0200

    tdf#124652 Guard Gtk3KDE5FolderPicker::execute with SolarMutexGuard
    
    S.a. commit 8dbe0af729c9e054135a0f41706165033441f867 which already
    did the same for Gtk3KDE5FilePicker.
    
    Change-Id: I35f837b7b8fdaebc5625ff8ea5e20b3f48a3b4ec
    Reviewed-on: https://gerrit.libreoffice.org/70519
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.weghorn at posteo.de>
    (cherry picked from commit 728ee3839ea94e3391c36a847bf6b28c12ad7647)
    Reviewed-on: https://gerrit.libreoffice.org/70529
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>

diff --git a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
index ad89374b47c7..fcfe9f51d685 100644
--- a/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
+++ b/vcl/unx/gtk3_kde5/gtk3_kde5_folderpicker.cxx
@@ -76,7 +76,11 @@ void SAL_CALL Gtk3KDE5FolderPicker::setTitle(const OUString& aTitle)
     m_ipc.sendCommand(Commands::SetTitle, aTitle);
 }
 
-sal_Int16 SAL_CALL Gtk3KDE5FolderPicker::execute() { return m_ipc.execute(); }
+sal_Int16 SAL_CALL Gtk3KDE5FolderPicker::execute()
+{
+    SolarMutexGuard g;
+    return m_ipc.execute();
+}
 
 // XCancellable
 
commit ab52cb7cdf9d69c58b06f93a5488a534e12ebcd2
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Tue Apr 9 17:57:42 2019 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Wed Apr 10 15:44:12 2019 +0200

    tdf#124469 sw_redlinehide: fix PDF export of links to sequence fields
    
    Missed one call where the return value must be forwarded.
    
    (regression from 7d481f7ac1971be622520258a4b13ada29282844
     and 943d9be770e550d20ca72274fa5e914d1f61e605)
    
    Change-Id: Ic405b29a1dce982bfdd81eeb5d678ceb79690bfc
    Reviewed-on: https://gerrit.libreoffice.org/70469
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>
    (cherry picked from commit 0017c9b5720ddc4d6327ec06e05c681f08ea6f1d)
    Reviewed-on: https://gerrit.libreoffice.org/70501
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index 1acefbd6814b..4beec06b13da 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -469,7 +469,7 @@ typedef bool (SwWrtShell:: *FNSimpleMove)();
     void GotoOutline( SwOutlineNodes::size_type nIdx );
     bool GotoOutline( const OUString& rName );
     bool GotoRegion( const OUString& rName );
-    void GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType = 0,
+    bool GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType = 0,
         sal_uInt16 nSeqNo = 0 );
     bool GotoNextTOXBase( const OUString* pName = nullptr);
     bool GotoTable( const OUString& rName );
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index a832d8fb246c..d4dcbe5473fb 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1953,7 +1953,7 @@ bool SwView::JumpToSwMark( const OUString& rMark )
                 {
                     sal_uInt16 nSeqNo = sName.copy( nNoPos + 1 ).toInt32();
                     sName = sName.copy( 0, nNoPos );
-                    m_pWrtShell->GotoRefMark( sName, REF_SEQUENCEFLD, nSeqNo );
+                    bRet = m_pWrtShell->GotoRefMark(sName, REF_SEQUENCEFLD, nSeqNo);
                 }
             }
             else if( sCmp == "text" )
diff --git a/sw/source/uibase/wrtsh/move.cxx b/sw/source/uibase/wrtsh/move.cxx
index ef35f0922ec2..14f7bf53f70f 100644
--- a/sw/source/uibase/wrtsh/move.cxx
+++ b/sw/source/uibase/wrtsh/move.cxx
@@ -628,13 +628,14 @@ bool SwWrtShell::GotoRegion( const OUString& rName )
     return bRet;
  }
 
-void SwWrtShell::GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType,
+bool SwWrtShell::GotoRefMark( const OUString& rRefMark, sal_uInt16 nSubType,
                                     sal_uInt16 nSeqNo )
 {
     SwPosition aPos = *GetCursor()->GetPoint();
     bool bRet = SwCursorShell::GotoRefMark(rRefMark, nSubType, nSeqNo);
     if (bRet)
         m_aNavigationMgr.addEntry(aPos);
+    return bRet;
 }
 
 bool SwWrtShell::GotoNextTOXBase( const OUString* pName )
commit 4c8f8038459c503121adb895129101dd4b2923a9
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Tue Apr 9 17:15:50 2019 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Wed Apr 10 15:43:56 2019 +0200

    tdf#124586 sw_redlinehide: fix crash in SwTextNode::NumRuleChgd()
    
    (regression from c180c9447256588fe5e7991e06642883574760ae)
    
    Change-Id: Ie3c935ee5dd42187ca8ad2b28406b80e63c0d1e3
    Reviewed-on: https://gerrit.libreoffice.org/70467
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>
    Tested-by: Michael Stahl <Michael.Stahl at cib.de>
    (cherry picked from commit 7587e39014c1b6ed505e9c10d9f0f0803fc986ac)
    Reviewed-on: https://gerrit.libreoffice.org/70500
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 0a98d0fd4539..c8719a4316d6 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -2864,7 +2864,10 @@ void SwTextNode::NumRuleChgd()
         if ( pNumRule && pNumRule != GetNum()->GetNumRule() )
         {
             mpNodeNum->ChangeNumRule( *pNumRule );
-            mpNodeNumRLHidden->ChangeNumRule( *pNumRule );
+            if (mpNodeNumRLHidden)
+            {
+                mpNodeNumRLHidden->ChangeNumRule(*pNumRule);
+            }
         }
     }
 
commit ba5aa1e7ddf0e538132bacae059a66a3802f5693
Author:     Patrick Jaap <patrick.jaap at tu-dresden.de>
AuthorDate: Thu Feb 14 10:00:36 2019 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Apr 10 11:52:26 2019 +0200

    FIX: Use correct table x/y postion in docx export
    
    Until now we exported the original x/y position values of the table
    from the grabbag. Ignoring users actions like moving the table around.
    
    Now, we compute the position from the parent frame and write the actual position
    in the docx file.
    
    Change-Id: I25a09f9c7c8fbe49acbd19e2b1440c7fa90b8aff
    Reviewed-on: https://gerrit.libreoffice.org/67969
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    (cherry picked from commit 4f30b2ab729eb7f024e8078acbc099b25f588e9f)
    Reviewed-on: https://gerrit.libreoffice.org/70306

diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index 70fb4a16a73e..f3faf8cfab15 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -1219,6 +1219,17 @@ DECLARE_OOXMLEXPORT_TEST(testTdf81345_045Original,"tdf81345.docx")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(6736947), getProperty<sal_Int32>(xStyle, "CharColor"));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testDocxTablePosition, "floating-table-position.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+        return;
+
+    // the exported positions were wrong due to some missing shifting in the export code
+    assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblpPr", "tblpX", "3494");
+    assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tblPr/w:tblpPr", "tblpY", "4611");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index dfb12d1cc25e..7d6a618b554f 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -3848,6 +3848,8 @@ void DocxAttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
         {
             FastAttributeList *attrListTablePos = FastSerializerHelper::createAttrList( );
             uno::Sequence<beans::PropertyValue> aTablePosition = rGrabBagElement.second.get<uno::Sequence<beans::PropertyValue> >();
+            // look for a surrounding frame and take it's position values
+            const ww8::Frame* pFrame = m_rExport.GetFloatingTableFrame();
             for (sal_Int32 i = 0; i < aTablePosition.getLength(); ++i)
             {
                 if (aTablePosition[i].Name == "vertAnchor" && !aTablePosition[i].Value.get<OUString>().isEmpty())
@@ -3888,11 +3890,42 @@ void DocxAttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t
                 }
                 else if (aTablePosition[i].Name == "tblpX")
                 {
-                    attrListTablePos->add( FSNS( XML_w, XML_tblpX ), OString::number( aTablePosition[i].Value.get<sal_Int32>() ) );
+                    sal_Int32 nValue = 0;
+                    if (pFrame)
+                    {
+                        nValue = pFrame->GetFrameFormat().GetHoriOrient().GetPos();
+                        // we need to revert the additional shift introduced by
+                        // lcl_DecrementHoriOrientPosition() in writerfilter
+                        // 1st: left distance of the table
+                        const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
+                        const SwFrameFormat * pFrameFormat = pTabBox->GetFrameFormat();
+                        const SvxBoxItem& rBox = pFrameFormat->GetBox( );
+                        sal_uInt16 nLeftDistance = rBox.GetDistance(SvxBoxItemLine::LEFT);
+                        nValue += nLeftDistance;
+
+                        // 2nd: if a left border is given, revert the shift by half the width
+                        // from lcl_DecrementHoriOrientPosition() in writerfilter
+                        if (const editeng::SvxBorderLine* pLeftBorder = rBox.GetLeft())
+                        {
+                            long nWidth = pLeftBorder->GetWidth();
+                            nValue += (nWidth / 2);
+                        }
+                    }
+                    else
+                        nValue = aTablePosition[i].Value.get<sal_Int32>();
+
+                    attrListTablePos->add( FSNS( XML_w, XML_tblpX ), OString::number( nValue ) );
                 }
                 else if (aTablePosition[i].Name == "tblpY")
                 {
-                    attrListTablePos->add( FSNS( XML_w, XML_tblpY ), OString::number( aTablePosition[i].Value.get<sal_Int32>() ) );
+                    sal_Int32 nValue = 0;
+                    if (pFrame)
+                        // no additional shift occur (like in the tblpX case)
+                        nValue = pFrame->GetFrameFormat().GetVertOrient().GetPos();
+                    else
+                        nValue = aTablePosition[i].Value.get<sal_Int32>();
+
+                    attrListTablePos->add( FSNS( XML_w, XML_tblpY ), OString::number( nValue ) );
                 }
             }
 
commit c74d2bdfdfa4e49a01a9b1ae16e7f36fd20eacb5
Author:     Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
AuthorDate: Tue Apr 9 14:40:01 2019 +0200
Commit:     Gerrit Code Review <gerrit at gerrit.libreoffice.org>
CommitDate: Tue Apr 9 14:47:51 2019 +0200

    Update git submodules
    
    * Update translations from branch 'libreoffice-6-2'
      - update translations for 6.2.3 rc2
    
        and force-fix errors using pocheck
    
        Change-Id: I17d9e99f7d51c2995ce361a893fdd7ca7078ab74

diff --git a/translations b/translations
index ea36cedef350..f6977c354df1 160000
--- a/translations
+++ b/translations
@@ -1 +1 @@
-Subproject commit ea36cedef350a7b3b175866b89553f04148c11af
+Subproject commit f6977c354df1a4f5ea383be0bc2749ec3ab0e0f8
commit f82e3b03162bff8ecd0409be21744f2c2b2c9144
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Apr 8 21:37:23 2019 +0200
Commit:     Michael Stahl <Michael.Stahl at cib.de>
CommitDate: Tue Apr 9 14:37:47 2019 +0200

    tdf#123747 xmlsecurity, ODF sign roundtrip: preserve invalid reference type
    
    Only add the correct type to new signatures to avoid breaking the hash
    of old ones.
    
    (cherry picked from commit 8a9d8238bd8f903393ff1184aa37f8973c81e2ba)
    
    Conflicts:
            xmlsecurity/qa/unit/signing/signing.cxx
    
    Change-Id: I30f892b292f84a0575a3d4ef5ccf3eddbe0090ca
    Reviewed-on: https://gerrit.libreoffice.org/70451
    Tested-by: Jenkins
    Tested-by: Xisco Faulí <xiscofauli at libreoffice.org>
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>

diff --git a/include/svl/sigstruct.hxx b/include/svl/sigstruct.hxx
index 3498aff008fa..ceed929752ab 100644
--- a/include/svl/sigstruct.hxx
+++ b/include/svl/sigstruct.hxx
@@ -48,6 +48,8 @@ struct SignatureReferenceInformation
     // For ODF: XAdES digests (SHA256) or the old SHA1, from css::xml::crypto::DigestID
     sal_Int32  nDigestID;
     OUString   ouDigestValue;
+    /// Type of the reference: an URI (newer idSignedProperties references) or empty.
+    OUString ouType;
 
     SignatureReferenceInformation() :
         nType(SignatureReferenceType::SAMEDOCUMENT),
@@ -57,12 +59,13 @@ struct SignatureReferenceInformation
     {
     }
 
-    SignatureReferenceInformation( SignatureReferenceType type, sal_Int32 digestID, const OUString& uri ) :
+    SignatureReferenceInformation( SignatureReferenceType type, sal_Int32 digestID, const OUString& uri, const OUString& rType ) :
         SignatureReferenceInformation()
     {
         nType = type;
         nDigestID = digestID;
         ouURI = uri;
+        ouType = rType;
     }
 };
 
diff --git a/xmlsecurity/inc/xsecctl.hxx b/xmlsecurity/inc/xsecctl.hxx
index 2620bc6cbea9..e84ea1dbe042 100644
--- a/xmlsecurity/inc/xsecctl.hxx
+++ b/xmlsecurity/inc/xsecctl.hxx
@@ -89,10 +89,10 @@ public:
         xReferenceResolvedListener = xListener;
     }
 
-    void addReference( SignatureReferenceType type, sal_Int32 digestID, const OUString& uri, sal_Int32 keeperId )
+    void addReference( SignatureReferenceType type, sal_Int32 digestID, const OUString& uri, sal_Int32 keeperId, const OUString& rType )
     {
         signatureInfor.vSignatureReferenceInfors.push_back(
-                SignatureReferenceInformation(type, digestID, uri));
+                SignatureReferenceInformation(type, digestID, uri, rType));
         vKeeperIds.push_back( keeperId );
     }
 };
@@ -261,7 +261,8 @@ private:
     void switchGpgSignature();
     void addReference(
         const OUString& ouUri,
-        sal_Int32 nDigestID );
+        sal_Int32 nDigestID,
+        const OUString& ouType );
     void addStreamReference(
         const OUString& ouUri,
         bool isBinary,
diff --git a/xmlsecurity/qa/unit/signing/data/notype-xades.odt b/xmlsecurity/qa/unit/signing/data/notype-xades.odt
new file mode 100644
index 000000000000..4f96d4bd89c0
Binary files /dev/null and b/xmlsecurity/qa/unit/signing/data/notype-xades.odt differ
diff --git a/xmlsecurity/qa/unit/signing/signing.cxx b/xmlsecurity/qa/unit/signing/signing.cxx
index d9507982486b..bed9d0df8b0f 100644
--- a/xmlsecurity/qa/unit/signing/signing.cxx
+++ b/xmlsecurity/qa/unit/signing/signing.cxx
@@ -101,6 +101,7 @@ public:
 #endif
     void test96097Calc();
     void test96097Doc();
+    void testXAdESNotype();
     /// Creates a XAdES signature from scratch.
     void testXAdES();
     /// Works with an existing good XAdES signature.
@@ -144,6 +145,7 @@ public:
 #endif
     CPPUNIT_TEST(test96097Calc);
     CPPUNIT_TEST(test96097Doc);
+    CPPUNIT_TEST(testXAdESNotype);
     CPPUNIT_TEST(testXAdES);
     CPPUNIT_TEST(testXAdESGood);
     CPPUNIT_TEST(testSignatureLineOOXML);
@@ -781,6 +783,65 @@ void SigningTest::test96097Doc()
     }
 }
 
+void SigningTest::testXAdESNotype()
+{
+    // Create a working copy.
+    utl::TempFile aTempFile;
+    aTempFile.EnableKillingFile();
+    OUString aURL = aTempFile.GetURL();
+    CPPUNIT_ASSERT_EQUAL(
+        osl::File::RC::E_None,
+        osl::File::copy(m_directories.getURLFromSrc(DATA_DIRECTORY) + "notype-xades.odt", aURL));
+
+    // Read existing signature.
+    DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content);
+    CPPUNIT_ASSERT(aManager.init());
+    uno::Reference<embed::XStorage> xStorage
+        = comphelper::OStorageHelper::GetStorageOfFormatFromURL(
+            ZIP_STORAGE_FORMAT_STRING, aTempFile.GetURL(), embed::ElementModes::READWRITE);
+    CPPUNIT_ASSERT(xStorage.is());
+    aManager.mxStore = xStorage;
+    aManager.maSignatureHelper.SetStorage(xStorage, "1.2");
+    aManager.read(/*bUseTempStream=*/false);
+
+    // Create a new signature.
+    uno::Reference<security::XCertificate> xCertificate
+        = getCertificate(aManager, svl::crypto::SignatureMethodAlgorithm::RSA);
+    if (!xCertificate.is())
+        return;
+    sal_Int32 nSecurityId;
+    aManager.add(xCertificate, mxSecurityContext, /*rDescription=*/OUString(), nSecurityId,
+                 /*bAdESCompliant=*/true);
+
+    // Write to storage.
+    aManager.read(/*bUseTempStream=*/true);
+    aManager.write(/*bXAdESCompliantIfODF=*/true);
+    uno::Reference<embed::XTransactedObject> xTransactedObject(xStorage, uno::UNO_QUERY);
+    xTransactedObject->commit();
+
+    // Parse the resulting XML.
+    uno::Reference<embed::XStorage> xMetaInf
+        = xStorage->openStorageElement("META-INF", embed::ElementModes::READ);
+    uno::Reference<io::XInputStream> xInputStream(
+        xMetaInf->openStreamElement("documentsignatures.xml", embed::ElementModes::READ),
+        uno::UNO_QUERY);
+    std::shared_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(xInputStream, true));
+    xmlDocPtr pXmlDoc = parseXmlStream(pStream.get());
+
+    // Without the accompanying fix in place, this test would have failed with "unexpected 'Type'
+    // attribute", i.e. the signature without such an attribute was not preserved correctly.
+    assertXPathNoAttribute(pXmlDoc,
+                           "/odfds:document-signatures/dsig:Signature[1]/dsig:SignedInfo/"
+                           "dsig:Reference[@URI='#idSignedProperties']",
+                           "Type");
+
+    // New signature always has the Type attribute.
+    assertXPath(pXmlDoc,
+                "/odfds:document-signatures/dsig:Signature[2]/dsig:SignedInfo/"
+                "dsig:Reference[@URI='#idSignedProperties']",
+                "Type", "http://uri.etsi.org/01903#SignedProperties");
+}
+
 void SigningTest::testXAdES()
 {
     // Create an empty document, store it to a tempfile and load it as a storage.
diff --git a/xmlsecurity/source/helper/ooxmlsecparser.cxx b/xmlsecurity/source/helper/ooxmlsecparser.cxx
index 6844162c0151..457ef66bf24b 100644
--- a/xmlsecurity/source/helper/ooxmlsecparser.cxx
+++ b/xmlsecurity/source/helper/ooxmlsecparser.cxx
@@ -72,7 +72,7 @@ void SAL_CALL OOXMLSecParser::startElement(const OUString& rName, const uno::Ref
     {
         OUString aURI = xAttribs->getValueByName("URI");
         if (aURI.startsWith("#"))
-            m_pXSecController->addReference(aURI.copy(1), xml::crypto::DigestID::SHA1);
+            m_pXSecController->addReference(aURI.copy(1), xml::crypto::DigestID::SHA1, OUString());
         else
         {
             m_aReferenceURI = aURI;
diff --git a/xmlsecurity/source/helper/xsecctl.cxx b/xmlsecurity/source/helper/xsecctl.cxx
index f6d1f89b6a6b..5fdc45c2c8c0 100644
--- a/xmlsecurity/source/helper/xsecctl.cxx
+++ b/xmlsecurity/source/helper/xsecctl.cxx
@@ -662,12 +662,12 @@ void XSecController::exportSignature(
                         "URI",
                         "#" + refInfor.ouURI);
 
-                    if (bXAdESCompliantIfODF && refInfor.ouURI == "idSignedProperties")
+                    if (bXAdESCompliantIfODF && refInfor.ouURI == "idSignedProperties" && !refInfor.ouType.isEmpty())
                     {
                         // The reference which points to the SignedProperties
                         // shall have this specific type.
                         pAttributeList->AddAttribute("Type",
-                                                     "http://uri.etsi.org/01903#SignedProperties");
+                                                     refInfor.ouType);
                     }
                 }
 
diff --git a/xmlsecurity/source/helper/xsecparser.cxx b/xmlsecurity/source/helper/xsecparser.cxx
index d24f5f5c5ec8..532ba07a0298 100644
--- a/xmlsecurity/source/helper/xsecparser.cxx
+++ b/xmlsecurity/source/helper/xsecparser.cxx
@@ -129,12 +129,14 @@ void SAL_CALL XSecParser::startElement(
         {
             OUString ouUri = xAttribs->getValueByName("URI");
             SAL_WARN_IF( ouUri.isEmpty(), "xmlsecurity.helper", "URI is empty" );
+            // Remember the type of this reference.
+            OUString ouType = xAttribs->getValueByName("Type");
             if (ouUri.startsWith("#"))
             {
                 /*
                 * remove the first character '#' from the attribute value
                 */
-                m_pXSecController->addReference( ouUri.copy(1), m_nReferenceDigestID );
+                m_pXSecController->addReference( ouUri.copy(1), m_nReferenceDigestID, ouType );
             }
             else
             {
diff --git a/xmlsecurity/source/helper/xsecsign.cxx b/xmlsecurity/source/helper/xsecsign.cxx
index da1122ccc3ec..d8089b1773b3 100644
--- a/xmlsecurity/source/helper/xsecsign.cxx
+++ b/xmlsecurity/source/helper/xsecsign.cxx
@@ -138,12 +138,13 @@ cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepar
     {
         internalSignatureInfor.signatureInfor.ouSignatureId = createId();
         internalSignatureInfor.signatureInfor.ouPropertyId = createId();
-        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouPropertyId, -1 );
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouPropertyId, -1, OUString() );
         size++;
 
         if (bXAdESCompliantIfODF)
         {
-            internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idSignedProperties", -1);
+            // We write a new reference, so it's possible to use the correct type URI.
+            internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idSignedProperties", -1, "http://uri.etsi.org/01903#SignedProperties");
             size++;
         }
 
@@ -151,17 +152,17 @@ cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepar
         {
             // Only mention the hash of the description in the signature if it's non-empty.
             internalSignatureInfor.signatureInfor.ouDescriptionPropertyId = createId();
-            internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1);
+            internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1, OUString());
             size++;
         }
     }
     else
     {
-        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idPackageObject", -1);
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idPackageObject", -1, OUString());
         size++;
-        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idOfficeObject", -1);
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idOfficeObject", -1, OUString());
         size++;
-        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idSignedProperties", -1);
+        internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, digestID, "idSignedProperties", -1, OUString());
         size++;
     }
 
@@ -189,7 +190,7 @@ void XSecController::signAStream( sal_Int32 securityId, const OUString& uri, boo
     if (index == -1)
     {
         InternalSignatureInformation isi(securityId, nullptr);
-        isi.addReference(type, digestID, uri, -1);
+        isi.addReference(type, digestID, uri, -1, OUString());
         m_vInternalSignatureInformations.push_back( isi );
     }
     else
@@ -197,7 +198,7 @@ void XSecController::signAStream( sal_Int32 securityId, const OUString& uri, boo
         // use sha512 for gpg signing unconditionally
         if (!m_vInternalSignatureInformations[index].signatureInfor.ouGpgCertificate.isEmpty())
             digestID = cssxc::DigestID::SHA512;
-        m_vInternalSignatureInformations[index].addReference(type, digestID, uri, -1);
+        m_vInternalSignatureInformations[index].addReference(type, digestID, uri, -1, OUString());
     }
 }
 
diff --git a/xmlsecurity/source/helper/xsecverify.cxx b/xmlsecurity/source/helper/xsecverify.cxx
index edd78902313b..305e5aa28128 100644
--- a/xmlsecurity/source/helper/xsecverify.cxx
+++ b/xmlsecurity/source/helper/xsecverify.cxx
@@ -148,7 +148,7 @@ void XSecController::switchGpgSignature()
 #endif
 }
 
-void XSecController::addReference( const OUString& ouUri, sal_Int32 nDigestID )
+void XSecController::addReference( const OUString& ouUri, sal_Int32 nDigestID, const OUString& ouType )
 {
     if (m_vInternalSignatureInformations.empty())
     {
@@ -156,7 +156,7 @@ void XSecController::addReference( const OUString& ouUri, sal_Int32 nDigestID )
         return;
     }
     InternalSignatureInformation &isi = m_vInternalSignatureInformations.back();
-    isi.addReference(SignatureReferenceType::SAMEDOCUMENT, nDigestID, ouUri, -1 );
+    isi.addReference(SignatureReferenceType::SAMEDOCUMENT, nDigestID, ouUri, -1, ouType );
 }
 
 void XSecController::addStreamReference(
@@ -189,7 +189,7 @@ void XSecController::addStreamReference(
         }
     }
 
-    isi.addReference(type, nDigestID, ouUri, -1);
+    isi.addReference(type, nDigestID, ouUri, -1, OUString());
 }
 
 void XSecController::setReferenceCount() const
commit 99ec13e699ff2788db7c8eda7d9c41c1faa3d94d
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Mar 25 13:30:07 2019 +0000
Commit:     Xisco Faulí <xiscofauli at libreoffice.org>
CommitDate: Tue Apr 9 10:39:32 2019 +0200

    Resolves: tdf#123550 allow returning to TRISTATE_INDET
    
    Change-Id: I3e4b18c0b3217e010c80fbddccebd547ee29253a
    Reviewed-on: https://gerrit.libreoffice.org/69675
    Tested-by: Jenkins
    Tested-by: Xisco Faulí <xiscofauli at libreoffice.org>
    Reviewed-by: Xisco Faulí <xiscofauli at libreoffice.org>

diff --git a/cui/source/inc/paragrph.hxx b/cui/source/inc/paragrph.hxx
index bbcb7b3d3f68..183dbba699dc 100644
--- a/cui/source/inc/paragrph.hxx
+++ b/cui/source/inc/paragrph.hxx
@@ -184,6 +184,18 @@ public:
     virtual void            PageCreated(const SfxAllItemSet& aSet) override;
 };
 
+struct TriStateEnabled
+{
+    TriState eState;
+    bool bTriStateEnabled;
+    TriStateEnabled()
+        : eState(TRISTATE_INDET)
+        , bTriStateEnabled(true)
+    {
+    }
+    void ButtonToggled(weld::ToggleButton& rToggle);
+};
+
 // class SvxExtParagraphTabPage ------------------------------------------
 /*
     [Description]
@@ -223,6 +235,15 @@ protected:
 private:
     SvxExtParagraphTabPage(TabPageParent pParent, const SfxItemSet& rSet);
 
+    TriStateEnabled aHyphenState;
+    TriStateEnabled aPageBreakState;
+    TriStateEnabled aApplyCollState;
+    TriStateEnabled aPageNumState;
+    TriStateEnabled aKeepTogetherState;
+    TriStateEnabled aKeepParaState;
+    TriStateEnabled aOrphanState;
+    TriStateEnabled aWidowState;
+
     bool                bPageBreak;
     bool                bHtmlMode;
     sal_uInt16          nStdPos;
@@ -260,6 +281,14 @@ private:
     std::unique_ptr<weld::SpinButton> m_xWidowRowNo;
     std::unique_ptr<weld::Label> m_xWidowRowLabel;
 
+    void HyphenClickHdl();
+    void PageNumBoxClickHdl();
+    void ApplyCollClickHdl();
+    void PageBreakHdl();
+    void KeepTogetherHdl();
+    void OrphanHdl();
+    void WidowHdl();
+
     DECL_LINK(PageBreakHdl_Impl, weld::ToggleButton&, void);
     DECL_LINK(KeepTogetherHdl_Impl, weld::ToggleButton&, void);
     DECL_LINK(WidowHdl_Impl, weld::ToggleButton&, void);
@@ -269,6 +298,7 @@ private:
     DECL_LINK(PageBreakPosHdl_Impl, weld::ComboBox&, void);
     DECL_LINK(PageBreakTypeHdl_Impl, weld::ComboBox&, void);
     DECL_LINK(PageNumBoxClickHdl_Impl, weld::ToggleButton&, void);
+    DECL_LINK(KeepParaBoxClickHdl_Impl, weld::ToggleButton&, void);
 
     virtual void            PageCreated(const SfxAllItemSet& aSet) override;
 };
diff --git a/cui/source/tabpages/paragrph.cxx b/cui/source/tabpages/paragrph.cxx
index f522b62b95d1..a8d9d8ab6003 100644
--- a/cui/source/tabpages/paragrph.cxx
+++ b/cui/source/tabpages/paragrph.cxx
@@ -1573,6 +1573,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
     {
         const SvxHyphenZoneItem& rHyphen =
             static_cast<const SvxHyphenZoneItem&>(rSet->Get( _nWhich ));
+        aHyphenState.bTriStateEnabled = false;
 
         bIsHyphen = rHyphen.IsHyphen();
         m_xHyphenBox->set_state(bIsHyphen ? TRISTATE_TRUE : TRISTATE_FALSE);
@@ -1599,6 +1600,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
     {
         case SfxItemState::SET:
         {
+            aPageNumState.bTriStateEnabled = false;
             m_xPageNumBox->set_state(TRISTATE_TRUE);
             SfxUInt16Item const*const pItem(rSet->GetItem<SfxUInt16Item>(_nWhich));
             const sal_uInt16 nPageNum(pItem->GetValue());
@@ -1607,6 +1609,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
         }
         case SfxItemState::DONTCARE:
         {
+            aPageNumState.bTriStateEnabled = true;
             m_xPageNumBox->set_state(TRISTATE_INDET);
             break;
         }
@@ -1614,6 +1617,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
         case SfxItemState::DEFAULT:
         case SfxItemState::DISABLED:
         {
+            aPageNumState.bTriStateEnabled = false;
             m_xPageNumBox->set_state(TRISTATE_FALSE);
             break;
         }
@@ -1631,6 +1635,8 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
 
         if ( eItemState >= SfxItemState::SET )
         {
+            aApplyCollState.bTriStateEnabled = false;
+
             const SvxPageModelItem& rModel =
                 static_cast<const SvxPageModelItem&>(rSet->Get( _nWhich ));
             const OUString& aStr( rModel.GetValue() );
@@ -1642,6 +1648,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
                 bIsPageModel = true;
 
                 m_xPageBreakBox->set_sensitive(true);
+                aPageBreakState.bTriStateEnabled = false;
                 m_xBreakTypeFT->set_sensitive(true);
                 m_xBreakTypeLB->set_sensitive(true);
                 m_xBreakPositionFT->set_sensitive(true);
@@ -1662,6 +1669,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
         }
         else if ( SfxItemState::DONTCARE == eItemState )
         {
+            aApplyCollState.bTriStateEnabled = true;
             m_xApplyCollBtn->set_state(TRISTATE_INDET);
             m_xApplyCollBox->set_active(-1);
         }
@@ -1688,6 +1696,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
                 // PageBreak not via CTRL-RETURN,
                 // then CheckBox can be freed
                 m_xPageBreakBox->set_sensitive(true);
+                aPageBreakState.bTriStateEnabled = false;
                 m_xBreakTypeFT->set_sensitive(true);
                 m_xBreakTypeLB->set_sensitive(true);
                 m_xBreakPositionFT->set_sensitive(true);
@@ -1743,7 +1752,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
         }
 
         PageBreakPosHdl_Impl(*m_xBreakPositionLB);
-        PageBreakHdl_Impl(*m_xPageBreakBox);
+        PageBreakHdl();
     }
 
     _nWhich = GetWhich( SID_ATTR_PARA_KEEP );
@@ -1751,6 +1760,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
 
     if ( eItemState >= SfxItemState::DEFAULT )
     {
+        aKeepParaState.bTriStateEnabled = false;
         const SvxFormatKeepItem& rKeep =
             static_cast<const SvxFormatKeepItem&>(rSet->Get( _nWhich ));
 
@@ -1771,6 +1781,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
     {
         const SvxFormatSplitItem& rSplit =
             static_cast<const SvxFormatSplitItem&>(rSet->Get( _nWhich ));
+        aKeepTogetherState.bTriStateEnabled = false;
 
         if ( !rSplit.GetValue() )
             m_xKeepTogetherBox->set_state(TRISTATE_TRUE);
@@ -1787,6 +1798,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
             {
                 const SvxWidowsItem& rWidow =
                     static_cast<const SvxWidowsItem&>(rSet->Get( _nWhich ));
+                aWidowState.bTriStateEnabled = false;
                 const sal_uInt16 nLines = rWidow.GetValue();
 
                 bool _bEnable = nLines > 0;
@@ -1810,6 +1822,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
                 const SvxOrphansItem& rOrphan =
                     static_cast<const SvxOrphansItem&>(rSet->Get( _nWhich ));
                 const sal_uInt16 nLines = rOrphan.GetValue();
+                aOrphanState.bTriStateEnabled = false;
 
                 bool _bEnable = nLines > 0;
                 m_xOrphanBox->set_state(_bEnable ? TRISTATE_TRUE : TRISTATE_FALSE);
@@ -1822,6 +1835,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
                 m_xOrphanBox->set_state(TRISTATE_INDET);
             else
                 m_xOrphanBox->set_sensitive(false);
+            aOrphanState.eState = m_xOrphanBox->get_state();
         }
     }
     else if ( SfxItemState::DONTCARE == eItemState )
@@ -1830,9 +1844,9 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* rSet )
         m_xKeepTogetherBox->set_sensitive(false);
 
     // so that everything is enabled correctly
-    KeepTogetherHdl_Impl(*m_xKeepTogetherBox);
-    WidowHdl_Impl(*m_xWidowBox);
-    OrphanHdl_Impl(*m_xOrphanBox);
+    KeepTogetherHdl();
+    WidowHdl();
+    OrphanHdl();
     ChangesApplied();
 }
 void SvxExtParagraphTabPage::ChangesApplied()
@@ -1921,6 +1935,7 @@ SvxExtParagraphTabPage::SvxExtParagraphTabPage(TabPageParent pParent, const SfxI
     m_xBreakTypeLB->connect_changed(LINK(this, SvxExtParagraphTabPage, PageBreakTypeHdl_Impl));
     m_xBreakPositionLB->connect_changed(LINK(this, SvxExtParagraphTabPage, PageBreakPosHdl_Impl));
     m_xPageNumBox->connect_toggled(LINK(this, SvxExtParagraphTabPage, PageNumBoxClickHdl_Impl));
+    m_xKeepParaBox->connect_toggled(LINK(this, SvxExtParagraphTabPage, KeepParaBoxClickHdl_Impl));
 
     SfxObjectShell* pSh = SfxObjectShell::Current();
     if ( pSh )
@@ -1963,7 +1978,7 @@ SvxExtParagraphTabPage::~SvxExtParagraphTabPage()
 {
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, PageBreakHdl_Impl, weld::ToggleButton&, void)
+void SvxExtParagraphTabPage::PageBreakHdl()
 {
     switch (m_xPageBreakBox->get_state())
     {
@@ -2003,14 +2018,26 @@ IMPL_LINK_NOARG(SvxExtParagraphTabPage, PageBreakHdl_Impl, weld::ToggleButton&,
     }
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, KeepTogetherHdl_Impl, weld::ToggleButton&, void)
+IMPL_LINK(SvxExtParagraphTabPage, PageBreakHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aPageBreakState.ButtonToggled(rToggle);
+    PageBreakHdl();
+}
+
+void SvxExtParagraphTabPage::KeepTogetherHdl()
 {
     bool bEnable = m_xKeepTogetherBox->get_state() == TRISTATE_FALSE;
     m_xWidowBox->set_sensitive(bEnable);
     m_xOrphanBox->set_sensitive(bEnable);
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, WidowHdl_Impl, weld::ToggleButton&, void)
+IMPL_LINK(SvxExtParagraphTabPage, KeepTogetherHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aKeepTogetherState.ButtonToggled(rToggle);
+    KeepTogetherHdl();
+}
+
+void SvxExtParagraphTabPage::WidowHdl()
 {
     switch (m_xWidowBox->get_state())
     {
@@ -2030,7 +2057,39 @@ IMPL_LINK_NOARG(SvxExtParagraphTabPage, WidowHdl_Impl, weld::ToggleButton&, void
     }
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, OrphanHdl_Impl, weld::ToggleButton&, void)
+IMPL_LINK(SvxExtParagraphTabPage, WidowHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aWidowState.ButtonToggled(rToggle);
+    WidowHdl();
+}
+
+void TriStateEnabled::ButtonToggled(weld::ToggleButton& rToggle)
+{
+    if (bTriStateEnabled)
+    {
+        switch (eState)
+        {
+            case TRISTATE_INDET:
+                rToggle.set_state(TRISTATE_FALSE);
+                break;
+            case TRISTATE_TRUE:
+                rToggle.set_state(TRISTATE_INDET);
+                break;
+            case TRISTATE_FALSE:
+                rToggle.set_state(TRISTATE_TRUE);
+                break;
+        }
+    }
+    eState = rToggle.get_state();
+}
+
+IMPL_LINK(SvxExtParagraphTabPage, OrphanHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aOrphanState.ButtonToggled(rToggle);
+    OrphanHdl();
+}
+
+void SvxExtParagraphTabPage::OrphanHdl()
 {
     switch (m_xOrphanBox->get_state())
     {
@@ -2051,7 +2110,7 @@ IMPL_LINK_NOARG(SvxExtParagraphTabPage, OrphanHdl_Impl, weld::ToggleButton&, voi
     }
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, HyphenClickHdl_Impl, weld::ToggleButton&, void)
+void SvxExtParagraphTabPage::HyphenClickHdl()
 {
     bool bEnable = m_xHyphenBox->get_state() == TRISTATE_TRUE;
     m_xBeforeText->set_sensitive(bEnable);
@@ -2063,7 +2122,13 @@ IMPL_LINK_NOARG(SvxExtParagraphTabPage, HyphenClickHdl_Impl, weld::ToggleButton&
     m_xHyphenBox->set_state(bEnable ? TRISTATE_TRUE : TRISTATE_FALSE);
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, ApplyCollClickHdl_Impl, weld::ToggleButton&, void)
+IMPL_LINK(SvxExtParagraphTabPage, HyphenClickHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aHyphenState.ButtonToggled(rToggle);
+    HyphenClickHdl();
+}
+
+void SvxExtParagraphTabPage::ApplyCollClickHdl()
 {
     bool bEnable = false;
     if (m_xApplyCollBtn->get_state() == TRISTATE_TRUE && m_xApplyCollBox->get_count())
@@ -2083,6 +2148,12 @@ IMPL_LINK_NOARG(SvxExtParagraphTabPage, ApplyCollClickHdl_Impl, weld::ToggleButt
     }
 }
 
+IMPL_LINK(SvxExtParagraphTabPage, ApplyCollClickHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aApplyCollState.ButtonToggled(rToggle);
+    ApplyCollClickHdl();
+}
+
 IMPL_LINK(SvxExtParagraphTabPage, PageBreakPosHdl_Impl, weld::ComboBox&, rListBox, void)
 {
     if (0 == rListBox.get_active())
@@ -2124,11 +2195,22 @@ IMPL_LINK(SvxExtParagraphTabPage, PageBreakTypeHdl_Impl, weld::ComboBox&, rListB
         PageBreakPosHdl_Impl(*m_xBreakPositionLB);
 }
 
-IMPL_LINK_NOARG(SvxExtParagraphTabPage, PageNumBoxClickHdl_Impl, weld::ToggleButton&, void)
+void SvxExtParagraphTabPage::PageNumBoxClickHdl()
 {
     m_xPagenumEdit->set_sensitive(m_xPageNumBox->get_state() == TRISTATE_TRUE);
 }
 
+IMPL_LINK(SvxExtParagraphTabPage, PageNumBoxClickHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aPageNumState.ButtonToggled(rToggle);
+    PageNumBoxClickHdl();
+}
+
+IMPL_LINK(SvxExtParagraphTabPage, KeepParaBoxClickHdl_Impl, weld::ToggleButton&, rToggle, void)
+{
+    aKeepParaState.ButtonToggled(rToggle);
+}
+
 void SvxExtParagraphTabPage::PageCreated(const SfxAllItemSet& aSet)
 {
     const SfxBoolItem* pDisablePageBreakItem = aSet.GetItem<SfxBoolItem>(SID_DISABLE_SVXEXTPARAGRAPHTABPAGE_PAGEBREAK, false);
diff --git a/cui/uiconfig/ui/textflowpage.ui b/cui/uiconfig/ui/textflowpage.ui
index 717590916352..8610e863564e 100644
--- a/cui/uiconfig/ui/textflowpage.ui
+++ b/cui/uiconfig/ui/textflowpage.ui
@@ -23,18 +23,21 @@
   <object class="GtkAdjustment" id="adjustment4">
     <property name="lower">2</property>
     <property name="upper">9</property>
+    <property name="value">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment5">
     <property name="lower">2</property>
     <property name="upper">9</property>
+    <property name="value">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment6">
     <property name="lower">2</property>
     <property name="upper">9</property>
+    <property name="value">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
commit 7420a6175358fdc1cda133c0ed2eab693cc72e54
Author:     Mike Kaganski <mike.kaganski at collabora.com>
AuthorDate: Sat Apr 6 17:04:06 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Apr 9 09:59:03 2019 +0200

    tdf#124579: ensure to provide an event to wake up main loop when notifying
    
    Without that, Request::waitProcessMessages might wait indefinitely for
    Application::Yield() to return; while the latter would wait for a message
    in GetMessage. If there's no visible LO window, the message might never
    arrive by itself.
    
    Co-authored-by: Jan-Marek Glogowski <glogow at fbihome.de>
    
    Change-Id: Ie2622053a8d4467eb1cbd579d8496cb5ddef08aa
    Reviewed-on: https://gerrit.libreoffice.org/70346
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
    Tested-by: Mike Kaganski <mike.kaganski at collabora.com>
    (cherry picked from commit e3d737119fc7bdce224a173896486f376f95a417)
    Reviewed-on: https://gerrit.libreoffice.org/70349
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/fpicker/source/win32/asyncrequests.cxx b/fpicker/source/win32/asyncrequests.cxx
index 5a5b1decf180..fcd7eadc3010 100644
--- a/fpicker/source/win32/asyncrequests.cxx
+++ b/fpicker/source/win32/asyncrequests.cxx
@@ -19,6 +19,7 @@
 
 #include "asyncrequests.hxx"
 #include <vcl/svapp.hxx>
+#include <vcl/winscheduler.hxx>
 #include <osl/mutex.hxx>
 
 namespace fpicker{
@@ -56,6 +57,10 @@ void Request::waitProcessMessages()
 void Request::notify()
 {
     m_aJoiner.set();
+    // Make sure that main loop receives at least this message to return from GetMessage and recheck
+    // the condition, even in case when there's no visible application windows present, and thus no
+    // other messages might arrive to the main loop.
+    WinScheduler::PostDummyMessage();
 }
 

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list