Cleaned up CommandLineArgs

* Support for dead arguments has been removed.
** Especially, dead UCB_CONFIGURATION_KEY1/2_xxx values have also been removed,
   and code initializing UCB has been simplified accordingly.
* For the sake of simplicity, behaviour has been changed slightly.  For example,
  passing both --calc --writer now always lets --writer win (whereas in the past
  the one mentioned first, i.e., --calc in this example, would win).

Change-Id: Id40a19b9ef96db0d439cadd96ba491bf640d28fb
This commit is contained in:
Stephan Bergmann
2012-05-02 16:41:06 +02:00
parent 9911ee515d
commit 5c22a03320
11 changed files with 410 additions and 622 deletions

View File

@@ -148,7 +148,7 @@ class Desktop : public Application
static ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager(); static ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager();
// returns a non-null reference or throws an exception // returns a non-null reference or throws an exception
void RegisterServices( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); void RegisterServices();
void DeregisterServices(); void DeregisterServices();
void DestroyApplicationServiceManager( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); void DestroyApplicationServiceManager( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr );

View File

@@ -1340,7 +1340,6 @@ sal_uInt16 Desktop::Exception(sal_uInt16 nError)
sal_Bool bAllowRecoveryAndSessionManagement = ( sal_Bool bAllowRecoveryAndSessionManagement = (
( !rArgs.IsNoRestore() ) && // some use cases of office must work without recovery ( !rArgs.IsNoRestore() ) && // some use cases of office must work without recovery
( !rArgs.IsHeadless() ) && ( !rArgs.IsHeadless() ) &&
( !rArgs.IsServer() ) &&
(( nError & EXC_MAJORTYPE ) != EXC_DISPLAY ) && // recovery cant work without UI ... but UI layer seams to be the reason for this crash (( nError & EXC_MAJORTYPE ) != EXC_DISPLAY ) && // recovery cant work without UI ... but UI layer seams to be the reason for this crash
( Application::IsInExecute() ) // crashes during startup and shutdown should be ignored (they indicates a corrupt installation ...) ( Application::IsInExecute() ) // crashes during startup and shutdown should be ignored (they indicates a corrupt installation ...)
); );
@@ -1498,7 +1497,7 @@ int Desktop::Main()
Reference< ::com::sun::star::task::XRestartManager > xRestartManager; Reference< ::com::sun::star::task::XRestartManager > xRestartManager;
try try
{ {
RegisterServices( xSMgr ); RegisterServices();
SetSplashScreenProgress(25); SetSplashScreenProgress(25);
@@ -2452,8 +2451,7 @@ void Desktop::OpenClients()
// need some time, where the user wont see any results and wait for finishing the office startup ... // need some time, where the user wont see any results and wait for finishing the office startup ...
sal_Bool bAllowRecoveryAndSessionManagement = ( sal_Bool bAllowRecoveryAndSessionManagement = (
( !rArgs.IsNoRestore() ) && ( !rArgs.IsNoRestore() ) &&
( !rArgs.IsHeadless() ) && ( !rArgs.IsHeadless() )
( !rArgs.IsServer() )
); );
if ( ! bAllowRecoveryAndSessionManagement ) if ( ! bAllowRecoveryAndSessionManagement )
@@ -2568,33 +2566,30 @@ void Desktop::OpenClients()
OfficeIPCThread::EnableRequests(); OfficeIPCThread::EnableRequests();
sal_Bool bShutdown( sal_False );
if ( !rArgs.IsServer() )
{
ProcessDocumentsRequest aRequest(rArgs.getCwdUrl()); ProcessDocumentsRequest aRequest(rArgs.getCwdUrl());
aRequest.pcProcessed = NULL; aRequest.pcProcessed = NULL;
rArgs.GetOpenList( aRequest.aOpenList ); aRequest.aOpenList = rArgs.GetOpenList();
rArgs.GetViewList( aRequest.aViewList ); aRequest.aViewList = rArgs.GetViewList();
rArgs.GetStartList( aRequest.aStartList ); aRequest.aStartList = rArgs.GetStartList();
rArgs.GetPrintList( aRequest.aPrintList ); aRequest.aPrintList = rArgs.GetPrintList();
rArgs.GetPrintToList( aRequest.aPrintToList ); aRequest.aPrintToList = rArgs.GetPrintToList();
rArgs.GetPrinterName( aRequest.aPrinterName ); aRequest.aPrinterName = rArgs.GetPrinterName();
rArgs.GetForceOpenList( aRequest.aForceOpenList ); aRequest.aForceOpenList = rArgs.GetForceOpenList();
rArgs.GetForceNewList( aRequest.aForceNewList ); aRequest.aForceNewList = rArgs.GetForceNewList();
rArgs.GetConversionList( aRequest.aConversionList ); aRequest.aConversionList = rArgs.GetConversionList();
rArgs.GetConversionParams( aRequest.aConversionParams ); aRequest.aConversionParams = rArgs.GetConversionParams();
rArgs.GetConversionOut( aRequest.aConversionOut ); aRequest.aConversionOut = rArgs.GetConversionOut();
rArgs.GetInFilter( aRequest.aInFilter ); aRequest.aInFilter = rArgs.GetInFilter();
if ( !aRequest.aOpenList.isEmpty() || if ( !aRequest.aOpenList.empty() ||
!aRequest.aViewList.isEmpty() || !aRequest.aViewList.empty() ||
!aRequest.aStartList.isEmpty() || !aRequest.aStartList.empty() ||
!aRequest.aPrintList.isEmpty() || !aRequest.aPrintList.empty() ||
!aRequest.aForceOpenList.isEmpty() || !aRequest.aForceOpenList.empty() ||
!aRequest.aForceNewList.isEmpty() || !aRequest.aForceNewList.empty() ||
( !aRequest.aPrintToList.isEmpty() && !aRequest.aPrinterName.isEmpty() ) || ( !aRequest.aPrintToList.empty() && !aRequest.aPrinterName.isEmpty() ) ||
!aRequest.aConversionList.isEmpty() ) !aRequest.aConversionList.empty() )
{ {
bLoaded = sal_True; bLoaded = sal_True;
@@ -2614,11 +2609,11 @@ void Desktop::OpenClients()
} }
// check for printing disabled // check for printing disabled
if( ( !(aRequest.aPrintList.isEmpty() && aRequest.aPrintToList.isEmpty()) ) if( ( !(aRequest.aPrintList.empty() && aRequest.aPrintToList.empty()) )
&& Application::GetSettings().GetMiscSettings().GetDisablePrinting() ) && Application::GetSettings().GetMiscSettings().GetDisablePrinting() )
{ {
aRequest.aPrintList = rtl::OUString(); aRequest.aPrintList.clear();
aRequest.aPrintToList = rtl::OUString(); aRequest.aPrintToList.clear();
ResMgr* pDtResMgr = GetDesktopResManager(); ResMgr* pDtResMgr = GetDesktopResManager();
if( pDtResMgr ) if( pDtResMgr )
{ {
@@ -2628,20 +2623,19 @@ void Desktop::OpenClients()
} }
// Process request // Process request
bShutdown = OfficeIPCThread::ExecuteCmdLineRequests( aRequest ); if ( OfficeIPCThread::ExecuteCmdLineRequests( aRequest ) )
} {
} // Don't do anything if we have successfully called terminate at desktop:
// Don't do anything if we have successfully called terminate at desktop
if ( bShutdown )
return; return;
}
}
// no default document if a document was loaded by recovery or by command line or if soffice is used as server // no default document if a document was loaded by recovery or by command line or if soffice is used as server
Reference< XFramesSupplier > xTasksSupplier( Reference< XFramesSupplier > xTasksSupplier(
::comphelper::getProcessServiceFactory()->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ), ::comphelper::getProcessServiceFactory()->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")) ),
::com::sun::star::uno::UNO_QUERY_THROW ); ::com::sun::star::uno::UNO_QUERY_THROW );
Reference< XElementAccess > xList( xTasksSupplier->getFrames(), UNO_QUERY_THROW ); Reference< XElementAccess > xList( xTasksSupplier->getFrames(), UNO_QUERY_THROW );
if ( xList->hasElements() || rArgs.IsServer() ) if ( xList->hasElements() )
return; return;
if ( rArgs.IsQuickstart() || rArgs.IsInvisible() || Application::AnyInput( VCL_INPUT_APPEVENT ) ) if ( rArgs.IsQuickstart() || rArgs.IsInvisible() || Application::AnyInput( VCL_INPUT_APPEVENT ) )
@@ -2702,7 +2696,7 @@ void Desktop::OpenDefault()
ProcessDocumentsRequest aRequest(rArgs.getCwdUrl()); ProcessDocumentsRequest aRequest(rArgs.getCwdUrl());
aRequest.pcProcessed = NULL; aRequest.pcProcessed = NULL;
aRequest.aOpenList = aName; aRequest.aOpenList.push_back(aName);
OfficeIPCThread::ExecuteCmdLineRequests( aRequest ); OfficeIPCThread::ExecuteCmdLineRequests( aRequest );
} }
@@ -2836,7 +2830,7 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent )
{ {
ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest(
rCmdLine.getCwdUrl()); rCmdLine.getCwdUrl());
pDocsRequest->aOpenList = rAppEvent.GetData(); pDocsRequest->aOpenList.push_back(rAppEvent.GetData());
pDocsRequest->pcProcessed = NULL; pDocsRequest->pcProcessed = NULL;
OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest );
@@ -2855,7 +2849,7 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent )
{ {
ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest( ProcessDocumentsRequest* pDocsRequest = new ProcessDocumentsRequest(
rCmdLine.getCwdUrl()); rCmdLine.getCwdUrl());
pDocsRequest->aPrintList = rAppEvent.GetData(); pDocsRequest->aPrintList.push_back(rAppEvent.GetData());
pDocsRequest->pcProcessed = NULL; pDocsRequest->pcProcessed = NULL;
OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest ); OfficeIPCThread::ExecuteCmdLineRequests( *pDocsRequest );
@@ -2935,7 +2929,6 @@ void Desktop::HandleAppEvent( const ApplicationEvent& rAppEvent )
void Desktop::OpenSplashScreen() void Desktop::OpenSplashScreen()
{ {
::rtl::OUString aTmpString;
const CommandLineArgs &rCmdLine = GetCommandLineArgs(); const CommandLineArgs &rCmdLine = GetCommandLineArgs();
sal_Bool bVisible = sal_False; sal_Bool bVisible = sal_False;
// Show intro only if this is normal start (e.g. no server, no quickstart, no printing ) // Show intro only if this is normal start (e.g. no server, no quickstart, no printing )
@@ -2945,9 +2938,9 @@ void Desktop::OpenSplashScreen()
!rCmdLine.IsMinimized() && !rCmdLine.IsMinimized() &&
!rCmdLine.IsNoLogo() && !rCmdLine.IsNoLogo() &&
!rCmdLine.IsTerminateAfterInit() && !rCmdLine.IsTerminateAfterInit() &&
!rCmdLine.GetPrintList( aTmpString ) && rCmdLine.GetPrintList().empty() &&
!rCmdLine.GetPrintToList( aTmpString ) && rCmdLine.GetPrintToList().empty() &&
!rCmdLine.GetConversionList( aTmpString )) rCmdLine.GetConversionList().empty() )
{ {
// Determine application name from command line parameters // Determine application name from command line parameters
OUString aAppName; OUString aAppName;
@@ -2970,7 +2963,7 @@ void Desktop::OpenSplashScreen()
// Which splash to use // Which splash to use
OUString aSplashService( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.SplashScreen" )); OUString aSplashService( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.SplashScreen" ));
if ( !rCmdLine.GetSplashPipe().isEmpty() ) if ( rCmdLine.HasSplashPipe() )
aSplashService = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.office.PipeSplashScreen")); aSplashService = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.office.PipeSplashScreen"));
bVisible = sal_True; bVisible = sal_True;

View File

@@ -42,7 +42,6 @@
#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XContentEnumerationAccess.hpp>
#include <com/sun/star/ucb/XContentProviderManager.hpp> #include <com/sun/star/ucb/XContentProviderManager.hpp>
#include <com/sun/star/ucb/XContentProviderFactory.hpp> #include <com/sun/star/ucb/XContentProviderFactory.hpp>
#include <uno/current_context.hxx> #include <uno/current_context.hxx>
@@ -85,7 +84,7 @@ namespace desktop
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect) static bool configureUcb()
{ {
RTL_LOGFILE_CONTEXT( aLog, "desktop (sb93797) ::configureUcb" ); RTL_LOGFILE_CONTEXT( aLog, "desktop (sb93797) ::configureUcb" );
Reference< XMultiServiceFactory > Reference< XMultiServiceFactory >
@@ -100,22 +99,12 @@ static bool configureUcb(bool bServer, rtl::OUString const & rPortalConnect)
osl::Security().getUserIdent(aPipe); osl::Security().getUserIdent(aPipe);
rtl::OUStringBuffer aPortal; rtl::OUStringBuffer aPortal;
if (!rPortalConnect.isEmpty())
{
aPortal.append(sal_Unicode(','));
aPortal.append(rPortalConnect);
}
Sequence< Any > aArgs(6); Sequence< Any > aArgs(2);
aArgs[0] aArgs[0]
<<= bServer ? rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_SERVER)) : <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_LOCAL));
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_LOCAL));
aArgs[1] aArgs[1]
<<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY2_OFFICE)); <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY2_OFFICE));
aArgs[2] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PIPE"));
aArgs[3] <<= aPipe;
aArgs[4] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PORTAL"));
aArgs[5] <<= aPortal.makeStringAndClear();
bool ret = bool ret =
::ucbhelper::ContentBroker::initialize( xServiceFactory, aArgs ) != false; ::ucbhelper::ContentBroker::initialize( xServiceFactory, aArgs ) != false;
@@ -210,7 +199,7 @@ void Desktop::DestroyApplicationServiceManager( Reference< XMultiServiceFactory
} }
} }
void Desktop::RegisterServices( Reference< XMultiServiceFactory >& xSMgr ) void Desktop::RegisterServices()
{ {
if( !m_bServicesRegistered ) if( !m_bServicesRegistered )
{ {
@@ -241,30 +230,7 @@ void Desktop::RegisterServices( Reference< XMultiServiceFactory >& xSMgr )
createAcceptor(*i); createAcceptor(*i);
} }
// improves parallel processing on Sun ONE Webtop if ( !configureUcb() )
// servicemanager up -> copy user installation
if ( rCmdLine.IsServer() )
{
// Check some mandatory environment states if "-server" is possible. Otherwise ignore
// this parameter.
Reference< com::sun::star::container::XContentEnumerationAccess > rContent( xSMgr , UNO_QUERY );
if( rContent.is() )
{
OUString sPortalService = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.portal.InstallUser" ) );
Reference < com::sun::star::container::XEnumeration > rEnum = rContent->createContentEnumeration( sPortalService );
if ( !rEnum.is() )
{
// Reset server parameter so it is ignored in the furthermore startup process
rCmdLine.ClearServer();
}
}
}
::rtl::OUString aPortalConnect;
bool bServer = (bool)rCmdLine.IsServer();
rCmdLine.GetPortalConnectString( aPortalConnect );
if ( !configureUcb( bServer, aPortalConnect ) )
{ {
OSL_FAIL( "Can't configure UCB" ); OSL_FAIL( "Can't configure UCB" );
throw com::sun::star::uno::Exception(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RegisterServices, configureUcb")), NULL); throw com::sun::star::uno::Exception(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RegisterServices, configureUcb")), NULL);

View File

@@ -86,23 +86,6 @@ private:
} }
static CommandLineArgs::BoolParam aModuleGroupDefinition[] =
{
CommandLineArgs::CMD_BOOLPARAM_WRITER,
CommandLineArgs::CMD_BOOLPARAM_CALC,
CommandLineArgs::CMD_BOOLPARAM_DRAW,
CommandLineArgs::CMD_BOOLPARAM_IMPRESS,
CommandLineArgs::CMD_BOOLPARAM_GLOBAL,
CommandLineArgs::CMD_BOOLPARAM_MATH,
CommandLineArgs::CMD_BOOLPARAM_WEB,
CommandLineArgs::CMD_BOOLPARAM_BASE
};
CommandLineArgs::GroupDefinition CommandLineArgs::m_pGroupDefinitions[ CommandLineArgs::CMD_GRPID_COUNT ] =
{
{ 8, aModuleGroupDefinition }
};
CommandLineArgs::Supplier::Exception::Exception() {} CommandLineArgs::Supplier::Exception::Exception() {}
CommandLineArgs::Supplier::Exception::Exception(Exception const &) {} CommandLineArgs::Supplier::Exception::Exception(Exception const &) {}
@@ -160,8 +143,6 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
bool bBatchPrinterNameEvent(false); bool bBatchPrinterNameEvent(false);
bool bConversionOutEvent(false); bool bConversionOutEvent(false);
m_eArgumentCount = NONE;
for (;;) for (;;)
{ {
::rtl::OUString aArg; ::rtl::OUString aArg;
@@ -180,7 +161,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
if ( !aArg.isEmpty() ) if ( !aArg.isEmpty() )
{ {
m_eArgumentCount = m_eArgumentCount == NONE ? ONE : MANY; m_bEmpty = false;
::rtl::OUString oArg; ::rtl::OUString oArg;
if ( !InterpretCommandLineParameter( aArg, oArg )) if ( !InterpretCommandLineParameter( aArg, oArg ))
{ {
@@ -318,7 +299,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
fprintf(stderr, "Unknown option %s\n", fprintf(stderr, "Unknown option %s\n",
rtl::OUStringToOString(aArg, osl_getThreadTextEncoding()).getStr()); rtl::OUStringToOString(aArg, osl_getThreadTextEncoding()).getStr());
fprintf(stderr, "Run 'soffice --help' to see a full list of available command line options.\n"); fprintf(stderr, "Run 'soffice --help' to see a full list of available command line options.\n");
SetBoolParam_Impl( CMD_BOOLPARAM_UNKNOWN, sal_True ); m_unknown = true;
} }
#endif #endif
} }
@@ -327,24 +308,24 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
if ( bPrinterName && bPrintToEvent ) if ( bPrinterName && bPrintToEvent )
{ {
// first argument after "-pt" this must be the printer name // first argument after "-pt" this must be the printer name
AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArg ); m_printername = aArg;
bPrinterName = false; bPrinterName = false;
} }
else if ( bConversionParamsEvent && bConversionEvent ) else if ( bConversionParamsEvent && bConversionEvent )
{ {
// first argument must be the the params // first argument must be the the params
AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONPARAMS, aArg ); m_conversionparams = aArg;
bConversionParamsEvent = false; bConversionParamsEvent = false;
} }
else if ( bBatchPrinterNameEvent && bBatchPrintEvent ) else if ( bBatchPrinterNameEvent && bBatchPrintEvent )
{ {
// first argument is the printer name // first argument is the printer name
AddStringListParam_Impl( CMD_STRINGPARAM_PRINTERNAME, aArg ); m_printername = aArg;
bBatchPrinterNameEvent = false; bBatchPrinterNameEvent = false;
} }
else if ( (bConversionEvent || bBatchPrintEvent) && bConversionOutEvent ) else if ( (bConversionEvent || bBatchPrintEvent) && bConversionOutEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONOUT, aArg ); m_conversionout = aArg;
bConversionOutEvent = false; bConversionOutEvent = false;
} }
else else
@@ -361,47 +342,46 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
// handle this argument as a filename // handle this argument as a filename
if ( bOpenEvent ) if ( bOpenEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_OPENLIST, aArg ); m_openlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bViewEvent ) else if ( bViewEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_VIEWLIST, aArg ); m_viewlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bStartEvent ) else if ( bStartEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_STARTLIST, aArg ); m_startlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bPrintEvent ) else if ( bPrintEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_PRINTLIST, aArg ); m_printlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bPrintToEvent ) else if ( bPrintToEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_PRINTTOLIST, aArg ); m_printtolist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bForceNewEvent ) else if ( bForceNewEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_FORCENEWLIST, aArg ); m_forcenewlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bForceOpenEvent ) else if ( bForceOpenEvent )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_FORCEOPENLIST, aArg ); m_forceopenlist.push_back(aArg);
bOpenDoc = true; bOpenDoc = true;
} }
else if ( bDisplaySpec ) else if ( bDisplaySpec )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_DISPLAY, aArg );
bDisplaySpec = false; // only one display, not a lsit bDisplaySpec = false; // only one display, not a lsit
bOpenEvent = true; // set back to standard bOpenEvent = true; // set back to standard
} }
else if ( bConversionEvent || bBatchPrintEvent ) else if ( bConversionEvent || bBatchPrintEvent )
AddStringListParam_Impl( CMD_STRINGPARAM_CONVERSIONLIST, aArg ); m_conversionlist.push_back(aArg);
} }
} }
} }
@@ -412,24 +392,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
void CommandLineArgs::AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam ) bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString& aArg, ::rtl::OUString& oArg )
{
OSL_ASSERT( eParam >= 0 && eParam < CMD_STRINGPARAM_COUNT );
::rtl::OUStringBuffer aParamBuf(m_aStrParams[eParam]);
if ( aParamBuf.getLength() )
aParamBuf.append('\n');
aParamBuf.append(aParam);
m_aStrParams[eParam] = aParamBuf.makeStringAndClear();
m_aStrSetParams[eParam] = sal_True;
}
void CommandLineArgs::SetBoolParam_Impl( BoolParam eParam, sal_Bool bValue )
{
OSL_ASSERT( eParam >= 0 && eParam < CMD_BOOLPARAM_COUNT );
m_aBoolParams[eParam] = bValue;
}
sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString& aArg, ::rtl::OUString& oArg )
{ {
bool bDeprecated = false; bool bDeprecated = false;
if (aArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("--"))) if (aArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("--")))
@@ -444,106 +407,102 @@ sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString&
} }
else else
{ {
return sal_False; return false;
} }
if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "minimized" )) == sal_True ) if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "minimized" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_MINIMIZED, sal_True ); m_minimized = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "invisible" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "invisible" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_INVISIBLE, sal_True ); m_invisible = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "norestore" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "norestore" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NORESTORE, sal_True ); m_norestore = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nodefault" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nodefault" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NODEFAULT, sal_True ); m_nodefault = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "server" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "headless" )) )
{
m_server = true;
}
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "headless" )) == sal_True )
{ {
// Headless means also invisibile, so set this parameter to true! // Headless means also invisibile, so set this parameter to true!
SetBoolParam_Impl( CMD_BOOLPARAM_HEADLESS, sal_True ); m_headless = true;
SetBoolParam_Impl( CMD_BOOLPARAM_INVISIBLE, sal_True ); m_invisible = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "quickstart" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "quickstart" )) )
{ {
#if defined(ENABLE_QUICKSTART_APPLET) #if defined(ENABLE_QUICKSTART_APPLET)
SetBoolParam_Impl( CMD_BOOLPARAM_QUICKSTART, sal_True ); m_quickstart = true;
#endif #endif
SetBoolParam_Impl( CMD_BOOLPARAM_NOQUICKSTART, sal_False ); m_noquickstart = false;
} }
else if ( oArg == "quickstart=no" ) else if ( oArg == "quickstart=no" )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NOQUICKSTART, sal_True ); m_noquickstart = true;
SetBoolParam_Impl( CMD_BOOLPARAM_QUICKSTART, sal_False ); m_quickstart = false;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "terminate_after_init" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "terminate_after_init" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_TERMINATEAFTERINIT, sal_True ); m_terminateafterinit = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nofirststartwizard" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nofirststartwizard" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NOFIRSTSTARTWIZARD, sal_True ); m_nofirststartwizard = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nologo" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nologo" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NOLOGO, sal_True ); m_nologo = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nolockcheck" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "nolockcheck" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_NOLOCKCHECK, sal_True ); m_nolockcheck = true;
// Workaround for automated testing // Workaround for automated testing
::svt::DocumentLockFile::AllowInteraction( sal_False ); ::svt::DocumentLockFile::AllowInteraction( false );
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "help" )) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "help" ))
|| aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-h" )) || aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-h" ))
|| aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-?" ))) || aArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "-?" )))
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELP, sal_True ); m_help = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpwriter" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpwriter" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPWRITER, sal_True ); m_helpwriter = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpcalc" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpcalc" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPCALC, sal_True ); m_helpcalc = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpdraw" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpdraw" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPDRAW, sal_True ); m_helpdraw = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpimpress" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpimpress" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPIMPRESS, sal_True ); m_helpimpress = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbase" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbase" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPBASE, sal_True ); m_helpbase = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbasic" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpbasic" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPBASIC, sal_True ); m_helpbasic = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpmath" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "helpmath" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_HELPMATH, sal_True ); m_helpmath = true;
} }
else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "version" )) == sal_True ) else if ( oArg.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "version" )) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_VERSION, sal_True ); m_version = true;
} }
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("splash-pipe=")) ) else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("splash-pipe=")) )
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_SPLASHPIPE, oArg.copy(RTL_CONSTASCII_LENGTH("splash-pipe=")) ); m_splashpipe = true;
} }
#ifdef MACOSX #ifdef MACOSX
/* #i84053# ignore -psn on Mac /* #i84053# ignore -psn on Mac
@@ -553,13 +512,13 @@ sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString&
*/ */
else if ( aArg.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("-psn")) ) else if ( aArg.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("-psn")) )
{ {
SetBoolParam_Impl( CMD_BOOLPARAM_PSN, sal_True ); m_psn = true;
return sal_True; return true;
} }
#endif #endif
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("infilter="))) else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("infilter=")))
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_INFILTER, oArg.copy(RTL_CONSTASCII_LENGTH("infilter=")) ); m_infilter.push_back(oArg.copy(RTL_CONSTASCII_LENGTH("infilter=")));
} }
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("accept="))) else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("accept=")))
{ {
@@ -569,288 +528,244 @@ sal_Bool CommandLineArgs::InterpretCommandLineParameter( const ::rtl::OUString&
{ {
m_unaccept.push_back(oArg.copy(RTL_CONSTASCII_LENGTH("unaccept="))); m_unaccept.push_back(oArg.copy(RTL_CONSTASCII_LENGTH("unaccept=")));
} }
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("portal,")))
{
AddStringListParam_Impl( CMD_STRINGPARAM_PORTAL, oArg.copy(RTL_CONSTASCII_LENGTH("portal,")) );
}
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("userid")))
{
if ( oArg.getLength() > RTL_CONSTASCII_LENGTH("userid")+1 )
{
AddStringListParam_Impl(
CMD_STRINGPARAM_USERDIR,
::rtl::Uri::decode( oArg.copy(RTL_CONSTASCII_LENGTH("userid")+1),
rtl_UriDecodeWithCharset,
RTL_TEXTENCODING_UTF8 ) );
}
}
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("clientdisplay=")))
{
AddStringListParam_Impl( CMD_STRINGPARAM_CLIENTDISPLAY, oArg.copy(RTL_CONSTASCII_LENGTH("clientdisplay=")) );
}
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("version=")))
{
AddStringListParam_Impl( CMD_STRINGPARAM_VERSION, oArg.copy(RTL_CONSTASCII_LENGTH("version=")) );
}
else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("language="))) else if ( oArg.matchIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("language=")))
{ {
AddStringListParam_Impl( CMD_STRINGPARAM_LANGUAGE, oArg.copy(RTL_CONSTASCII_LENGTH("language=")) ); m_language = oArg.copy(RTL_CONSTASCII_LENGTH("language="));
} }
else if ( oArg == "writer" ) else if ( oArg == "writer" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_WRITER ); m_writer = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_WRITER, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "calc" ) else if ( oArg == "calc" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_CALC ); m_calc = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_CALC, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "draw" ) else if ( oArg == "draw" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_DRAW ); m_draw = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_DRAW, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "impress" ) else if ( oArg == "impress" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_IMPRESS ); m_impress = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_IMPRESS, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "base" ) else if ( oArg == "base" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_BASE ); m_base = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_BASE, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "global" ) else if ( oArg == "global" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_GLOBAL ); m_global = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_GLOBAL, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "math" ) else if ( oArg == "math" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_MATH ); m_math = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_MATH, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else if ( oArg == "web" ) else if ( oArg == "web" )
{ {
sal_Bool bAlreadySet = CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_WEB ); m_web = true;
if ( !bAlreadySet )
SetBoolParam_Impl( CMD_BOOLPARAM_WEB, sal_True );
m_bDocumentArgs = true; m_bDocumentArgs = true;
} }
else else
return sal_False; return false;
if (bDeprecated) if (bDeprecated)
{ {
rtl::OString sArg(rtl::OUStringToOString(aArg, osl_getThreadTextEncoding())); rtl::OString sArg(rtl::OUStringToOString(aArg, osl_getThreadTextEncoding()));
fprintf(stderr, "Warning: %s is deprecated. Use -%s instead.\n", sArg.getStr(), sArg.getStr()); fprintf(stderr, "Warning: %s is deprecated. Use -%s instead.\n", sArg.getStr(), sArg.getStr());
} }
return sal_True; return true;
}
sal_Bool CommandLineArgs::CheckGroupMembers( GroupParamId nGroupId, BoolParam nExcludeMember ) const
{
// Check if at least one bool param out of a group is set. An exclude member can be provided.
for ( int i = 0; i < m_pGroupDefinitions[nGroupId].nCount; i++ )
{
BoolParam nParam = m_pGroupDefinitions[nGroupId].pGroupMembers[i];
if ( nParam != nExcludeMember && m_aBoolParams[nParam] )
return sal_True;
}
return sal_False;
} }
void CommandLineArgs::InitParamValues() void CommandLineArgs::InitParamValues()
{ {
int i; m_minimized = false;
for ( i = 0; i < CMD_BOOLPARAM_COUNT; i++ ) m_invisible = false;
m_aBoolParams[i] = sal_False; m_norestore = false;
for ( i = 0; i < CMD_STRINGPARAM_COUNT; i++ ) m_headless = false;
m_aStrSetParams[i] = sal_False; m_quickstart = false;
m_eArgumentCount = NONE; m_noquickstart = false;
m_terminateafterinit = false;
m_nofirststartwizard = false;
m_nologo = false;
m_nolockcheck = false;
m_nodefault = false;
m_help = false;
m_writer = false;
m_calc = false;
m_draw = false;
m_impress = false;
m_global = false;
m_math = false;
m_web = false;
m_base = false;
m_helpwriter = false;
m_helpcalc = false;
m_helpdraw = false;
m_helpbasic = false;
m_helpmath = false;
m_helpimpress = false;
m_helpbase = false;
m_psn = false;
m_version = false;
m_unknown = false;
m_splashpipe = false;
m_bEmpty = true;
m_bDocumentArgs = false; m_bDocumentArgs = false;
m_server = false;
} }
void CommandLineArgs::ClearServer() bool CommandLineArgs::IsMinimized() const
{ {
osl::MutexGuard aMutexGuard( m_aMutex ); return m_minimized;
m_server = false;
} }
sal_Bool CommandLineArgs::IsMinimized() const bool CommandLineArgs::IsInvisible() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_MINIMIZED ]; return m_invisible;
} }
sal_Bool CommandLineArgs::IsInvisible() const bool CommandLineArgs::IsNoRestore() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_INVISIBLE ]; return m_norestore;
} }
sal_Bool CommandLineArgs::IsNoRestore() const bool CommandLineArgs::IsNoDefault() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_NORESTORE ]; return m_nodefault;
} }
sal_Bool CommandLineArgs::IsNoDefault() const bool CommandLineArgs::IsHeadless() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_NODEFAULT ]; return m_headless;
} }
sal_Bool CommandLineArgs::IsServer() const bool CommandLineArgs::IsQuickstart() const
{ {
osl::MutexGuard aMutexGuard( m_aMutex ); return m_quickstart;
return m_server;
} }
sal_Bool CommandLineArgs::IsHeadless() const bool CommandLineArgs::IsNoQuickstart() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HEADLESS ]; return m_noquickstart;
} }
sal_Bool CommandLineArgs::IsQuickstart() const bool CommandLineArgs::IsTerminateAfterInit() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_QUICKSTART ]; return m_terminateafterinit;
} }
sal_Bool CommandLineArgs::IsNoQuickstart() const bool CommandLineArgs::IsNoLogo() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_NOQUICKSTART ]; return m_nologo;
} }
sal_Bool CommandLineArgs::IsTerminateAfterInit() const bool CommandLineArgs::IsNoLockcheck() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_TERMINATEAFTERINIT ]; return m_nolockcheck;
} }
sal_Bool CommandLineArgs::IsNoLogo() const bool CommandLineArgs::IsHelp() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_NOLOGO ]; return m_help;
}
bool CommandLineArgs::IsHelpWriter() const
{
return m_helpwriter;
} }
sal_Bool CommandLineArgs::IsNoLockcheck() const bool CommandLineArgs::IsHelpCalc() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_NOLOCKCHECK ]; return m_helpcalc;
} }
sal_Bool CommandLineArgs::IsHelp() const bool CommandLineArgs::IsHelpDraw() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HELP ]; return m_helpdraw;
}
sal_Bool CommandLineArgs::IsHelpWriter() const
{
return m_aBoolParams[ CMD_BOOLPARAM_HELPWRITER ];
} }
sal_Bool CommandLineArgs::IsHelpCalc() const bool CommandLineArgs::IsHelpImpress() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HELPCALC ]; return m_helpimpress;
} }
sal_Bool CommandLineArgs::IsHelpDraw() const bool CommandLineArgs::IsHelpBase() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HELPDRAW ]; return m_helpbase;
}
bool CommandLineArgs::IsHelpMath() const
{
return m_helpmath;
}
bool CommandLineArgs::IsHelpBasic() const
{
return m_helpbasic;
} }
sal_Bool CommandLineArgs::IsHelpImpress() const bool CommandLineArgs::IsWriter() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HELPIMPRESS ]; return m_writer;
} }
sal_Bool CommandLineArgs::IsHelpBase() const bool CommandLineArgs::IsCalc() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_HELPBASE ]; return m_calc;
}
sal_Bool CommandLineArgs::IsHelpMath() const
{
return m_aBoolParams[ CMD_BOOLPARAM_HELPMATH ];
}
sal_Bool CommandLineArgs::IsHelpBasic() const
{
return m_aBoolParams[ CMD_BOOLPARAM_HELPBASIC ];
} }
sal_Bool CommandLineArgs::IsWriter() const bool CommandLineArgs::IsDraw() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_WRITER ]; return m_draw;
} }
sal_Bool CommandLineArgs::IsCalc() const bool CommandLineArgs::IsImpress() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_CALC ]; return m_impress;
} }
sal_Bool CommandLineArgs::IsDraw() const bool CommandLineArgs::IsBase() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_DRAW ]; return m_base;
} }
sal_Bool CommandLineArgs::IsImpress() const bool CommandLineArgs::IsGlobal() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_IMPRESS ]; return m_global;
} }
sal_Bool CommandLineArgs::IsBase() const bool CommandLineArgs::IsMath() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_BASE ]; return m_math;
} }
sal_Bool CommandLineArgs::IsGlobal() const bool CommandLineArgs::IsWeb() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_GLOBAL ]; return m_web;
} }
sal_Bool CommandLineArgs::IsMath() const bool CommandLineArgs::IsVersion() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_MATH ]; return m_version;
} }
sal_Bool CommandLineArgs::IsWeb() const bool CommandLineArgs::HasUnknown() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_WEB ]; return m_unknown;
} }
sal_Bool CommandLineArgs::IsVersion() const bool CommandLineArgs::HasModuleParam() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_VERSION ]; return m_writer || m_calc || m_draw || m_impress || m_global || m_math
|| m_web || m_base;
} }
sal_Bool CommandLineArgs::HasUnknown() const bool CommandLineArgs::HasSplashPipe() const
{ {
return m_aBoolParams[ CMD_BOOLPARAM_UNKNOWN ]; return m_splashpipe;
}
sal_Bool CommandLineArgs::HasModuleParam() const
{
return CheckGroupMembers( CMD_GRPID_MODULE, CMD_BOOLPARAM_COUNT );
}
sal_Bool CommandLineArgs::GetPortalConnectString( ::rtl::OUString& rPara ) const
{
rPara = m_aStrParams[ CMD_STRINGPARAM_PORTAL ];
return m_aStrSetParams[ CMD_STRINGPARAM_PORTAL ];
}
rtl::OUString CommandLineArgs::GetSplashPipe() const
{
return m_aStrParams[CMD_STRINGPARAM_SPLASHPIPE];
} }
std::vector< rtl::OUString > const & CommandLineArgs::GetAccept() const std::vector< rtl::OUString > const & CommandLineArgs::GetAccept() const
@@ -863,89 +778,76 @@ std::vector< rtl::OUString > const & CommandLineArgs::GetUnaccept() const
return m_unaccept; return m_unaccept;
} }
sal_Bool CommandLineArgs::GetOpenList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetOpenList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_OPENLIST ]; return m_openlist;
return m_aStrSetParams[ CMD_STRINGPARAM_OPENLIST ];
} }
sal_Bool CommandLineArgs::GetViewList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetViewList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_VIEWLIST ]; return m_viewlist;
return m_aStrSetParams[ CMD_STRINGPARAM_VIEWLIST ];
} }
sal_Bool CommandLineArgs::GetStartList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetStartList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_STARTLIST ]; return m_startlist;
return m_aStrSetParams[ CMD_STRINGPARAM_STARTLIST ];
} }
sal_Bool CommandLineArgs::GetForceOpenList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetForceOpenList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_FORCEOPENLIST ]; return m_forceopenlist;
return m_aStrSetParams[ CMD_STRINGPARAM_FORCEOPENLIST ];
} }
sal_Bool CommandLineArgs::GetForceNewList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetForceNewList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_FORCENEWLIST ]; return m_forcenewlist;
return m_aStrSetParams[ CMD_STRINGPARAM_FORCENEWLIST ];
} }
sal_Bool CommandLineArgs::GetPrintList( ::rtl::OUString& rPara) const std::vector< rtl::OUString > const & CommandLineArgs::GetPrintList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_PRINTLIST ]; return m_printlist;
return m_aStrSetParams[ CMD_STRINGPARAM_PRINTLIST ];
} }
sal_Bool CommandLineArgs::GetPrintToList( ::rtl::OUString& rPara ) const std::vector< rtl::OUString > const & CommandLineArgs::GetPrintToList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_PRINTTOLIST ]; return m_printtolist;
return m_aStrSetParams[ CMD_STRINGPARAM_PRINTTOLIST ];
} }
sal_Bool CommandLineArgs::GetPrinterName( ::rtl::OUString& rPara ) const rtl::OUString CommandLineArgs::GetPrinterName() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_PRINTERNAME ]; return m_printername;
return m_aStrSetParams[ CMD_STRINGPARAM_PRINTERNAME ];
} }
sal_Bool CommandLineArgs::GetLanguage( ::rtl::OUString& rPara ) const rtl::OUString CommandLineArgs::GetLanguage() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_LANGUAGE ]; return m_language;
return m_aStrSetParams[ CMD_STRINGPARAM_LANGUAGE ];
} }
sal_Bool CommandLineArgs::GetInFilter( ::rtl::OUString& rPara ) const std::vector< rtl::OUString > const & CommandLineArgs::GetInFilter() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_INFILTER ]; return m_infilter;
return m_aStrSetParams[ CMD_STRINGPARAM_INFILTER ];
} }
sal_Bool CommandLineArgs::GetConversionList( ::rtl::OUString& rPara ) const std::vector< rtl::OUString > const & CommandLineArgs::GetConversionList() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_CONVERSIONLIST ]; return m_conversionlist;
return m_aStrSetParams[ CMD_STRINGPARAM_CONVERSIONLIST ];
} }
sal_Bool CommandLineArgs::GetConversionParams( ::rtl::OUString& rPara ) const rtl::OUString CommandLineArgs::GetConversionParams() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_CONVERSIONPARAMS ]; return m_conversionparams;
return m_aStrSetParams[ CMD_STRINGPARAM_CONVERSIONPARAMS ];
} }
sal_Bool CommandLineArgs::GetConversionOut( ::rtl::OUString& rPara ) const rtl::OUString CommandLineArgs::GetConversionOut() const
{ {
rPara = m_aStrParams[ CMD_STRINGPARAM_CONVERSIONOUT ]; return m_conversionout;
return m_aStrSetParams[ CMD_STRINGPARAM_CONVERSIONOUT ];
} }
sal_Bool CommandLineArgs::IsEmpty() const bool CommandLineArgs::IsEmpty() const
{ {
return m_eArgumentCount == NONE; return m_bEmpty;
} }
sal_Bool CommandLineArgs::WantsToLoadDocument() const bool CommandLineArgs::WantsToLoadDocument() const
{ {
return m_bDocumentArgs; return m_bDocumentArgs;
} }

View File

@@ -34,80 +34,15 @@
#include <vector> #include <vector>
#include <rtl/ustring.hxx> #include <rtl/ustring.hxx>
#include <osl/mutex.hxx> #include "boost/noncopyable.hpp"
#include "boost/optional.hpp" #include "boost/optional.hpp"
namespace desktop namespace desktop
{ {
class CommandLineArgs class CommandLineArgs: private boost::noncopyable
{ {
public: public:
enum BoolParam // must be zero based!
{
CMD_BOOLPARAM_MINIMIZED = 0,
CMD_BOOLPARAM_INVISIBLE,
CMD_BOOLPARAM_NORESTORE,
CMD_BOOLPARAM_HEADLESS,
CMD_BOOLPARAM_QUICKSTART,
CMD_BOOLPARAM_NOQUICKSTART,
CMD_BOOLPARAM_TERMINATEAFTERINIT,
CMD_BOOLPARAM_NOFIRSTSTARTWIZARD,
CMD_BOOLPARAM_NOLOGO,
CMD_BOOLPARAM_NOLOCKCHECK,
CMD_BOOLPARAM_NODEFAULT,
CMD_BOOLPARAM_HELP,
CMD_BOOLPARAM_WRITER,
CMD_BOOLPARAM_CALC,
CMD_BOOLPARAM_DRAW,
CMD_BOOLPARAM_IMPRESS,
CMD_BOOLPARAM_GLOBAL,
CMD_BOOLPARAM_MATH,
CMD_BOOLPARAM_WEB,
CMD_BOOLPARAM_BASE,
CMD_BOOLPARAM_HELPWRITER,
CMD_BOOLPARAM_HELPCALC,
CMD_BOOLPARAM_HELPDRAW,
CMD_BOOLPARAM_HELPBASIC,
CMD_BOOLPARAM_HELPMATH,
CMD_BOOLPARAM_HELPIMPRESS,
CMD_BOOLPARAM_HELPBASE,
CMD_BOOLPARAM_PSN,
CMD_BOOLPARAM_VERSION,
CMD_BOOLPARAM_UNKNOWN,
CMD_BOOLPARAM_COUNT // must be last element!
};
enum StringParam // must be zero based!
{
CMD_STRINGPARAM_PORTAL = 0,
CMD_STRINGPARAM_SPLASHPIPE,
CMD_STRINGPARAM_USERDIR,
CMD_STRINGPARAM_CLIENTDISPLAY,
CMD_STRINGPARAM_OPENLIST,
CMD_STRINGPARAM_VIEWLIST,
CMD_STRINGPARAM_STARTLIST,
CMD_STRINGPARAM_FORCEOPENLIST,
CMD_STRINGPARAM_FORCENEWLIST,
CMD_STRINGPARAM_PRINTLIST,
CMD_STRINGPARAM_VERSION,
CMD_STRINGPARAM_PRINTTOLIST,
CMD_STRINGPARAM_PRINTERNAME,
CMD_STRINGPARAM_CONVERSIONLIST,
CMD_STRINGPARAM_CONVERSIONPARAMS,
CMD_STRINGPARAM_CONVERSIONOUT,
CMD_STRINGPARAM_INFILTER,
CMD_STRINGPARAM_DISPLAY,
CMD_STRINGPARAM_LANGUAGE,
CMD_STRINGPARAM_COUNT // must be last element!
};
enum GroupParamId
{
CMD_GRPID_MODULE = 0,
CMD_GRPID_COUNT
};
struct Supplier struct Supplier
{ {
// Thrown from constructors and next: // Thrown from constructors and next:
@@ -129,99 +64,115 @@ class CommandLineArgs
boost::optional< rtl::OUString > getCwdUrl() const { return m_cwdUrl; } boost::optional< rtl::OUString > getCwdUrl() const { return m_cwdUrl; }
void ClearServer();
// Access to bool parameters // Access to bool parameters
sal_Bool IsMinimized() const; bool IsMinimized() const;
sal_Bool IsInvisible() const; bool IsInvisible() const;
sal_Bool IsNoRestore() const; bool IsNoRestore() const;
sal_Bool IsNoDefault() const; bool IsNoDefault() const;
sal_Bool IsServer() const; bool IsHeadless() const;
sal_Bool IsHeadless() const; bool IsQuickstart() const;
sal_Bool IsQuickstart() const; bool IsNoQuickstart() const;
sal_Bool IsNoQuickstart() const; bool IsTerminateAfterInit() const;
sal_Bool IsTerminateAfterInit() const; bool IsNoLogo() const;
sal_Bool IsNoLogo() const; bool IsNoLockcheck() const;
sal_Bool IsNoLockcheck() const; bool IsHelp() const;
sal_Bool IsHelp() const; bool IsHelpWriter() const;
sal_Bool IsHelpWriter() const; bool IsHelpCalc() const;
sal_Bool IsHelpCalc() const; bool IsHelpDraw() const;
sal_Bool IsHelpDraw() const; bool IsHelpImpress() const;
sal_Bool IsHelpImpress() const; bool IsHelpBase() const;
sal_Bool IsHelpBase() const; bool IsHelpMath() const;
sal_Bool IsHelpMath() const; bool IsHelpBasic() const;
sal_Bool IsHelpBasic() const; bool IsWriter() const;
sal_Bool IsWriter() const; bool IsCalc() const;
sal_Bool IsCalc() const; bool IsDraw() const;
sal_Bool IsDraw() const; bool IsImpress() const;
sal_Bool IsImpress() const; bool IsBase() const;
sal_Bool IsBase() const; bool IsGlobal() const;
sal_Bool IsGlobal() const; bool IsMath() const;
sal_Bool IsMath() const; bool IsWeb() const;
sal_Bool IsWeb() const; bool IsVersion() const;
sal_Bool IsVersion() const; bool HasModuleParam() const;
sal_Bool HasModuleParam() const; bool HasUnknown() const;
sal_Bool HasUnknown() const; bool WantsToLoadDocument() const;
sal_Bool WantsToLoadDocument() const;
// Access to string parameters // Access to string parameters
sal_Bool GetPortalConnectString( ::rtl::OUString& rPara) const; bool HasSplashPipe() const;
rtl::OUString GetSplashPipe() const;
std::vector< rtl::OUString > const & GetAccept() const; std::vector< rtl::OUString > const & GetAccept() const;
std::vector< rtl::OUString > const & GetUnaccept() const; std::vector< rtl::OUString > const & GetUnaccept() const;
sal_Bool GetOpenList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetOpenList() const;
sal_Bool GetViewList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetViewList() const;
sal_Bool GetStartList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetStartList() const;
sal_Bool GetForceOpenList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetForceOpenList() const;
sal_Bool GetForceNewList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetForceNewList() const;
sal_Bool GetPrintList( ::rtl::OUString& rPara) const; std::vector< rtl::OUString > const & GetPrintList() const;
sal_Bool GetPrintToList( ::rtl::OUString& rPara ) const; std::vector< rtl::OUString > const & GetPrintToList() const;
sal_Bool GetPrinterName( ::rtl::OUString& rPara ) const; rtl::OUString GetPrinterName() const;
sal_Bool GetLanguage( ::rtl::OUString& rPara ) const; rtl::OUString GetLanguage() const;
sal_Bool GetInFilter( ::rtl::OUString& rPara ) const; std::vector< rtl::OUString > const & GetInFilter() const;
sal_Bool GetConversionList( ::rtl::OUString& rPara ) const; std::vector< rtl::OUString > const & GetConversionList() const;
sal_Bool GetConversionParams( ::rtl::OUString& rPara ) const; rtl::OUString GetConversionParams() const;
sal_Bool GetConversionOut( ::rtl::OUString& rPara ) const; rtl::OUString GetConversionOut() const;
// Special analyzed states (does not match directly to a command line parameter!) // Special analyzed states (does not match directly to a command line parameter!)
sal_Bool IsPrinting() const; bool IsEmpty() const;
sal_Bool IsEmpty() const;
private: private:
enum Count { NONE, ONE, MANY }; bool InterpretCommandLineParameter( const ::rtl::OUString&, ::rtl::OUString& );
struct GroupDefinition
{
sal_Int32 nCount;
BoolParam* pGroupMembers;
};
// no copy and operator=
CommandLineArgs( const CommandLineArgs& );
CommandLineArgs operator=( const CommandLineArgs& );
sal_Bool InterpretCommandLineParameter( const ::rtl::OUString&, ::rtl::OUString& );
void ParseCommandLine_Impl( Supplier& supplier ); void ParseCommandLine_Impl( Supplier& supplier );
void InitParamValues(); void InitParamValues();
sal_Bool CheckGroupMembers( GroupParamId nGroup, BoolParam nExcludeMember ) const;
void AddStringListParam_Impl( StringParam eParam, const rtl::OUString& aParam );
void SetBoolParam_Impl( BoolParam eParam, sal_Bool bValue );
boost::optional< rtl::OUString > m_cwdUrl; boost::optional< rtl::OUString > m_cwdUrl;
sal_Bool m_aBoolParams[ CMD_BOOLPARAM_COUNT ]; // Stores boolean parameters
rtl::OUString m_aStrParams[ CMD_STRINGPARAM_COUNT ]; // Stores string parameters bool m_minimized;
sal_Bool m_aStrSetParams[ CMD_STRINGPARAM_COUNT ]; // Stores if string parameters are provided on cmdline bool m_invisible;
Count m_eArgumentCount; // Number of Args bool m_norestore;
bool m_headless;
bool m_quickstart;
bool m_noquickstart;
bool m_terminateafterinit;
bool m_nofirststartwizard;
bool m_nologo;
bool m_nolockcheck;
bool m_nodefault;
bool m_help;
bool m_writer;
bool m_calc;
bool m_draw;
bool m_impress;
bool m_global;
bool m_math;
bool m_web;
bool m_base;
bool m_helpwriter;
bool m_helpcalc;
bool m_helpdraw;
bool m_helpbasic;
bool m_helpmath;
bool m_helpimpress;
bool m_helpbase;
bool m_psn;
bool m_version;
bool m_unknown;
bool m_splashpipe;
bool m_bEmpty; // No Args at all
bool m_bDocumentArgs; // A document creation/open/load arg is used bool m_bDocumentArgs; // A document creation/open/load arg is used
std::vector< rtl::OUString > m_accept; std::vector< rtl::OUString > m_accept;
std::vector< rtl::OUString > m_unaccept; std::vector< rtl::OUString > m_unaccept;
std::vector< rtl::OUString > m_openlist;
mutable ::osl::Mutex m_aMutex; std::vector< rtl::OUString > m_viewlist;
bool m_server; std::vector< rtl::OUString > m_startlist;
std::vector< rtl::OUString > m_forceopenlist;
// static definition for groups where only one member can be true std::vector< rtl::OUString > m_forcenewlist;
static GroupDefinition m_pGroupDefinitions[ CMD_GRPID_COUNT ]; std::vector< rtl::OUString > m_printlist;
std::vector< rtl::OUString > m_printtolist;
rtl::OUString m_printername;
std::vector< rtl::OUString > m_conversionlist;
rtl::OUString m_conversionparams;
rtl::OUString m_conversionout;
std::vector< rtl::OUString > m_infilter;
rtl::OUString m_language;
}; };
} }

View File

@@ -172,7 +172,7 @@ bool LanguageSelection::prepareLanguage()
OUString aEmpty; OUString aEmpty;
const CommandLineArgs& rCmdLineArgs = Desktop::GetCommandLineArgs(); const CommandLineArgs& rCmdLineArgs = Desktop::GetCommandLineArgs();
rCmdLineArgs.GetLanguage(aLocaleString); aLocaleString = rCmdLineArgs.GetLanguage();
if (isInstalledLanguage(aLocaleString, sal_False)) if (isInstalledLanguage(aLocaleString, sal_False))
{ {
bCmdLanguage = true; bCmdLanguage = true;

View File

@@ -628,15 +628,6 @@ OfficeIPCThread::~OfficeIPCThread()
pGlobalOfficeIPCThread.clear(); pGlobalOfficeIPCThread.clear();
} }
static void AddURLToStringList( const rtl::OUString& aURL, rtl::OUString& aStringList )
{
::rtl::OUStringBuffer aStringListBuf(aStringList);
if ( aStringListBuf.getLength() )
aStringListBuf.append('\n');
aStringListBuf.append(aURL);
aStringList = aStringListBuf.makeStringAndClear();
}
void OfficeIPCThread::SetReady( void OfficeIPCThread::SetReady(
rtl::Reference< OfficeIPCThread > const & pThread) rtl::Reference< OfficeIPCThread > const & pThread)
{ {
@@ -764,19 +755,26 @@ void OfficeIPCThread::execute()
// Print requests are not dependent on the --invisible cmdline argument as they are // Print requests are not dependent on the --invisible cmdline argument as they are
// loaded with the "hidden" flag! So they are always checked. // loaded with the "hidden" flag! So they are always checked.
bDocRequestSent |= aCmdLineArgs->GetPrintList( pRequest->aPrintList ); pRequest->aPrintList = aCmdLineArgs->GetPrintList();
bDocRequestSent |= ( aCmdLineArgs->GetPrintToList( pRequest->aPrintToList ) && bDocRequestSent |= !pRequest->aPrintList.empty();
aCmdLineArgs->GetPrinterName( pRequest->aPrinterName ) ); pRequest->aPrintToList = aCmdLineArgs->GetPrintToList();
pRequest->aPrinterName = aCmdLineArgs->GetPrinterName();
bDocRequestSent |= !( pRequest->aPrintToList.empty() || pRequest->aPrinterName.isEmpty() );
if ( !rCurrentCmdLineArgs.IsInvisible() ) if ( !rCurrentCmdLineArgs.IsInvisible() )
{ {
// Read cmdline args that can open/create documents. As they would open a window // Read cmdline args that can open/create documents. As they would open a window
// they are only allowed if the "--invisible" is currently not used! // they are only allowed if the "--invisible" is currently not used!
bDocRequestSent |= aCmdLineArgs->GetOpenList( pRequest->aOpenList ); pRequest->aOpenList = aCmdLineArgs->GetOpenList();
bDocRequestSent |= aCmdLineArgs->GetViewList( pRequest->aViewList ); bDocRequestSent |= !pRequest->aOpenList.empty();
bDocRequestSent |= aCmdLineArgs->GetStartList( pRequest->aStartList ); pRequest->aViewList = aCmdLineArgs->GetViewList();
bDocRequestSent |= aCmdLineArgs->GetForceOpenList( pRequest->aForceOpenList ); bDocRequestSent |= !pRequest->aViewList.empty();
bDocRequestSent |= aCmdLineArgs->GetForceNewList( pRequest->aForceNewList ); pRequest->aStartList = aCmdLineArgs->GetStartList();
bDocRequestSent |= !pRequest->aStartList.empty();
pRequest->aForceOpenList = aCmdLineArgs->GetForceOpenList();
bDocRequestSent |= !pRequest->aForceOpenList.empty();
pRequest->aForceNewList = aCmdLineArgs->GetForceNewList();
bDocRequestSent |= !pRequest->aForceNewList.empty();
// Special command line args to create an empty document for a given module // Special command line args to create an empty document for a given module
@@ -805,10 +803,10 @@ void OfficeIPCThread::execute()
else if ( aCmdLineArgs->IsWeb() ) else if ( aCmdLineArgs->IsWeb() )
eFactory = SvtModuleOptions::E_WRITERWEB; eFactory = SvtModuleOptions::E_WRITERWEB;
if ( !pRequest->aOpenList.isEmpty() ) if ( !pRequest->aOpenList.empty() )
pRequest->aModule = aOpt.GetFactoryName( eFactory ); pRequest->aModule = aOpt.GetFactoryName( eFactory );
else else
AddURLToStringList( aOpt.GetFactoryEmptyDocumentURL( eFactory ), pRequest->aOpenList ); pRequest->aOpenList.push_back( aOpt.GetFactoryEmptyDocumentURL( eFactory ) );
bDocRequestSent = sal_True; bDocRequestSent = sal_True;
} }
} }
@@ -917,29 +915,23 @@ void OfficeIPCThread::execute()
static void AddToDispatchList( static void AddToDispatchList(
DispatchWatcher::DispatchList& rDispatchList, DispatchWatcher::DispatchList& rDispatchList,
boost::optional< rtl::OUString > const & cwdUrl, boost::optional< rtl::OUString > const & cwdUrl,
const OUString& aRequestList, std::vector< rtl::OUString > const & aRequestList,
DispatchWatcher::RequestType nType, DispatchWatcher::RequestType nType,
const OUString& aParam, const OUString& aParam,
const OUString& aFactory ) const OUString& aFactory )
{ {
if ( !aRequestList.isEmpty() ) for (std::vector< rtl::OUString >::const_iterator i(aRequestList.begin());
i != aRequestList.end(); ++i)
{ {
sal_Int32 nIndex = 0;
do
{
OUString aToken = aRequestList.getToken( 0, '\n', nIndex );
if ( !aToken.isEmpty() )
rDispatchList.push_back( rDispatchList.push_back(
DispatchWatcher::DispatchRequest( nType, aToken, cwdUrl, aParam, aFactory )); DispatchWatcher::DispatchRequest( nType, *i, cwdUrl, aParam, aFactory ));
}
while ( nIndex >= 0 );
} }
} }
static void AddConversionsToDispatchList( static void AddConversionsToDispatchList(
DispatchWatcher::DispatchList& rDispatchList, DispatchWatcher::DispatchList& rDispatchList,
boost::optional< rtl::OUString > const & cwdUrl, boost::optional< rtl::OUString > const & cwdUrl,
const OUString& rRequestList, std::vector< rtl::OUString > const & rRequestList,
const OUString& rParam, const OUString& rParam,
const OUString& rPrinterName, const OUString& rPrinterName,
const OUString& rFactory, const OUString& rFactory,
@@ -977,17 +969,11 @@ static void AddConversionsToDispatchList(
aParam += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( ";" )) + aPWD; aParam += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( ";" )) + aPWD;
} }
if ( !rRequestList.isEmpty() ) for (std::vector< rtl::OUString >::const_iterator i(rRequestList.begin());
i != rRequestList.end(); ++i)
{ {
sal_Int32 nIndex = 0;
do
{
OUString aToken = rRequestList.getToken( 0, '\n', nIndex );
if ( !aToken.isEmpty() )
rDispatchList.push_back( rDispatchList.push_back(
DispatchWatcher::DispatchRequest( nType, aToken, cwdUrl, aParam, rFactory )); DispatchWatcher::DispatchRequest( nType, *i, cwdUrl, aParam, rFactory ));
}
while ( nIndex >= 0 );
} }
} }

View File

@@ -29,6 +29,10 @@
#ifndef _DESKTOP_OFFICEIPCTHREAD_HXX_ #ifndef _DESKTOP_OFFICEIPCTHREAD_HXX_
#define _DESKTOP_OFFICEIPCTHREAD_HXX_ #define _DESKTOP_OFFICEIPCTHREAD_HXX_
#include "sal/config.h"
#include <vector>
#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/frame/XTerminateListener.hpp> #include <com/sun/star/frame/XTerminateListener.hpp>
#include <osl/pipe.hxx> #include <osl/pipe.hxx>
@@ -55,18 +59,18 @@ struct ProcessDocumentsRequest
boost::optional< ::rtl::OUString > aCwdUrl; boost::optional< ::rtl::OUString > aCwdUrl;
::rtl::OUString aModule; ::rtl::OUString aModule;
::rtl::OUString aOpenList; // Documents that should be opened in the default way std::vector< rtl::OUString > aOpenList; // Documents that should be opened in the default way
::rtl::OUString aViewList; // Documents that should be opened in viewmode std::vector< rtl::OUString > aViewList; // Documents that should be opened in viewmode
::rtl::OUString aStartList; // Documents/Presentations that should be started std::vector< rtl::OUString > aStartList; // Documents/Presentations that should be started
::rtl::OUString aPrintList; // Documents that should be printed on default printer std::vector< rtl::OUString > aPrintList; // Documents that should be printed on default printer
::rtl::OUString aForceOpenList; // Documents that should be forced to open for editing (even templates) std::vector< rtl::OUString > aForceOpenList; // Documents that should be forced to open for editing (even templates)
::rtl::OUString aForceNewList; // Documents that should be forced to create a new document std::vector< rtl::OUString > aForceNewList; // Documents that should be forced to create a new document
::rtl::OUString aPrinterName; // The printer name that should be used for printing ::rtl::OUString aPrinterName; // The printer name that should be used for printing
::rtl::OUString aPrintToList; // Documents that should be printed on the given printer std::vector< rtl::OUString > aPrintToList; // Documents that should be printed on the given printer
::rtl::OUString aConversionList; std::vector< rtl::OUString > aConversionList;
::rtl::OUString aConversionParams; ::rtl::OUString aConversionParams;
::rtl::OUString aConversionOut; ::rtl::OUString aConversionOut;
::rtl::OUString aInFilter; std::vector< rtl::OUString > aInFilter;
::osl::Condition *pcProcessed; // pointer condition to be set when the request has been processed ::osl::Condition *pcProcessed; // pointer condition to be set when the request has been processed
}; };

View File

@@ -224,15 +224,11 @@ void GalApp::Init()
void GalApp::InitUCB() void GalApp::InitUCB()
{ {
rtl::OUString aEmpty; rtl::OUString aEmpty;
Sequence< Any > aArgs(6); Sequence< Any > aArgs(2);
aArgs[0] aArgs[0]
<<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_LOCAL)); <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY1_LOCAL));
aArgs[1] aArgs[1]
<<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY2_OFFICE)); <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UCB_CONFIGURATION_KEY2_OFFICE));
aArgs[2] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PIPE"));
aArgs[3] <<= aEmpty;
aArgs[4] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PORTAL"));
aArgs[5] <<= aEmpty;
if (! ::ucbhelper::ContentBroker::initialize( xMSF, aArgs ) ) if (! ::ucbhelper::ContentBroker::initialize( xMSF, aArgs ) )
fprintf( stderr, "Failed to init content broker\n" ); fprintf( stderr, "Failed to init content broker\n" );

View File

@@ -77,7 +77,6 @@
#include <vcl/svapp.hxx> #include <vcl/svapp.hxx>
#include <vcl/help.hxx> #include <vcl/help.hxx>
#include <srcharg.hxx> #include <srcharg.hxx>
#include <osl/security.hxx>
using ucbhelper::getLocalFileURL; using ucbhelper::getLocalFileURL;
using ucbhelper::getSystemPathFromFileURL; using ucbhelper::getSystemPathFromFileURL;
@@ -430,13 +429,9 @@ sal_Bool Ucb::init()
if (m_xFac.is()) if (m_xFac.is())
try try
{ {
rtl::OUString aPipe; uno::Sequence< uno::Any > aArgs(2);
osl::Security().getUserIdent(aPipe);
uno::Sequence< uno::Any > aArgs(4);
aArgs[0] <<= m_aConfigurationKey1; aArgs[0] <<= m_aConfigurationKey1;
aArgs[1] <<= m_aConfigurationKey2; aArgs[1] <<= m_aConfigurationKey2;
aArgs[2] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PIPE"));
aArgs[3] <<= aPipe;
::ucbhelper::ContentBroker::initialize( m_xFac, aArgs ); ::ucbhelper::ContentBroker::initialize( m_xFac, aArgs );
m_xProv m_xProv

View File

@@ -34,12 +34,7 @@
accessed in the configuration database. accessed in the configuration database.
*/ */
#define UCB_CONFIGURATION_KEY1_LOCAL "Local" #define UCB_CONFIGURATION_KEY1_LOCAL "Local"
#define UCB_CONFIGURATION_KEY1_SERVER "Server"
#define UCB_CONFIGURATION_KEY2_UNIVERSAL_CONTENT_BROKER \
"UniversalContentBroker"
#define UCB_CONFIGURATION_KEY2_OFFICE "Office" #define UCB_CONFIGURATION_KEY2_OFFICE "Office"
#define UCB_CONFIGURATION_KEY2_WEB_SERVER "WebServer"
#define UCB_CONFIGURATION_KEY2_CLIENT_ACCESS "ClientAccess"
#endif // _UCBHELPER_CONFIGURATIONKEYS_HXX_ #endif // _UCBHELPER_CONFIGURATIONKEYS_HXX_