diff options
author | Eike Rathke <erack@redhat.com> | 2013-10-11 01:08:01 +0200 |
---|---|---|
committer | Kohei Yoshida <libreoffice@kohei.us> | 2013-10-11 02:04:19 +0000 |
commit | 4c8e5c2a5cf67661ebf33be5c5c2700a4c389f7c (patch) | |
tree | d974ab2a9cb3f9442b78c2cb83e8181dfaa6f838 | |
parent | 50c3494e163ab6157f9be1cf129a844a71236616 (diff) |
resolved fdo#69948 honor a detected FilterName
TypeDetection::queryTypeByDescriptor() adds the FilterName property to
the MediaDescriptor, use that if present.
Strangely enough the sequence returned by XNameAccess::getByName(sType)
of the type detection contains an empty PreferredFilter value so that is
useless in this scenario.
(cherry picked from commit 823278dd095d754d0f673ef140c36c9fa7ebeffd)
Conflicts:
sfx2/source/appl/fileobj.cxx
Backported.
Change-Id: I5cdc9fe71e35bdb7c511739c7f7728134941649a
Reviewed-on: https://gerrit.libreoffice.org/6208
Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
Tested-by: Kohei Yoshida <libreoffice@kohei.us>
-rw-r--r-- | sfx2/source/appl/fileobj.cxx | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/sfx2/source/appl/fileobj.cxx b/sfx2/source/appl/fileobj.cxx index 385b8b00e99b..abda2a58fa63 100644 --- a/sfx2/source/appl/fileobj.cxx +++ b/sfx2/source/appl/fileobj.cxx @@ -397,13 +397,32 @@ String impl_getFilter( const String& _rURL ) ::rtl::OUString sType = xTypeDetection->queryTypeByDescriptor( aDescrList, sal_True ); if ( !sType.isEmpty() ) { - css::uno::Reference< css::container::XNameAccess > xTypeCont( xTypeDetection, - css::uno::UNO_QUERY ); - if ( xTypeCont.is() ) + // Honor a selected/detected filter. + for (sal_Int32 i=0; i < aDescrList.getLength(); ++i) { - ::comphelper::SequenceAsHashMap lTypeProps( xTypeCont->getByName( sType ) ); - sFilter = lTypeProps.getUnpackedValueOrDefault( - ::rtl::OUString("PreferredFilter"), ::rtl::OUString() ); + if (aDescrList[i].Name == "FilterName") + { + OUString aFilterName; + if (aDescrList[i].Value >>= aFilterName) + { + sFilter = aFilterName; + break; + } + } + } + if (!sFilter.Len()) + { + css::uno::Reference< css::container::XNameAccess > xTypeCont( xTypeDetection, + css::uno::UNO_QUERY ); + if ( xTypeCont.is() ) + { + /* XXX: for fdo#69948 scenario the sequence returned by + * getByName() contains an empty PreferredFilter + * property value (since? expected?) */ + ::comphelper::SequenceAsHashMap lTypeProps( xTypeCont->getByName( sType ) ); + sFilter = lTypeProps.getUnpackedValueOrDefault( + ::rtl::OUString("PreferredFilter"), ::rtl::OUString() ); + } } } } |