diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-03-21 13:14:51 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-03-21 15:48:27 +0100 |
commit | 754f6e2fe0d329e12e9e083d4fccc4086d9b4d04 (patch) | |
tree | fa3e9656267b7a1ecf47862d1578954f2b5e8171 | |
parent | 12efe34abb984ac37abae59ccac83a4f86a27e77 (diff) |
tdf#115683 there are other cases of dialogs before document load
Change-Id: I97ddbb528927fecb66072b42baa90272de2af39a
Reviewed-on: https://gerrit.libreoffice.org/51704
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | framework/source/inc/loadenv/loadenv.hxx | 5 | ||||
-rw-r--r-- | framework/source/loadenv/loadenv.cxx | 37 |
2 files changed, 39 insertions, 3 deletions
diff --git a/framework/source/inc/loadenv/loadenv.hxx b/framework/source/inc/loadenv/loadenv.hxx index ca8999f889a9..90f9c7ac89f5 100644 --- a/framework/source/inc/loadenv/loadenv.hxx +++ b/framework/source/inc/loadenv/loadenv.hxx @@ -547,6 +547,11 @@ private: */ void impl_jumpToMark(const css::uno::Reference< css::frame::XFrame >& xFrame, const css::util::URL& aURL ); + + /** @short determine if this loader has an interactive dialog shown before + loading the document. + */ + bool impl_filterHasInteractiveDialog() const; }; } // namespace framework diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx index c915f80827bb..381f2f287f0c 100644 --- a/framework/source/loadenv/loadenv.cxx +++ b/framework/source/loadenv/loadenv.cxx @@ -963,6 +963,38 @@ bool LoadEnv::impl_furtherDocsAllowed() return bAllowed; } +bool LoadEnv::impl_filterHasInteractiveDialog() const +{ + //show the frame now so it can be the parent for any message dialogs shown during import + + //unless (tdf#114648) an Interactive case such as the new database wizard + if (m_aURL.Arguments == "Interactive") + return true; + + // unless (tdf#116277) its the labels/business cards slave frame + if (m_aURL.Arguments.indexOf("slot=") != -1) + return true; + + OUString sFilter = m_lMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_FILTERNAME(), OUString()); + if (sFilter.isEmpty()) + return false; + + // unless (tdf#115683) the filter has a UIComponent + OUString sUIComponent; + css::uno::Reference<css::container::XNameAccess> xFilterCont(m_xContext->getServiceManager()->createInstanceWithContext(SERVICENAME_FILTERFACTORY, m_xContext), + css::uno::UNO_QUERY_THROW); + try + { + ::comphelper::SequenceAsHashMap lFilterProps(xFilterCont->getByName(sFilter)); + sUIComponent = lFilterProps.getUnpackedValueOrDefault("UIComponent", OUString()); + } + catch(const css::container::NoSuchElementException&) + { + } + + return !sUIComponent.isEmpty(); +} + bool LoadEnv::impl_loadContent() { // SAFE -> ----------------------------------- @@ -1076,9 +1108,8 @@ bool LoadEnv::impl_loadContent() {"Parent", uno::Any(xWindow)} })); xHandler->initialize(aArguments); - //show the frame now, unless (tdf#116277) its the labels/business cards slave frame - //or (tdf#114648) an Interactive case such as the new database wizard - if (m_aURL.Arguments != "Interactive" && m_aURL.Arguments.indexOf("slot=") == -1) + //show the frame as early as possible to make it the parent of any message dialogs + if (!impl_filterHasInteractiveDialog()) impl_makeFrameWindowVisible(xWindow, false); } } |