From dc9b4a29f1928fabcd4094942d32bc5985091838 Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Tue, 22 May 2012 12:55:22 -0400 Subject: rhbz#868953 fdo#45084 When the caller specifies filter type, stick to it and don't overwrite it. (cherry picked from commit 552bebe6fa27fa58d07d87283a4b24e6052ab3d4) Conflicts: filter/source/config/cache/typedetection.cxx Change-Id: I35a3efc506bbcc33ea4c3d2466929f8227dae102 Signed-off-by: Eike Rathke --- filter/source/config/cache/typedetection.cxx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/filter/source/config/cache/typedetection.cxx b/filter/source/config/cache/typedetection.cxx index 25b37429f5c1..5b73b8912b89 100644 --- a/filter/source/config/cache/typedetection.cxx +++ b/filter/source/config/cache/typedetection.cxx @@ -143,9 +143,18 @@ TypeDetection::~TypeDetection() css::uno::Reference< css::util::XURLTransformer > xParser(m_xSMGR->createInstance(SERVICE_URLTRANSFORMER), css::uno::UNO_QUERY); xParser->parseStrict(aURL); - //******************************************* - // preselected filter, type or document service? - // use it as first "flat" detected type later! + rtl::OUString aSelectedFilter = stlDescriptor.getUnpackedValueOrDefault( + comphelper::MediaDescriptor::PROP_FILTERNAME(), rtl::OUString()); + if (!aSelectedFilter.isEmpty()) + { + // Caller specified the filter type. Honor it. Just get the default + // type for that filter, and bail out. + if (impl_validateAndSetFilterOnDescriptor(stlDescriptor, aSelectedFilter)) + return stlDescriptor[comphelper::MediaDescriptor::PROP_TYPENAME()].get(); + } + + // preselected type or document service? use it as first "flat" detected + // type later! FlatDetection lFlatTypes; impl_getPreselection(aURL, stlDescriptor, lFlatTypes); @@ -690,10 +699,6 @@ void TypeDetection::impl_getPreselection(const css::util::URL& aP if (sSelectedType.getLength()) impl_getPreselectionForType(sSelectedType, aParsedURL, rFlatTypes); - ::rtl::OUString sSelectedFilter = rDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_FILTERNAME(), ::rtl::OUString()); - if (sSelectedFilter.getLength()) - impl_getPreselectionForFilter(sSelectedFilter, aParsedURL, rFlatTypes); - ::rtl::OUString sSelectedDoc = rDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_DOCUMENTSERVICE(), ::rtl::OUString()); if (sSelectedDoc.getLength()) impl_getPreselectionForDocumentService(sSelectedDoc, aParsedURL, rFlatTypes); -- cgit v1.2.3