summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-03-21 13:14:51 +0000
committerCaolán McNamara <caolanm@redhat.com>2018-03-21 15:48:27 +0100
commit754f6e2fe0d329e12e9e083d4fccc4086d9b4d04 (patch)
treefa3e9656267b7a1ecf47862d1578954f2b5e8171
parent12efe34abb984ac37abae59ccac83a4f86a27e77 (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.hxx5
-rw-r--r--framework/source/loadenv/loadenv.cxx37
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);
}
}