diff --git a/autotests/parttest.cpp b/autotests/parttest.cpp --- a/autotests/parttest.cpp +++ b/autotests/parttest.cpp @@ -15,6 +15,7 @@ #include "../ui/pageview.h" #include +#include #include #include @@ -39,6 +40,7 @@ void testGeneratorPreferences(); void testSelectText(); void testClickInternalLink(); + void testOpenUrlArguments(); }; class PartThatHijacksQueryClose : public Okular::Part @@ -251,6 +253,22 @@ QCOMPARE(part.m_document->currentPage(), 1u); } +// Test that OpenUrlArguments passed to Okular are not dropped on calls to openUrl +void PartTest::testOpenUrlArguments() +{ + QVariantList dummyArgs; + Okular::Part part(NULL, NULL, dummyArgs); + + KParts::OpenUrlArguments args; + args.setMimeType(QStringLiteral("text/rtf")); + + part.setArguments(args); + + part.openUrl(QStringLiteral(KDESRCDIR "data/file1.pdf")); + + QCOMPARE( part.arguments().mimeType(), QStringLiteral("text/rtf") ); +} + } int main(int argc, char *argv[]) diff --git a/part.cpp b/part.cpp --- a/part.cpp +++ b/part.cpp @@ -1541,9 +1541,15 @@ bool Part::openUrl(const QUrl &_url) { + // The subsequent call to closeUrl clears the arguments. + // We want to save them and restore them later. + KParts::OpenUrlArguments args = arguments(); + // Close current document if any if ( !closeUrl() ) return false; + + setArguments(args); QUrl url( _url ); if ( url.hasFragment() )