diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2019-08-02 07:08:04 +1000 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2019-08-02 02:02:34 +0200 |
commit | 1a1f4e73b7ab9e5b071aab74c8d7e27ba2b2d29c (patch) | |
tree | 7bd9142995a74e4e8d7e585cfac272731e2a3d88 /cui/source/dialogs/scriptdlg.cxx | |
parent | 02d16928bcd1eb2b6dfd7524ea9af591c0f5f2e0 (diff) |
tdf#126643: avoid unnecessary asking for JRE in script organizer dialog
Use two-pass search for the needed language node; if it fails with Java
interaction disabled, only then repeat the search with it enabled, like
in commit f3ce30ec75a4d7116b9cd4d7b21d9aaa0e237eeb.
Change-Id: Icde5dbeb552a6837af02182f7b8cbbc90765c5a5
Reviewed-on: https://gerrit.libreoffice.org/76831
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'cui/source/dialogs/scriptdlg.cxx')
-rw-r--r-- | cui/source/dialogs/scriptdlg.cxx | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx index 349ab2c7062c..5c4035fb01dc 100644 --- a/cui/source/dialogs/scriptdlg.cxx +++ b/cui/source/dialogs/scriptdlg.cxx @@ -24,6 +24,7 @@ #include <sfx2/objsh.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> +#include <uno/current_context.hxx> #include <strings.hrc> #include <bitmaps.hlst> @@ -46,6 +47,7 @@ #include <com/sun/star/script/XInvocation.hpp> #include <com/sun/star/document/XEmbeddedScripts.hpp> +#include <comphelper/DisableInteractionHelper.hxx> #include <comphelper/documentinfo.hxx> #include <comphelper/processfactory.hxx> @@ -243,14 +245,24 @@ SvxScriptOrgDialog::getLangNodeFromRootNode( Reference< browse::XBrowseNode > co try { - Sequence < Reference< browse::XBrowseNode > > children = rootNode->getChildNodes(); - for ( sal_Int32 n = 0; n < children.getLength(); n++ ) + auto tryFind = [&] { + const Sequence<Reference<browse::XBrowseNode>> children = rootNode->getChildNodes(); + const auto it = std::find_if(children.begin(), children.end(), + [&](const Reference<browse::XBrowseNode>& child) { + return child->getName() == language; + }); + return (it != children.end()) ? *it : nullptr; + }; { - if ( children[ n ]->getName() == language ) - { - langNode = children[ n ]; - break; - } + // First try without Java interaction, to avoid warnings for non-JRE-dependent providers + css::uno::ContextLayer layer( + new comphelper::NoEnableJavaInteractionContext(css::uno::getCurrentContext())); + langNode = tryFind(); + } + if (!langNode) + { + // Now try with Java interaction enabled + langNode = tryFind(); } } catch ( Exception& ) |