diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2013-11-04 14:06:10 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-11-04 07:52:14 -0600 |
commit | 7722a5906d8f6765395205f5074f480ad365aa19 (patch) | |
tree | 46f9055432bd18414350bec0d4fe3ddc99907538 | |
parent | 9841ae6565c1b0b16ba4f46cce56c478ce7e900b (diff) |
fdo#68099 Move pdf viewer call to GUI related code
This change fixes two bugs:
1) In it's old location at PDFFilter::implExport, the pdf viewer is called
*before* the final file is actually written. It causes a problem under
Windows, because we use ShellExecute function which fails if the file
doesn't exist. Calling a function blocks execution, so we have no chance
to write the file before that function fails. (fdo#68099)
2) Being a part of the saving/filter code means that the pdf viewer will
open even when converting to a pdf in headless mode. It's definitely not
something that we want to happen.
Change-Id: I1a6f70ec76100ac9e008869aa57ad738ced3ab6c
Reviewed-on: https://gerrit.libreoffice.org/6565
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | filter/source/pdf/pdffilter.cxx | 13 | ||||
-rw-r--r-- | sfx2/source/doc/guisaveas.cxx | 16 |
2 files changed, 16 insertions, 13 deletions
diff --git a/filter/source/pdf/pdffilter.cxx b/filter/source/pdf/pdffilter.cxx index 67b4bdbb67f9..092cad6a3f26 100644 --- a/filter/source/pdf/pdffilter.cxx +++ b/filter/source/pdf/pdffilter.cxx @@ -24,10 +24,7 @@ #include <vcl/window.hxx> #include <svl/outstrm.hxx> #include <vcl/FilterConfigItem.hxx> -#include <com/sun/star/system/SystemShellExecute.hpp> -#include <com/sun/star/system/SystemShellExecuteFlags.hpp> -using namespace css::system; // ------------- // - PDFFilter - // ------------- @@ -54,10 +51,6 @@ sal_Bool PDFFilter::implExport( const Sequence< PropertyValue >& rDescriptor ) sal_Bool bRet = sal_False; Reference< task::XStatusIndicator > xStatusIndicator; Reference< task::XInteractionHandler > xIH; - OUString aUrl; - - FilterConfigItem aItem( "Office.Common/Filter/PDF/Export/" ); - sal_Bool aViewPDF = aItem.ReadBool( "ViewPDFAfterExport", sal_False ); for ( sal_Int32 i = 0 ; ( i < nLength ) && !xOStm.is(); ++i) { @@ -69,8 +62,6 @@ sal_Bool PDFFilter::implExport( const Sequence< PropertyValue >& rDescriptor ) pValue[ i ].Value >>= xStatusIndicator; else if ( pValue[i].Name == "InteractionHandler" ) pValue[i].Value >>= xIH; - else if ( pValue[ i ].Name == "URL" ) - pValue[ i ].Value >>= aUrl; } /* we don't get FilterData if we are exporting directly @@ -142,10 +133,6 @@ sal_Bool PDFFilter::implExport( const Sequence< PropertyValue >& rDescriptor ) } } - if(aViewPDF==sal_True) { - Reference<XSystemShellExecute> xSystemShellExecute(SystemShellExecute::create( ::comphelper::getProcessComponentContext() ) ); //Open the newly exported pdf - xSystemShellExecute->execute(aUrl, "", SystemShellExecuteFlags::URIS_ONLY ); } - return bRet; } diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 79af8ed1b006..ddf8e07f347d 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -93,6 +93,10 @@ #include <officecfg/Office/Common.hxx> +#include <vcl/FilterConfigItem.hxx> +#include <com/sun/star/system/SystemShellExecute.hpp> +#include <com/sun/star/system/SystemShellExecuteFlags.hpp> + // flags that specify requested operation #define EXPORT_REQUESTED 1 #define PDFEXPORT_REQUESTED 2 @@ -114,6 +118,7 @@ const char aFilterDataString[] = "FilterData"; const char aFilterFlagsString[] = "FilterFlags"; using namespace ::com::sun::star; +using namespace css::system; namespace { //------------------------------------------------------------------------- @@ -1705,6 +1710,17 @@ sal_Bool SfxStoringHelper::GUIStoreModel( uno::Reference< frame::XModel > xModel aModelData.GetStorable()->storeAsURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), aArgsSequence ); } + // Launch PDF viewer + if ( nStoreMode & PDFEXPORT_REQUESTED ) { + FilterConfigItem aItem( "Office.Common/Filter/PDF/Export/" ); + sal_Bool aViewPDF = aItem.ReadBool( "ViewPDFAfterExport", sal_False ); + + if ( aViewPDF==sal_True ) { + uno::Reference<XSystemShellExecute> xSystemShellExecute(SystemShellExecute::create( ::comphelper::getProcessComponentContext() ) ); + xSystemShellExecute->execute( aURL.GetMainURL( INetURLObject::NO_DECODE ), "", SystemShellExecuteFlags::URIS_ONLY ); + } + } + return bDialogUsed; } |