From dbe0e6f1693d53d49871574c2ee159609ed47364 Mon Sep 17 00:00:00 2001 From: gdd Date: Fri, 1 Mar 2013 14:55:24 +0000 Subject: [PATCH] Test return of ::system for both Windows and Linux versions. If no adequat pdf viewer is found, an error message is raised. --- src/Qtx/QtxWebBrowser.cxx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/Qtx/QtxWebBrowser.cxx b/src/Qtx/QtxWebBrowser.cxx index 119c012d7..d49d08f18 100644 --- a/src/Qtx/QtxWebBrowser.cxx +++ b/src/Qtx/QtxWebBrowser.cxx @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -399,27 +400,32 @@ void QtxWebBrowser::linkClicked( const QUrl& url ) if ( url.scheme() == "file" ) { QString filename = url.toLocalFile(); if ( QFileInfo( filename ).suffix().toLower() == "pdf" ) { + int i = -1; #ifdef WIN32 - ::system( QString( "start %2" ).arg( filename ).toLatin1().constData() ); + i = ::system( QString( "start %2" ).arg( filename ).toLatin1().constData() ); #else // special processing of PDF files QStringList readers; - readers << "xdg-open" << "acroread" << "kpdf" << "kghostview" << "xpdf"; - int i; + readers << "xdg-open" << "acroread"<< "okular" << "evince" << "kpdf" << "kghostview" << "xpdf"; foreach ( QString r, readers ) { QString reader = QString( "/usr/bin/%1" ).arg( r ); if ( QFileInfo( reader ).exists() ) { - i = ::system( QString( "%1 %2" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() ); - // If Salome Qt version is lower than the system one, on KDE an unresolved symbol is raised - // In this case, we try to launch the pdf viewer after unsetting the LD_LIBRARY_PATH environnement variable // Warning: the test on the return value of ::system does not work if the command ends with '&' - if (i != 0) - i = ::system( QString( "unset LD_LIBRARY_PATH ; %1 %2" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() ); - if (i == 0) - break; + i = ::system( QString( "%1 %2" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() ); + if (i != 0) { + // If Salome Qt version is lower than the system one, on KDE an unresolved symbol is raised + // In this case, we can try to launch the pdf viewer after unsetting the LD_LIBRARY_PATH environnement variable + i = ::system( QString( "unset LD_LIBRARY_PATH ; %1 %2" ).arg( reader ).arg( url.toLocalFile() ).toLatin1().constData() ); + } + if (i == 0) { + break; + } } } #endif // WIN32 + if (i != 0) { + QMessageBox::warning(this, tr("Opening pdf file"), tr("Impossible to open the pdf file: no viewer found or compatible.")); + } } } myWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); -- 2.39.2