2004-06-25 11:39:32 +00:00
/*************************************************************************
2000-09-18 15:18:56 +00:00
*
* $ RCSfile : app . cxx , v $
*
2005-02-21 16:19:17 +00:00
* $ Revision : 1.168 $
2000-09-18 15:18:56 +00:00
*
2005-02-21 16:19:17 +00:00
* last change : $ Author : vg $ $ Date : 2005 - 02 - 21 17 : 19 : 17 $
2000-09-18 15:18:56 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc . , October , 2000
*
* GNU Lesser General Public License Version 2.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright 2000 by Sun Microsystems , Inc .
* 901 San Antonio Road , Palo Alto , CA 94303 , USA
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 , as published by the Free Software Foundation .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston ,
* MA 02111 - 1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 ( the " License " ) ; You may not use this file
* except in compliance with the License . You may obtain a copy of the
* License at http : //www.openoffice.org/license.html.
*
* Software provided under this License is provided on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , EITHER EXPRESSED OR IMPLIED , INCLUDING ,
* WITHOUT LIMITATION , WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS ,
* MERCHANTABLE , FIT FOR A PARTICULAR PURPOSE , OR NON - INFRINGING .
* See the License for the specific provisions governing your rights and
* obligations concerning the Software .
*
* The Initial Developer of the Original Code is : Sun Microsystems , Inc .
*
* Copyright : 2000 by Sun Microsystems , Inc .
*
* All Rights Reserved .
*
* Contributor ( s ) : _______________________________________
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-09-25 10:25:35 +00:00
# include <unistd.h>
2000-09-18 15:18:56 +00:00
# include "app.hxx"
2001-07-16 11:55:47 +00:00
# include "desktop.hrc"
# include "appinit.hxx"
2001-07-06 14:58:45 +00:00
# include "intro.hxx"
2003-03-25 12:52:54 +00:00
# include "officeipcthread.hxx"
2001-07-16 11:55:47 +00:00
# include "cmdlineargs.hxx"
# include "desktopresid.hxx"
2001-11-05 06:18:26 +00:00
# include "dispatchwatcher.hxx"
2002-10-21 08:05:48 +00:00
# include "configinit.hxx"
2002-09-30 15:01:32 +00:00
# include "lockfile.hxx"
2002-11-01 13:49:58 +00:00
# include "checkinstall.hxx"
2003-03-25 12:52:54 +00:00
# include "cmdlinehelp.hxx"
2003-11-07 13:51:04 +00:00
# include "userinstall.hxx"
2004-05-10 12:00:30 +00:00
# include "desktopcontext.hxx"
2004-11-26 13:49:05 +00:00
# include "exithelper.hxx"
2004-11-09 13:04:03 +00:00
# include "javainteractionhandler.hxx"
2004-11-15 15:01:54 +00:00
# include "../migration/wizard.hxx"
2000-09-18 15:18:56 +00:00
2005-02-02 12:45:19 +00:00
# ifndef _COM_SUN_STAR_FRAME_XSESSIONMANAGERLISTENER_HPP_
# include <com/sun/star/frame/XSessionManagerListener.hpp>
# endif
2004-11-26 13:49:05 +00:00
# ifndef _COM_SUN_STAR_FRAME_XSYNCHRONOUSDISPATCH_HPP_
# include <com/sun/star/frame/XSynchronousDispatch.hpp>
# endif
2004-07-23 10:20:30 +00:00
# ifndef _COM_SUN_STAR_DOCUMENT_CORRUPTEDFILTERCONFIGURATION_HPP_
# include <com/sun/star/document/CorruptedFilterConfigurationException.hpp>
# endif
2001-07-17 07:34:12 +00:00
# ifndef _COM_SUN_STAR_FRAME_XSTORABLE_HPP_
# include <com/sun/star/frame/XStorable.hpp>
# endif
# ifndef _COM_SUN_STAR_UTIL_XMODIFIABLE_HPP_
# include <com/sun/star/util/XModifiable.hpp>
# endif
2004-11-26 13:49:05 +00:00
# ifndef _COM_SUN_STAR_UTIL_XFLUSHABLE_HPP_
# include <com/sun/star/util/XFlushable.hpp>
# endif
2001-07-17 07:34:12 +00:00
# ifndef _COM_SUN_STAR_SYSTEM_XSYSTEMSHELLEXECUTE_HPP_
# include <com/sun/star/system/XSystemShellExecute.hpp>
# endif
# ifndef _COM_SUN_STAR_SYSTEM_SYSTEMSHELLEXECUTEFLAGS_HPP_
# include <com/sun/star/system/SystemShellExecuteFlags.hpp>
# endif
2001-07-16 11:55:47 +00:00
# ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
# include <com/sun/star/beans/XPropertySet.hpp>
2000-09-18 15:18:56 +00:00
# endif
# ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_
# include <com/sun/star/lang/XComponent.hpp>
# endif
2003-07-22 07:26:21 +00:00
# ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_
# include <com/sun/star/uno/RuntimeException.hpp>
# endif
# ifndef _COM_SUN_STAR_IO_IOEXCEPTION_HPP_
# include <com/sun/star/io/IOException.hpp>
# endif
# ifndef _COM_SUN_STAR_LANG_ILLEGALARGUMENTEXCEPTION_HPP_
# include <com/sun/star/lang/IllegalArgumentException.hpp>
# endif
2003-03-25 12:52:54 +00:00
# ifndef _COM_SUN_STAR_LANG_WRAPPEDTARGETEXCEPTION_HPP_
# include <com/sun/star/lang/WrappedTargetException.hpp>
# endif
2001-07-16 11:55:47 +00:00
# ifndef _COM_SUN_STAR_FRAME_XDESKTOP_HPP_
# include <com/sun/star/frame/XDesktop.hpp>
# endif
# ifndef _COM_SUN_STAR_FRAME_XCOMPONENTLOADER_HPP_
# include <com/sun/star/frame/XComponentLoader.hpp>
# endif
# ifndef _COM_SUN_STAR_VIEW_XPRINTABLE_HPP_
# include <com/sun/star/view/XPrintable.hpp>
# endif
2001-07-20 08:52:29 +00:00
# ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
# include <com/sun/star/lang/XInitialization.hpp>
# endif
2002-05-24 10:24:34 +00:00
# ifndef _COM_SUN_STAR_FRAME_XFRAMESSUPPLIER_HPP_
# include <com/sun/star/frame/XFramesSupplier.hpp>
2001-07-16 11:55:47 +00:00
# endif
# ifndef _COM_SUN_STAR_AWT_XTOPWINDOW_HPP_
# include <com/sun/star/awt/XTopWindow.hpp>
2001-02-08 14:24:59 +00:00
# endif
2001-08-02 12:34:32 +00:00
# ifndef _COM_SUN_STAR_UTIL_XURLTRANSFORMER_HPP_
# include <com/sun/star/util/XURLTransformer.hpp>
# endif
# ifndef _COM_SUN_STAR_UTIL_URL_HPP_
# include <com/sun/star/util/URL.hpp>
# endif
# ifndef _COM_SUN_STAR_FRAME_XDISPATCH_HPP_
# include <com/sun/star/frame/XDispatch.hpp>
# endif
# ifndef _COM_SUN_STAR_FRAME_XDISPATCHPROVIDER_HPP_
# include <com/sun/star/frame/XDispatchProvider.hpp>
# endif
2002-10-21 08:05:48 +00:00
# ifndef _COM_SUN_STAR_LANG_SERVICENOTREGISTEREDEXCEPTION_HPP_
# include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
# endif
2001-08-09 04:43:13 +00:00
# ifndef _COM_SUN_STAR_CONFIGURATION_MISSINGBOOTSTRAPFILEEXCEPTION_HPP_
# include <com/sun/star/configuration/MissingBootstrapFileException.hpp>
# endif
# ifndef _COM_SUN_STAR_CONFIGURATION_INVALIDBOOTSTRAPFILEEXCEPTION_HPP_
# include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
# endif
# ifndef _COM_SUN_STAR_CONFIGURATION_INSTALLATIONINCOMPLETEEXCEPTION_HPP_
# include <com/sun/star/configuration/InstallationIncompleteException.hpp>
# endif
2003-04-17 12:32:52 +00:00
# ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_BACKENDSETUPEXCEPTION_HPP_
# include <com/sun/star/configuration/backend/BackendSetupException.hpp>
# endif
# ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_BACKENDACCESSEXCEPTION_HPP_
# include <com/sun/star/configuration/backend/BackendAccessException.hpp>
# endif
2001-11-21 15:31:29 +00:00
# ifndef _COM_SUN_STAR_CONTAINER_XENUMERATION_HPP_
# include <com/sun/star/container/XEnumeration.hpp>
# endif
2001-11-21 13:57:13 +00:00
# ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_
# include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
# endif
# ifndef _COM_SUN_STAR_UI_DIALOGS_EXECUTABLEDIALOGRESULTS_HPP_
# include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
# endif
2001-12-05 12:33:54 +00:00
# ifndef _COM_SUN_STAR_TASK_XJOBEXECUTOR_HPP_
# include <com/sun/star/task/XJobExecutor.hpp>
# endif
2004-06-25 12:10:20 +00:00
# ifndef _COM_SUN_STAR_TASK_XJOBEXECUTOR_HPP_
# include <com/sun/star/task/XJob.hpp>
# endif
2001-12-13 08:04:55 +00:00
# ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
# include <com/sun/star/beans/XPropertySet.hpp>
# endif
2003-05-22 07:51:28 +00:00
# ifndef _COM_SUN_STAR_BEANS_NAMEDVALUE_HPP_
# include <com/sun/star/beans/NamedValue.hpp>
# endif
# ifndef _COM_SUN_STAR_TASK_XJOB_HPP_
# include <com/sun/star/task/XJob.hpp>
# endif
2005-02-02 12:45:19 +00:00
# ifndef _COM_SUN_STAR_DOCUMENT_XEVENTLISTENER_HPP_
# include <com/sun/star/document/XEventListener.hpp>
# endif
2000-09-18 15:18:56 +00:00
2002-08-16 13:14:03 +00:00
# include <com/sun/star/java/XJavaVM.hpp>
2001-11-09 15:17:35 +00:00
2004-06-25 12:10:20 +00:00
# ifndef _TOOLS_TESTTOOLLOADER_HXX_
# include <tools/testtoolloader.hxx>
# endif
2001-07-26 06:45:36 +00:00
# ifndef _SOLAR_H
# include <tools/solar.h>
# endif
2001-07-16 11:55:47 +00:00
# ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
# include <toolkit/unohlp.hxx>
# endif
# ifndef _VOS_SECURITY_HXX_
# include <vos/security.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _VOS_REF_HXX_
# include <vos/ref.hxx>
# endif
2001-08-07 10:25:00 +00:00
# ifndef _VOS_PROCESS_HXX_
# include <vos/process.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _COMPHELPER_PROCESSFACTORY_HXX_
2000-10-23 07:26:10 +00:00
# include <comphelper/processfactory.hxx>
2001-08-01 11:16:42 +00:00
# endif
2004-12-02 08:14:48 +00:00
# ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_
# include <comphelper/configurationhelper.hxx>
# endif
2003-06-27 08:42:13 +00:00
# ifndef _UTL__HXX_
2000-11-30 07:47:40 +00:00
# include <unotools/configmgr.hxx>
# endif
2001-02-08 14:24:59 +00:00
# ifndef _UTL_CONFIGITEM_HXX_
# include <unotools/configitem.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _UNOTOOLS_CONFIGNODE_HXX_
# include <unotools/confignode.hxx>
# endif
2001-07-16 11:55:47 +00:00
# ifndef _UNOTOOLS_UCBHELPER_HXX
# include <unotools/ucbhelper.hxx>
# endif
# ifndef _TOOLS_TEMPFILE_HXX
# include <tools/tempfile.hxx>
2001-07-06 14:58:45 +00:00
# endif
2001-07-16 11:55:47 +00:00
# ifndef _URLOBJ_HXX
# include <tools/urlobj.hxx>
# endif
# ifndef INCLUDED_SVTOOLS_MODULEOPTIONS_HXX
# include <svtools/moduleoptions.hxx>
# endif
2001-07-26 06:45:36 +00:00
# ifndef _OSL_MODULE_H_
# include <osl/module.h>
# endif
# ifndef _OSL_FILE_HXX_
# include <osl/file.hxx>
# endif
2001-09-26 08:45:06 +00:00
# ifndef _OSL_PROCESS_H_
# include <osl/process.h>
# endif
2001-07-26 06:45:36 +00:00
2001-08-01 11:16:42 +00:00
# ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
2001-07-16 11:55:47 +00:00
# include <svtools/pathoptions.hxx>
2001-08-01 11:16:42 +00:00
# endif
2002-05-13 08:39:57 +00:00
# ifndef _SVTOOLS_LANGUAGEOPTIONS_HXX
# include <svtools/languageoptions.hxx>
2001-08-01 11:16:42 +00:00
# endif
# ifndef INCLUDED_SVTOOLS_INTERNALOPTIONS_HXX
2001-07-16 11:55:47 +00:00
# include <svtools/internaloptions.hxx>
2001-08-01 11:16:42 +00:00
# endif
2002-10-21 04:36:19 +00:00
# ifndef INCLUDED_SVTOOLS_MISCOPT_HXX
# include <svtools/miscopt.hxx>
# endif
2003-04-29 11:40:40 +00:00
# ifndef INCLUDED_SVTOOLS_SYSLOCALEOPTIONS_HXX
# include <svtools/syslocaleoptions.hxx>
# endif
2003-09-29 13:56:09 +00:00
# ifndef SVTOOLS_FOLDER_RESTRICTION_HXX
# include <svtools/folderrestriction.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _UNOTOOLS_TEMPFILE_HXX
2001-07-17 07:34:12 +00:00
# include <unotools/tempfile.hxx>
2001-08-01 11:16:42 +00:00
# endif
2000-09-18 15:18:56 +00:00
2001-08-01 11:16:42 +00:00
# ifndef _RTL_LOGFILE_HXX_
2001-07-10 04:29:45 +00:00
# include <rtl/logfile.hxx>
2001-08-01 11:16:42 +00:00
# endif
2001-08-07 10:25:00 +00:00
# ifndef _RTL_USTRBUF_HXX_
# include <rtl/ustrbuf.hxx>
# endif
2001-10-09 11:12:08 +00:00
# ifndef _RTL_STRBUF_HXX_
# include <rtl/strbuf.hxx>
# endif
2001-11-21 13:57:13 +00:00
# ifndef _RTL_BOOTSTRAP_HXX_
# include <rtl/bootstrap.hxx>
# endif
2004-06-25 16:30:04 +00:00
# ifndef INCLUDED_RTL_INSTANCE_HXX
# include <rtl/instance.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _UTL_CONFIGMGR_HXX_
2000-12-08 07:45:22 +00:00
# include <unotools/configmgr.hxx>
2001-08-01 11:16:42 +00:00
# endif
2003-06-27 08:42:13 +00:00
# ifndef _SV_HELP_HXX
# include <vcl/help.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _SV_MSGBOX_HXX
2000-12-12 13:20:07 +00:00
# include <vcl/msgbox.hxx>
2001-08-01 11:16:42 +00:00
# endif
# ifndef _SV_BITMAP_HXX
2001-07-06 14:58:45 +00:00
# include <vcl/bitmap.hxx>
2001-08-01 11:16:42 +00:00
# endif
# ifndef _VCL_STDTEXT_HXX
# include <vcl/stdtext.hxx>
# endif
2001-08-07 10:25:00 +00:00
# ifndef _SV_MSGBOX_HXX
# include <vcl/msgbox.hxx>
# endif
2001-08-01 11:16:42 +00:00
# ifndef _SFX_HRC
2001-07-06 14:58:45 +00:00
# include <sfx2/sfx.hrc>
2001-08-01 11:16:42 +00:00
# endif
# ifndef _UCBHELPER_CONTENTBROKER_HXX
2001-07-16 11:55:47 +00:00
# include <ucbhelper/contentbroker.hxx>
2001-08-01 11:16:42 +00:00
# endif
# ifndef _UTL_BOOTSTRAP_HXX
2001-07-24 09:24:30 +00:00
# include <unotools/bootstrap.hxx>
2001-08-01 11:16:42 +00:00
# endif
2001-03-07 08:20:36 +00:00
2004-02-03 19:03:09 +00:00
# include <svtools/fontsubstconfig.hxx>
# include <svtools/accessibilityoptions.hxx>
# include <svtools/apearcfg.hxx>
# include <svtools/misccfg.hxx>
# include <svtools/filter.hxx>
2003-11-07 13:51:04 +00:00
# include "langselect.hxx"
2005-01-27 11:26:58 +00:00
# include <stdio.h>
2003-06-12 09:46:20 +00:00
# define DEFINE_CONST_UNICODE(CONSTASCII) UniString(RTL_CONSTASCII_USTRINGPARAM(CONSTASCII))
2003-06-27 08:42:13 +00:00
# define U2S(STRING) ::rtl::OUStringToOString(STRING, RTL_TEXTENCODING_UTF8)
2000-09-18 15:18:56 +00:00
2001-07-16 11:55:47 +00:00
using namespace vos ;
using namespace rtl ;
2003-07-22 07:26:21 +00:00
2003-08-18 14:31:06 +00:00
//Gives an ICE with MSVC6
//namespace css = ::com::sun::star;
2003-07-22 07:26:21 +00:00
2003-08-18 14:31:06 +00:00
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : util ;
using namespace : : com : : sun : : star : : lang ;
using namespace : : com : : sun : : star : : beans ;
2003-03-25 12:52:54 +00:00
//using namespace ::com::sun::star::bridge;
2003-08-18 14:31:06 +00:00
using namespace : : com : : sun : : star : : frame ;
using namespace : : com : : sun : : star : : document ;
using namespace : : com : : sun : : star : : view ;
using namespace : : com : : sun : : star : : task ;
using namespace : : com : : sun : : star : : system ;
using namespace : : com : : sun : : star : : ui : : dialogs ;
using namespace : : com : : sun : : star : : container ;
2003-07-22 07:26:21 +00:00
2004-11-26 13:49:05 +00:00
namespace css = : : com : : sun : : star ;
2001-07-16 11:55:47 +00:00
2003-06-27 08:42:13 +00:00
ResMgr * desktop : : Desktop : : pResMgr = 0 ;
2003-04-24 12:35:03 +00:00
sal_Bool desktop : : Desktop : : bSuppressOpenDefault = sal_False ;
2001-07-16 11:55:47 +00:00
2002-11-01 13:49:58 +00:00
namespace desktop
{
static SalMainPipeExchangeSignalHandler * pSignalHandler = 0 ;
2001-07-30 14:31:59 +00:00
// ----------------------------------------------------------------------------
2001-12-11 13:39:35 +00:00
char const INSTALLMODE_STANDALONE [ ] = " STANDALONE " ;
char const INSTALLMODE_NETWORK [ ] = " NETWORK " ;
2002-01-11 11:20:36 +00:00
2001-07-16 11:55:47 +00:00
// ----------------------------------------------------------------------------
ResMgr * Desktop : : GetDesktopResManager ( )
{
if ( ! Desktop : : pResMgr )
{
String aMgrName = String : : CreateFromAscii ( " dkt " ) ;
2002-10-18 05:44:15 +00:00
aMgrName + = String : : CreateFromInt32 ( SUPD ) ; // current version number
2003-03-25 12:52:54 +00:00
2002-04-10 04:49:49 +00:00
// Create desktop resource manager and bootstrap process
// was successful. Use default way to get language specific message.
if ( Application : : IsInExecute ( ) )
Desktop : : pResMgr = ResMgr : : CreateResMgr ( U2S ( aMgrName ) ) ;
if ( ! Desktop : : pResMgr )
{
// Use VCL to get the correct language specific message as we
// are in the bootstrap process and not able to get the installed
// language!!
2004-06-25 11:39:32 +00:00
/*
2002-04-10 04:49:49 +00:00
LanguageType aLanguageType = LANGUAGE_DONTKNOW ;
Desktop : : pResMgr = ResMgr : : SearchCreateResMgr ( U2S ( aMgrName ) , aLanguageType ) ;
2003-03-25 12:52:54 +00:00
AllSettings as = GetSettings ( ) ;
as . SetUILanguage ( aLanguageType ) ;
SetSettings ( as ) ;
2004-06-25 11:39:32 +00:00
*/
2004-11-15 15:01:54 +00:00
LanguageSelection langselect ;
OUString aUILocaleString = LanguageSelection : : getLanguageString ( ) ;
sal_Int32 nIndex = 0 ;
OUString aLanguage = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
OUString aCountry = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
OUString aVariant = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
: : com : : sun : : star : : lang : : Locale aLocale ( aLanguage , aCountry , aVariant ) ;
2004-06-25 12:54:05 +00:00
Desktop : : pResMgr = ResMgr : : SearchCreateResMgr ( U2S ( aMgrName ) , aLocale ) ;
AllSettings as = GetSettings ( ) ;
as . SetUILocale ( aLocale ) ;
SetSettings ( as ) ;
2002-04-10 04:49:49 +00:00
}
2001-07-16 11:55:47 +00:00
}
2002-04-10 04:49:49 +00:00
2001-07-16 11:55:47 +00:00
return Desktop : : pResMgr ;
}
2001-10-09 11:12:08 +00:00
// ----------------------------------------------------------------------------
2003-03-25 12:52:54 +00:00
// Get a message string securely. There is a fallback string if the resource
2001-10-09 11:12:08 +00:00
// is not available.
OUString Desktop : : GetMsgString ( USHORT nId , const OUString & aFaultBackMsg )
{
ResMgr * pResMgr = GetDesktopResManager ( ) ;
if ( ! pResMgr )
return aFaultBackMsg ;
else
return OUString ( ResId ( nId , pResMgr ) ) ;
}
2001-07-16 11:55:47 +00:00
2002-10-21 08:05:48 +00:00
OUString MakeStartupErrorMessage ( OUString const & aErrorMessage )
{
2003-06-27 08:42:13 +00:00
OUStringBuffer aDiagnosticMessage ( 100 ) ;
2002-10-21 08:05:48 +00:00
ResMgr * pResMgr = Desktop : : GetDesktopResManager ( ) ;
if ( pResMgr )
aDiagnosticMessage . append ( OUString ( ResId ( STR_BOOTSTRAP_ERR_CANNOT_START , pResMgr ) ) ) ;
else
aDiagnosticMessage . appendAscii ( " The program cannot be started. " ) ;
aDiagnosticMessage . appendAscii ( " \n " ) ;
aDiagnosticMessage . append ( aErrorMessage ) ;
return aDiagnosticMessage . makeStringAndClear ( ) ;
}
2003-03-25 12:52:54 +00:00
OUString MakeStartupConfigAccessErrorMessage ( OUString const & aInternalErrMsg )
{
OUStringBuffer aDiagnosticMessage ( 200 ) ;
ResMgr * pResMgr = Desktop : : GetDesktopResManager ( ) ;
if ( pResMgr )
aDiagnosticMessage . append ( OUString ( ResId ( STR_BOOTSTRAP_ERR_CFG_DATAACCESS , pResMgr ) ) ) ;
else
aDiagnosticMessage . appendAscii ( " The program cannot be started. " ) ;
if ( aInternalErrMsg . getLength ( ) > 0 )
{
aDiagnosticMessage . appendAscii ( " \n \n " ) ;
if ( pResMgr )
aDiagnosticMessage . append ( OUString ( ResId ( STR_INTERNAL_ERRMSG , pResMgr ) ) ) ;
else
aDiagnosticMessage . appendAscii ( " The following internal error has occured: \n \n " ) ;
aDiagnosticMessage . append ( aInternalErrMsg ) ;
}
return aDiagnosticMessage . makeStringAndClear ( ) ;
}
2002-10-21 08:05:48 +00:00
void FatalErrorExit ( OUString const & aMessage )
{
2004-01-06 17:37:50 +00:00
OUString aProductKey = : : utl : : Bootstrap : : getProductKey ( ) ;
2002-10-21 08:05:48 +00:00
2004-01-06 17:37:50 +00:00
if ( ! aProductKey . getLength ( ) )
{
: : vos : : OStartupInfo aInfo ;
aInfo . getExecutableFile ( aProductKey ) ;
2002-10-21 08:05:48 +00:00
2004-01-06 17:37:50 +00:00
sal_uInt32 lastIndex = aProductKey . lastIndexOf ( ' / ' ) ;
if ( lastIndex > 0 )
aProductKey = aProductKey . copy ( lastIndex + 1 ) ;
2002-10-21 08:05:48 +00:00
}
2004-01-06 17:37:50 +00:00
ErrorBox aBootstrapFailedBox ( NULL , WB_OK , aMessage ) ;
aBootstrapFailedBox . SetText ( aProductKey ) ;
aBootstrapFailedBox . Execute ( ) ;
2004-11-26 13:49:05 +00:00
_exit ( ExitHelper : : E_FATAL_ERROR ) ;
2002-10-21 08:05:48 +00:00
}
2003-03-25 12:52:54 +00:00
void FatalError ( OUString const & aMessage )
{
2004-01-06 17:37:50 +00:00
OUString aProductKey = : : utl : : Bootstrap : : getProductKey ( ) ;
2003-03-25 12:52:54 +00:00
2004-01-06 17:37:50 +00:00
if ( ! aProductKey . getLength ( ) )
{
: : vos : : OStartupInfo aInfo ;
aInfo . getExecutableFile ( aProductKey ) ;
2003-03-25 12:52:54 +00:00
2004-01-06 17:37:50 +00:00
sal_uInt32 lastIndex = aProductKey . lastIndexOf ( ' / ' ) ;
if ( lastIndex > 0 )
aProductKey = aProductKey . copy ( lastIndex + 1 ) ;
2003-03-25 12:52:54 +00:00
}
2004-01-06 17:37:50 +00:00
ErrorBox aBootstrapFailedBox ( NULL , WB_OK , aMessage ) ;
aBootstrapFailedBox . SetText ( aProductKey ) ;
aBootstrapFailedBox . Execute ( ) ;
2003-03-25 12:52:54 +00:00
}
2004-08-20 12:04:13 +00:00
static bool ShouldSuppressUI ( CommandLineArgs * pCmdLine )
{
return pCmdLine - > IsInvisible ( ) | |
pCmdLine - > IsHeadless ( ) | |
pCmdLine - > IsQuickstart ( ) ;
}
2002-11-01 13:49:58 +00:00
CommandLineArgs * Desktop : : GetCommandLineArgs ( )
2001-07-16 11:55:47 +00:00
{
2003-03-25 12:52:54 +00:00
static CommandLineArgs * pArgs = 0 ;
2001-07-16 11:55:47 +00:00
if ( ! pArgs )
{
: : osl : : MutexGuard aGuard ( : : osl : : Mutex : : getGlobalMutex ( ) ) ;
if ( ! pArgs )
2004-07-30 14:28:55 +00:00
{
: : vos : : OExtCommandLine aArgs ;
pArgs = new CommandLineArgs ( aArgs ) ;
}
2001-07-16 11:55:47 +00:00
}
return pArgs ;
}
2000-09-18 15:18:56 +00:00
2002-10-21 08:05:48 +00:00
sal_Bool InitConfiguration ( )
2001-02-08 14:24:59 +00:00
{
2002-10-21 08:05:48 +00:00
RTL_LOGFILE_CONTEXT ( aLog , " desktop (jb99855) ::InitConfiguration " ) ;
2001-07-10 04:29:45 +00:00
2002-10-21 08:05:48 +00:00
Reference < XMultiServiceFactory > xProvider ( CreateApplicationConfigurationProvider ( ) ) ;
return xProvider . is ( ) ;
2001-02-08 14:24:59 +00:00
}
2004-06-25 16:30:04 +00:00
namespace
{
struct BrandName
: public rtl : : Static < String , BrandName > { } ;
struct Version
: public rtl : : Static < String , Version > { } ;
struct Extension
: public rtl : : Static < String , Extension > { } ;
struct XMLFileFormatVersion
: public rtl : : Static < String , XMLFileFormatVersion > { } ;
2004-08-02 13:33:55 +00:00
struct WriterCompatibilityVersionOOo11
: public rtl : : Static < String , WriterCompatibilityVersionOOo11 > { } ;
2004-06-25 16:30:04 +00:00
}
2001-11-09 15:17:35 +00:00
2000-12-08 07:45:22 +00:00
void ReplaceStringHookProc ( UniString & rStr )
{
2001-01-23 10:56:12 +00:00
static int nAll = 0 , nPro = 0 ;
2004-06-25 16:30:04 +00:00
String & rBrandName = BrandName : : get ( ) ;
String & rVersion = Version : : get ( ) ;
String & rExtension = Extension : : get ( ) ;
String & rXMLFileFormatVersion = XMLFileFormatVersion : : get ( ) ;
2004-08-02 13:33:55 +00:00
String & rWriterCompatibilityVersionOOo11 = WriterCompatibilityVersionOOo11 : : get ( ) ;
2004-06-25 16:30:04 +00:00
if ( ! rBrandName . Len ( ) )
2000-12-08 07:45:22 +00:00
{
Any aRet = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : PRODUCTNAME ) ;
rtl : : OUString aTmp ;
aRet > > = aTmp ;
2004-06-25 16:30:04 +00:00
rBrandName = aTmp ;
2000-12-13 16:26:40 +00:00
2003-03-25 12:52:54 +00:00
aRet = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : PRODUCTXMLFILEFORMATVERSION ) ;
aRet > > = aTmp ;
2004-06-25 16:30:04 +00:00
rXMLFileFormatVersion = aTmp ;
2003-03-25 12:52:54 +00:00
2000-12-13 16:26:40 +00:00
aRet = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : PRODUCTVERSION ) ;
aRet > > = aTmp ;
2004-06-25 16:30:04 +00:00
rVersion = aTmp ;
2001-01-23 10:56:12 +00:00
2004-06-25 16:30:04 +00:00
if ( ! rExtension . Len ( ) )
2001-11-09 15:17:35 +00:00
{
aRet = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : PRODUCTEXTENSION ) ;
aRet > > = aTmp ;
2004-06-25 16:30:04 +00:00
rExtension = aTmp ;
2001-11-09 15:17:35 +00:00
}
2004-08-02 13:33:55 +00:00
if ( ! rWriterCompatibilityVersionOOo11 . Len ( ) )
{
aRet = : : utl : : ConfigManager : : GetDirectConfigProperty (
: : utl : : ConfigManager : : WRITERCOMPATIBILITYVERSIONOOO11 ) ;
aRet > > = aTmp ;
rWriterCompatibilityVersionOOo11 = aTmp ;
}
2000-12-08 07:45:22 +00:00
}
2001-01-23 10:56:12 +00:00
nAll + + ;
if ( rStr . SearchAscii ( " %PRODUCT " ) ! = STRING_NOTFOUND )
{
nPro + + ;
2004-06-25 16:30:04 +00:00
rStr . SearchAndReplaceAllAscii ( " %PRODUCTNAME " , rBrandName ) ;
rStr . SearchAndReplaceAllAscii ( " %PRODUCTVERSION " , rVersion ) ;
rStr . SearchAndReplaceAllAscii ( " %PRODUCTEXTENSION " , rExtension ) ;
rStr . SearchAndReplaceAllAscii ( " %PRODUCTXMLFILEFORMATVERSION " , rXMLFileFormatVersion ) ;
2001-01-23 10:56:12 +00:00
}
2004-08-02 13:33:55 +00:00
if ( rStr . SearchAscii ( " %WRITERCOMPATIBILITYVERSIONOOO11 " ) ! = STRING_NOTFOUND )
rStr . SearchAndReplaceAllAscii ( " %WRITERCOMPATIBILITYVERSIONOOO11 " ,
rWriterCompatibilityVersionOOo11 ) ;
2000-12-08 07:45:22 +00:00
}
2003-03-25 12:52:54 +00:00
Desktop : : Desktop ( )
: m_pIntro ( 0 )
, m_aBootstrapError ( BE_OK )
, m_pLockfile ( NULL )
2004-05-21 13:25:28 +00:00
, m_bServicesRegistered ( false )
2000-09-18 15:18:56 +00:00
{
2001-08-07 10:25:00 +00:00
RTL_LOGFILE_TRACE ( " desktop (cd100003) ::Desktop::Desktop " ) ;
2001-07-16 11:55:47 +00:00
}
2002-11-01 13:49:58 +00:00
Desktop : : ~ Desktop ( )
{
}
2001-07-16 11:55:47 +00:00
void Desktop : : Init ( )
{
2001-08-07 10:25:00 +00:00
RTL_LOGFILE_CONTEXT ( aLog , " desktop (cd100003) ::Desktop::Init " ) ;
2001-07-24 09:24:30 +00:00
2003-03-25 12:52:54 +00:00
// create service factory...
2002-11-01 13:49:58 +00:00
Reference < XMultiServiceFactory > rSMgr = CreateApplicationServiceManager ( ) ;
2004-11-09 14:15:02 +00:00
if ( rSMgr . is ( ) )
{
: : comphelper : : setProcessServiceFactory ( rSMgr ) ;
}
else
2001-10-09 11:12:08 +00:00
{
SetBootstrapError ( BE_UNO_SERVICEMANAGER ) ;
}
2001-08-07 10:25:00 +00:00
2004-11-09 14:15:02 +00:00
if ( GetBootstrapError ( ) = = BE_OK )
{
// prepare language
if ( ! LanguageSelection : : prepareLanguage ( ) )
SetBootstrapError ( BE_LANGUAGE_MISSING ) ;
}
2001-07-16 11:55:47 +00:00
2004-11-09 14:15:02 +00:00
if ( GetBootstrapError ( ) = = BE_OK )
{
CommandLineArgs * pCmdLineArgs = GetCommandLineArgs ( ) ;
2003-03-25 12:52:54 +00:00
# ifdef UNX
2004-11-26 13:49:05 +00:00
// check whether we need to print cmdline help
if ( pCmdLineArgs - > IsHelp ( ) ) {
displayCmdlineHelp ( ) ;
_exit ( ExitHelper : : E_NO_ERROR ) ;
}
2003-03-25 12:52:54 +00:00
# endif
2004-01-20 15:33:21 +00:00
// start ipc thread only for non-remote offices
2004-01-23 11:20:47 +00:00
RTL_LOGFILE_CONTEXT ( aLog2 , " desktop (cd100003) ::OfficeIPCThread::EnableOfficeIPCThread " ) ;
2004-01-20 15:33:21 +00:00
OfficeIPCThread : : Status aStatus = OfficeIPCThread : : EnableOfficeIPCThread ( ) ;
if ( aStatus = = OfficeIPCThread : : IPC_STATUS_BOOTSTRAP_ERROR )
{
SetBootstrapError ( BE_PATHINFO_MISSING ) ;
}
else if ( aStatus = = OfficeIPCThread : : IPC_STATUS_2ND_OFFICE )
{
// 2nd office startup should terminate after sending cmdlineargs through pipe
2004-11-26 13:49:05 +00:00
_exit ( ExitHelper : : E_SECOND_OFFICE ) ;
2004-01-20 15:33:21 +00:00
}
else if ( pCmdLineArgs - > IsHelp ( ) )
{
// disable IPC thread in an instance that is just showing a help message
OfficeIPCThread : : DisableOfficeIPCThread ( ) ;
}
pSignalHandler = new SalMainPipeExchangeSignalHandler ;
2004-11-09 14:15:02 +00:00
}
2001-07-16 11:55:47 +00:00
}
void Desktop : : DeInit ( )
{
2003-07-11 09:41:21 +00:00
try {
// close splashscreen if it's still open
CloseSplashScreen ( ) ;
2003-04-24 12:35:03 +00:00
2003-07-11 09:41:21 +00:00
Reference < XMultiServiceFactory > xXMultiServiceFactory ( : : comphelper : : getProcessServiceFactory ( ) ) ;
DestroyApplicationServiceManager ( xXMultiServiceFactory ) ;
// nobody should get a destroyd service factory...
: : comphelper : : setProcessServiceFactory ( NULL ) ;
2003-03-25 12:52:54 +00:00
2003-07-11 09:41:21 +00:00
// clear lockfile
if ( m_pLockfile ! = NULL )
m_pLockfile - > clean ( ) ;
2001-07-16 11:55:47 +00:00
2004-01-06 17:37:50 +00:00
OfficeIPCThread : : DisableOfficeIPCThread ( ) ;
if ( pSignalHandler )
DELETEZ ( pSignalHandler ) ;
2003-11-07 13:51:04 +00:00
} catch ( RuntimeException & ) {
2003-07-11 09:41:21 +00:00
// someone threw an exception during shutdown
// this will leave some garbage behind..
return ;
2001-07-16 11:55:47 +00:00
}
}
BOOL Desktop : : QueryExit ( )
{
2001-12-13 08:04:55 +00:00
const sal_Char SUSPEND_QUICKSTARTVETO [ ] = " SuspendQuickstartVeto " ;
2001-11-27 17:15:20 +00:00
Reference < : : com : : sun : : star : : frame : : XDesktop >
xDesktop ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) ,
UNO_QUERY ) ;
2001-12-13 08:04:55 +00:00
Reference < : : com : : sun : : star : : beans : : XPropertySet > xPropertySet ( xDesktop , UNO_QUERY ) ;
if ( xPropertySet . is ( ) )
{
Any a ;
a < < = ( sal_Bool ) sal_True ;
xPropertySet - > setPropertyValue ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( SUSPEND_QUICKSTARTVETO ) ) , a ) ;
}
BOOL bExit = ( ! xDesktop . is ( ) | | xDesktop - > terminate ( ) ) ;
if ( ! bExit & & xPropertySet . is ( ) )
{
Any a ;
a < < = ( sal_Bool ) sal_False ;
xPropertySet - > setPropertyValue ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( SUSPEND_QUICKSTARTVETO ) ) , a ) ;
2003-03-25 12:52:54 +00:00
} else {
2003-04-04 16:22:32 +00:00
if ( m_pLockfile ! = NULL ) m_pLockfile - > clean ( ) ;
2001-12-13 08:04:55 +00:00
}
return bExit ;
2001-07-16 11:55:47 +00:00
}
2001-08-07 10:25:00 +00:00
void Desktop : : StartSetup ( const OUString & aParameters )
{
OUString aProgName ;
OUString aSysPathFileName ;
OUString aDir ;
: : vos : : OStartupInfo aInfo ;
aInfo . getExecutableFile ( aProgName ) ;
2003-06-27 08:42:13 +00:00
sal_uInt32 lastIndex = aProgName . lastIndexOf ( ' / ' ) ;
2001-08-07 10:25:00 +00:00
if ( lastIndex > 0 )
{
2003-06-27 08:42:13 +00:00
aProgName = aProgName . copy ( 0 , lastIndex + 1 ) ;
2001-08-07 10:25:00 +00:00
aDir = aProgName ;
2003-06-27 08:42:13 +00:00
aProgName + = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " setup " ) ) ;
2001-08-07 10:25:00 +00:00
# ifdef WNT
2003-06-27 08:42:13 +00:00
aProgName + = OUString ( RTL_CONSTASCII_USTRINGPARAM ( " .exe " ) ) ;
2001-08-07 10:25:00 +00:00
# endif
}
OUString aArgListArray [ 1 ] ;
: : vos : : OSecurity aSecurity ;
2003-06-27 08:42:13 +00:00
: : vos : : OEnvironment aEnv ;
2001-08-07 10:25:00 +00:00
: : vos : : OArgumentList aArgList ;
aArgListArray [ 0 ] = aParameters ;
OArgumentList aArgumentList ( aArgListArray , 1 ) ;
2003-06-27 08:42:13 +00:00
: : vos : : OProcess aProcess ( aProgName , aDir ) ;
2001-08-07 10:25:00 +00:00
: : vos : : OProcess : : TProcessError aProcessError =
aProcess . execute ( OProcess : : TOption_Detached ,
aSecurity ,
aArgumentList ,
aEnv ) ;
if ( aProcessError ! = OProcess : : E_None )
{
2001-10-09 11:12:08 +00:00
OUString aMessage ( GetMsgString (
STR_SETUP_ERR_CANNOT_START ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Couldn't start setup application! Please start it manually. " ) ) ) ) ;
2001-08-07 10:25:00 +00:00
ErrorBox aBootstrapFailedBox ( NULL , WB_OK , aMessage ) ;
aBootstrapFailedBox . Execute ( ) ;
}
}
2001-08-09 04:43:13 +00:00
void Desktop : : HandleBootstrapPathErrors ( : : utl : : Bootstrap : : Status aBootstrapStatus , const OUString & aDiagnosticMessage )
2001-08-07 10:25:00 +00:00
{
2001-08-09 04:43:13 +00:00
if ( aBootstrapStatus ! = : : utl : : Bootstrap : : DATA_OK )
2001-08-07 10:25:00 +00:00
{
2001-08-09 15:03:22 +00:00
sal_Bool bWorkstationInstallation = sal_False ;
2003-06-27 08:42:13 +00:00
: : rtl : : OUString aBaseInstallURL ;
: : rtl : : OUString aUserInstallURL ;
: : rtl : : OUString aProductKey ;
: : rtl : : OUString aTemp ;
2001-08-09 15:03:22 +00:00
: : vos : : OStartupInfo aInfo ;
aInfo . getExecutableFile ( aProductKey ) ;
2003-06-27 08:42:13 +00:00
sal_uInt32 lastIndex = aProductKey . lastIndexOf ( ' / ' ) ;
2001-08-09 15:03:22 +00:00
if ( lastIndex > 0 )
aProductKey = aProductKey . copy ( lastIndex + 1 ) ;
2001-10-09 11:12:08 +00:00
aTemp = : : utl : : Bootstrap : : getProductKey ( aProductKey ) ;
if ( aTemp . getLength ( ) > 0 )
aProductKey = aTemp ;
2001-08-09 04:43:13 +00:00
: : utl : : Bootstrap : : PathStatus aBaseInstallStatus = : : utl : : Bootstrap : : locateBaseInstallation ( aBaseInstallURL ) ;
: : utl : : Bootstrap : : PathStatus aUserInstallStatus = : : utl : : Bootstrap : : locateUserInstallation ( aUserInstallURL ) ;
if ( ( aBaseInstallStatus = = : : utl : : Bootstrap : : PATH_EXISTS & &
2003-06-27 08:42:13 +00:00
aUserInstallStatus = = : : utl : : Bootstrap : : PATH_EXISTS ) )
2001-08-07 10:25:00 +00:00
{
2001-08-09 04:43:13 +00:00
if ( aBaseInstallURL ! = aUserInstallURL )
bWorkstationInstallation = sal_True ;
}
2001-08-07 10:25:00 +00:00
2004-01-06 17:37:50 +00:00
OUString aMessage ;
OUStringBuffer aBuffer ( 100 ) ;
aBuffer . append ( aDiagnosticMessage ) ;
2001-12-11 13:39:35 +00:00
2004-01-06 17:37:50 +00:00
aBuffer . appendAscii ( " \n " ) ;
2001-12-11 13:39:35 +00:00
2004-01-06 17:37:50 +00:00
if ( ( aBootstrapStatus = = : : utl : : Bootstrap : : MISSING_USER_INSTALL ) | | bWorkstationInstallation )
{
// Check installation mode to suppress error message if we are currently running with a network installation.
OUString aInstallMode ( RTL_CONSTASCII_USTRINGPARAM ( INSTALLMODE_STANDALONE ) ) ;
2001-12-11 13:39:35 +00:00
2004-01-06 17:37:50 +00:00
aInstallMode = utl : : Bootstrap : : getInstallMode ( aInstallMode ) ;
if ( aInstallMode . equalsIgnoreAsciiCaseAscii ( INSTALLMODE_NETWORK ) )
{
// network installation => start setup without error message
OUString aParameters ;
StartSetup ( aParameters ) ;
2001-08-09 04:43:13 +00:00
}
2004-01-06 17:37:50 +00:00
else
2001-08-09 04:43:13 +00:00
{
2004-01-06 17:37:50 +00:00
OUString aAskSetupStr ( GetMsgString (
STR_ASK_START_SETUP ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Start setup application to check installation? " ) ) ) ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
aBuffer . append ( aAskSetupStr ) ;
2001-08-09 04:43:13 +00:00
aMessage = aBuffer . makeStringAndClear ( ) ;
2001-08-07 10:25:00 +00:00
2001-08-09 04:43:13 +00:00
ErrorBox aBootstrapFailedBox ( NULL , WB_YES_NO , aMessage ) ;
2001-08-09 15:03:22 +00:00
aBootstrapFailedBox . SetText ( aProductKey ) ;
2001-08-09 04:43:13 +00:00
int nResult = aBootstrapFailedBox . Execute ( ) ;
2001-08-07 10:25:00 +00:00
2001-08-09 04:43:13 +00:00
if ( nResult = = RET_YES )
{
2004-01-06 17:37:50 +00:00
OUString aParameters ;
2001-08-09 04:43:13 +00:00
StartSetup ( aParameters ) ;
2001-08-07 10:25:00 +00:00
}
}
}
2004-01-06 17:37:50 +00:00
else if ( ( aBootstrapStatus = = utl : : Bootstrap : : INVALID_USER_INSTALL ) | |
( aBootstrapStatus = = utl : : Bootstrap : : INVALID_BASE_INSTALL ) )
{
OUString aAskSetupRepairStr ( GetMsgString (
STR_ASK_START_SETUP_REPAIR ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Start setup application to repair installation? " ) ) ) ) ;
2001-08-09 04:43:13 +00:00
2004-01-06 17:37:50 +00:00
aBuffer . append ( aAskSetupRepairStr ) ;
aMessage = aBuffer . makeStringAndClear ( ) ;
ErrorBox aBootstrapFailedBox ( NULL , WB_YES_NO , aMessage ) ;
aBootstrapFailedBox . SetText ( aProductKey ) ;
int nResult = aBootstrapFailedBox . Execute ( ) ;
if ( nResult = = RET_YES )
{
OUString aParameters ( RTL_CONSTASCII_USTRINGPARAM ( " -repair " ) ) ;
StartSetup ( aParameters ) ;
}
}
2001-08-09 04:43:13 +00:00
}
}
2001-10-09 11:12:08 +00:00
// Create a error message depending on bootstrap failure code and an optional file url
2003-06-27 08:42:13 +00:00
: : rtl : : OUString Desktop : : CreateErrorMsgString (
2001-10-09 11:12:08 +00:00
utl : : Bootstrap : : FailureCode nFailureCode ,
const : : rtl : : OUString & aFileURL )
{
OUString aMsg ;
OUString aFilePath ;
sal_Bool bFileInfo = sal_True ;
switch ( nFailureCode )
{
/// the shared installation directory could not be located
case : : utl : : Bootstrap : : MISSING_INSTALL_DIRECTORY :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_PATH_INVALID ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The installation path is not available. " ) ) ) ;
bFileInfo = sal_False ;
}
break ;
/// the bootstrap INI file could not be found or read
case : : utl : : Bootstrap : : MISSING_BOOTSTRAP_FILE :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_FILE_MISSING ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The configuration file \" $1 \" is missing. " ) ) ) ;
}
break ;
/// the bootstrap INI is missing a required entry
/// the bootstrap INI contains invalid data
case : : utl : : Bootstrap : : MISSING_BOOTSTRAP_FILE_ENTRY :
case : : utl : : Bootstrap : : INVALID_BOOTSTRAP_FILE_ENTRY :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_FILE_CORRUPT ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The configuration file \" $1 \" is corrupt. " ) ) ) ;
}
break ;
/// the version locator INI file could not be found or read
case : : utl : : Bootstrap : : MISSING_VERSION_FILE :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_FILE_MISSING ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The configuration file \" $1 \" is missing. " ) ) ) ;
}
break ;
/// the version locator INI has no entry for this version
case : : utl : : Bootstrap : : MISSING_VERSION_FILE_ENTRY :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_NO_SUPPORT ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The main configuration file \" $1 \" does not support the current version. " ) ) ) ;
}
break ;
/// the user installation directory does not exist
case : : utl : : Bootstrap : : MISSING_USER_DIRECTORY :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_DIR_MISSING ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The configuration directory \" $1 \" is missing. " ) ) ) ;
}
break ;
/// some bootstrap data was invalid in unexpected ways
case : : utl : : Bootstrap : : INVALID_BOOTSTRAP_DATA :
{
aMsg = GetMsgString ( STR_BOOTSTRAP_ERR_INTERNAL ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " An internal failure occurred. " ) ) ) ;
bFileInfo = sal_False ;
}
break ;
}
if ( bFileInfo )
{
String aMsgString ( aMsg ) ;
osl : : File : : getSystemPathFromFileURL ( aFileURL , aFilePath ) ;
aMsgString . SearchAndReplaceAscii ( " $1 " , aFilePath ) ;
aMsg = aMsgString ;
}
2002-10-21 08:05:48 +00:00
return MakeStartupErrorMessage ( aMsg ) ;
2001-10-09 11:12:08 +00:00
}
2001-08-09 04:43:13 +00:00
void Desktop : : HandleBootstrapErrors ( BootstrapError aBootstrapError )
{
if ( aBootstrapError = = BE_PATHINFO_MISSING )
{
2001-10-09 11:12:08 +00:00
OUString aErrorMsg ;
OUString aBuffer ;
2003-06-27 08:42:13 +00:00
utl : : Bootstrap : : Status aBootstrapStatus ;
utl : : Bootstrap : : FailureCode nFailureCode ;
2001-08-09 04:43:13 +00:00
2001-10-09 11:12:08 +00:00
aBootstrapStatus = : : utl : : Bootstrap : : checkBootstrapStatus ( aBuffer , nFailureCode ) ;
2001-08-09 04:43:13 +00:00
if ( aBootstrapStatus ! = : : utl : : Bootstrap : : DATA_OK )
2001-10-09 11:12:08 +00:00
{
switch ( nFailureCode )
{
case : : utl : : Bootstrap : : MISSING_INSTALL_DIRECTORY :
case : : utl : : Bootstrap : : INVALID_BOOTSTRAP_DATA :
{
aErrorMsg = CreateErrorMsgString ( nFailureCode , OUString ( ) ) ;
}
break ;
/// the bootstrap INI file could not be found or read
/// the bootstrap INI is missing a required entry
/// the bootstrap INI contains invalid data
case : : utl : : Bootstrap : : MISSING_BOOTSTRAP_FILE_ENTRY :
case : : utl : : Bootstrap : : INVALID_BOOTSTRAP_FILE_ENTRY :
case : : utl : : Bootstrap : : MISSING_BOOTSTRAP_FILE :
{
OUString aBootstrapFileURL ;
utl : : Bootstrap : : locateBootstrapFile ( aBootstrapFileURL ) ;
aErrorMsg = CreateErrorMsgString ( nFailureCode , aBootstrapFileURL ) ;
}
break ;
/// the version locator INI file could not be found or read
/// the version locator INI has no entry for this version
/// the version locator INI entry is not a valid directory URL
case : : utl : : Bootstrap : : INVALID_VERSION_FILE_ENTRY :
case : : utl : : Bootstrap : : MISSING_VERSION_FILE_ENTRY :
case : : utl : : Bootstrap : : MISSING_VERSION_FILE :
{
OUString aVersionFileURL ;
utl : : Bootstrap : : locateVersionFile ( aVersionFileURL ) ;
aErrorMsg = CreateErrorMsgString ( nFailureCode , aVersionFileURL ) ;
}
break ;
/// the user installation directory does not exist
case : : utl : : Bootstrap : : MISSING_USER_DIRECTORY :
{
OUString aUserInstallationURL ;
utl : : Bootstrap : : locateUserInstallation ( aUserInstallationURL ) ;
aErrorMsg = CreateErrorMsgString ( nFailureCode , aUserInstallationURL ) ;
}
break ;
}
HandleBootstrapPathErrors ( aBootstrapStatus , aErrorMsg ) ;
}
2001-08-07 10:25:00 +00:00
}
2001-10-09 11:12:08 +00:00
else if ( aBootstrapError = = BE_UNO_SERVICEMANAGER | | aBootstrapError = = BE_UNO_SERVICE_CONFIG_MISSING )
2001-08-07 10:25:00 +00:00
{
// Uno service manager is not available. VCL needs a uno service manager to display a message box!!!
// Currently we are not able to display a message box with a service manager due to this limitations inside VCL.
2005-01-27 11:26:58 +00:00
// When UNO is not properly initialized, all kinds of things can fail
// and cause the process to crash (e.g., a call to GetMsgString may
// crash when somewhere deep within that call Any::operator <= is used
// with a PropertyValue, and no binary UNO type description for
// PropertyValue is available). To give the user a hint even if
// generating and displaying a message box below crashes, print a
// hard-coded message on stderr first:
fputs (
aBootstrapError = = BE_UNO_SERVICEMANAGER
? ( " The application cannot be started. " " \n "
" The component manager is not available. " " \n " )
// STR_BOOTSTRAP_ERR_CANNOT_START, STR_BOOTSTRAP_ERR_NO_SERVICE
: ( " The application cannot be started. " " \n "
" The configuration service is not available. " " \n " ) ,
// STR_BOOTSTRAP_ERR_CANNOT_START,
// STR_BOOTSTRAP_ERR_NO_CFG_SERVICE
stderr ) ;
2004-01-06 17:37:50 +00:00
// First sentence. We cannot bootstrap office further!
OUString aMessage ;
OUStringBuffer aDiagnosticMessage ( 100 ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
OUString aErrorMsg ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
if ( aBootstrapError = = BE_UNO_SERVICEMANAGER )
aErrorMsg = GetMsgString ( STR_BOOTSTRAP_ERR_NO_SERVICE ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The service manager is not available. " ) ) ) ;
2001-08-07 10:25:00 +00:00
else
2004-01-06 17:37:50 +00:00
aErrorMsg = GetMsgString ( STR_BOOTSTRAP_ERR_NO_CFG_SERVICE ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " The configuration service is not available. " ) ) ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
aDiagnosticMessage . append ( aErrorMsg ) ;
aDiagnosticMessage . appendAscii ( " \n " ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
// Due to the fact the we haven't a backup applicat.rdb file anymore it is not possible to
// repair the installation with the setup executable besides the office executable. Now
// we have to ask the user to start the setup on CD/installation directory manually!!
OUString aStartSetupManually ( GetMsgString (
STR_ASK_START_SETUP_MANUALLY ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " Start setup application to repair the installation from CD, or the folder containing the installation packages. " ) ) ) ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
aDiagnosticMessage . append ( aStartSetupManually ) ;
aMessage = MakeStartupErrorMessage ( aDiagnosticMessage . makeStringAndClear ( ) ) ;
2001-10-09 11:12:08 +00:00
2004-01-06 17:37:50 +00:00
FatalError ( aMessage ) ;
2001-08-07 10:25:00 +00:00
}
2003-11-07 13:51:04 +00:00
else if ( aBootstrapError = = BE_USERINSTALL_FAILED )
{
2004-11-09 14:15:02 +00:00
OUString aMessage ;
OUStringBuffer aDiagnosticMessage ( 100 ) ;
OUString aErrorMsg ;
aErrorMsg = GetMsgString ( STR_BOOTSTRAP_ERR_INTERNAL ,
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " User installation could not be completed " ) ) ) ;
aDiagnosticMessage . append ( aErrorMsg ) ;
aMessage = MakeStartupErrorMessage ( aDiagnosticMessage . makeStringAndClear ( ) ) ;
FatalError ( aMessage ) ;
2003-11-07 13:51:04 +00:00
}
2004-11-09 14:15:02 +00:00
else if ( aBootstrapError = = BE_LANGUAGE_MISSING )
{
OUString aMessage ;
OUStringBuffer aDiagnosticMessage ( 100 ) ;
OUString aErrorMsg ;
aErrorMsg = GetMsgString (
//@@@ FIXME: should use an own resource string => #i36213#
STR_BOOTSTRAP_ERR_INTERNAL ,
OUString ( RTL_CONSTASCII_USTRINGPARAM (
" Language could not be determined. " ) ) ) ;
aDiagnosticMessage . append ( aErrorMsg ) ;
aMessage = MakeStartupErrorMessage (
aDiagnosticMessage . makeStringAndClear ( ) ) ;
FatalError ( aMessage ) ;
}
return ;
2001-08-07 10:25:00 +00:00
}
2004-11-26 13:49:05 +00:00
//-----------------------------------------------
/** @short check if recovery must be started or not.
@ param bCrashed [ boolean . . . out ! ]
the office crashed last times .
But may be there are not recovery data .
@ param bDataExists [ boolean . . . out ! ]
there exists some recovery data .
*/
void impl_checkRecoveryState ( sal_Bool & bCrashed ,
sal_Bool & bDataExists )
{
static : : rtl : : OUString SERVICENAME_RECOVERYCORE = : : rtl : : OUString : : createFromAscii ( " com.sun.star.frame.AutoRecovery " ) ;
static : : rtl : : OUString PROP_CRASHED = : : rtl : : OUString : : createFromAscii ( " Crashed " ) ;
static : : rtl : : OUString PROP_EXISTSRECOVERY = : : rtl : : OUString : : createFromAscii ( " ExistsRecoveryData " ) ;
bCrashed = sal_False ;
bDataExists = sal_False ;
css : : uno : : Reference < css : : lang : : XMultiServiceFactory > xSMGR = : : comphelper : : getProcessServiceFactory ( ) ;
try
{
css : : uno : : Reference < css : : beans : : XPropertySet > xRecovery (
xSMGR - > createInstance ( SERVICENAME_RECOVERYCORE ) ,
css : : uno : : UNO_QUERY_THROW ) ;
xRecovery - > getPropertyValue ( PROP_CRASHED ) > > = bCrashed ;
xRecovery - > getPropertyValue ( PROP_EXISTSRECOVERY ) > > = bDataExists ;
}
catch ( const css : : uno : : Exception & ) { }
}
//-----------------------------------------------
/* @short start the recovery wizard.
@ param bEmergencySave
differs between EMERGENCY_SAVE and RECOVERY
*/
sal_Bool impl_callRecoveryUI ( sal_Bool bEmergencySave ,
sal_Bool bCrashed ,
sal_Bool bExistsRecoveryData )
{
static : : rtl : : OUString SERVICENAME_RECOVERYUI = : : rtl : : OUString : : createFromAscii ( " com.sun.star.comp.svx.RecoveryUI " ) ;
static : : rtl : : OUString SERVICENAME_URLPARSER = : : rtl : : OUString : : createFromAscii ( " com.sun.star.util.URLTransformer " ) ;
static : : rtl : : OUString COMMAND_EMERGENCYSAVE = : : rtl : : OUString : : createFromAscii ( " vnd.sun.star.autorecovery:/doEmergencySave " ) ;
static : : rtl : : OUString COMMAND_RECOVERY = : : rtl : : OUString : : createFromAscii ( " vnd.sun.star.autorecovery:/doAutoRecovery " ) ;
static : : rtl : : OUString COMMAND_CRASHREPORT = : : rtl : : OUString : : createFromAscii ( " vnd.sun.star.autorecovery:/doCrashReport " ) ;
css : : uno : : Reference < css : : lang : : XMultiServiceFactory > xSMGR = : : comphelper : : getProcessServiceFactory ( ) ;
css : : uno : : Reference < css : : frame : : XSynchronousDispatch > xRecoveryUI (
xSMGR - > createInstance ( SERVICENAME_RECOVERYUI ) ,
css : : uno : : UNO_QUERY_THROW ) ;
css : : uno : : Reference < css : : util : : XURLTransformer > xURLParser (
xSMGR - > createInstance ( SERVICENAME_URLPARSER ) ,
css : : uno : : UNO_QUERY_THROW ) ;
css : : util : : URL aURL ;
if ( bEmergencySave )
aURL . Complete = COMMAND_EMERGENCYSAVE ;
else
{
if ( bExistsRecoveryData )
aURL . Complete = COMMAND_RECOVERY ;
else
if ( bCrashed )
aURL . Complete = COMMAND_CRASHREPORT ;
}
xURLParser - > parseStrict ( aURL ) ;
css : : uno : : Any aRet = xRecoveryUI - > dispatchWithReturnValue ( aURL , css : : uno : : Sequence < css : : beans : : PropertyValue > ( ) ) ;
sal_Bool bRet = sal_False ;
aRet > > = bRet ;
return bRet ;
}
2003-06-10 13:37:31 +00:00
/*
* Save all open documents so they will be reopened
* the next time the application ist started
*
* returns sal_True if at least one document could be saved . . .
*
*/
2001-07-17 07:34:12 +00:00
2003-07-22 07:26:21 +00:00
sal_Bool Desktop : : _bTasksSaved = sal_False ;
2003-06-10 13:37:31 +00:00
sal_Bool Desktop : : SaveTasks ( sal_Int32 options )
{
2004-11-26 13:49:05 +00:00
return impl_callRecoveryUI (
sal_True , // sal_True => force emergency save
sal_False , // 2. and 3. param not used if 1. = true!
sal_False ) ;
2003-06-10 13:37:31 +00:00
}
USHORT Desktop : : Exception ( USHORT nError )
{
// protect against recursive calls
static BOOL bInException = FALSE ;
sal_uInt16 nOldMode = Application : : GetSystemWindowMode ( ) ;
Application : : SetSystemWindowMode ( nOldMode & ~ SYSTEMWINDOW_MODE_NOAUTOMODE ) ;
2004-01-06 17:37:50 +00:00
Application : : SetDefDialogParent ( NULL ) ;
2003-06-10 13:37:31 +00:00
if ( bInException )
{
String aDoubleExceptionString ;
Application : : Abort ( aDoubleExceptionString ) ;
2001-07-17 07:34:12 +00:00
}
2003-06-10 13:37:31 +00:00
bInException = TRUE ;
BOOL bRecovery = FALSE ;
CommandLineArgs * pArgs = GetCommandLineArgs ( ) ;
2004-12-02 08:14:48 +00:00
// save all modified documents ... if it's allowed doing so.
sal_Bool bRestart = sal_False ;
if ( ! pArgs - > IsNoRestore ( ) & & ( nError & EXC_MAJORTYPE ) ! = EXC_DISPLAY )
bRestart = SaveTasks ( DESKTOP_SAVETASKS_MOD ) ;
2001-07-17 07:34:12 +00:00
// because there is no method to flush the condiguration data, we must dispose the ConfigManager
2004-11-26 13:49:05 +00:00
Reference < XFlushable > xCFGFlush ( : : utl : : ConfigManager : : GetConfigManager ( ) - > GetConfigurationProvider ( ) , UNO_QUERY ) ;
if ( xCFGFlush . is ( ) )
{
xCFGFlush - > flush ( ) ;
}
else
{
Reference < XComponent > xCFGDispose ( : : utl : : ConfigManager : : GetConfigManager ( ) - > GetConfigurationProvider ( ) , UNO_QUERY ) ;
if ( xCFGDispose . is ( ) )
xCFGDispose - > dispose ( ) ;
}
2001-07-17 07:34:12 +00:00
switch ( nError & EXC_MAJORTYPE )
{
/*
case EXC_USER :
if ( nError = = EXC_OUTOFMEMORY )
{
// not possible without a special NewHandler!
String aMemExceptionString ;
Application : : Abort ( aMemExceptionString ) ;
}
break ;
*/
case EXC_RSCNOTLOADED :
{
String aResExceptionString ;
Application : : Abort ( aResExceptionString ) ;
break ;
}
case EXC_SYSOBJNOTCREATED :
{
String aSysResExceptionString ;
Application : : Abort ( aSysResExceptionString ) ;
break ;
}
default :
{
2003-03-25 12:52:54 +00:00
if ( pArgs - > IsNoRestore ( ) ) {
if ( m_pLockfile ! = NULL ) {
m_pLockfile - > clean ( ) ;
}
2004-11-26 13:49:05 +00:00
_exit ( ExitHelper : : E_LOCKFILE ) ;
2003-03-25 12:52:54 +00:00
}
2001-09-10 13:00:16 +00:00
2004-11-26 13:49:05 +00:00
if ( bRestart )
2001-07-17 07:34:12 +00:00
{
OfficeIPCThread : : DisableOfficeIPCThread ( ) ;
if ( pSignalHandler )
DELETEZ ( pSignalHandler ) ;
2003-03-25 12:52:54 +00:00
if ( m_pLockfile ! = NULL ) {
m_pLockfile - > clean ( ) ;
}
2004-11-26 13:49:05 +00:00
_exit ( ExitHelper : : E_CRASH_WITH_RESTART ) ;
2001-08-27 07:03:26 +00:00
}
else
{
bInException = sal_False ;
2004-11-26 13:49:05 +00:00
_exit ( ExitHelper : : E_CRASH ) ;
2001-07-17 07:34:12 +00:00
}
break ;
}
}
2001-09-27 09:51:05 +00:00
return 0 ;
2001-07-17 07:34:12 +00:00
// ConfigManager is disposed, so no way to continue
2001-07-16 11:55:47 +00:00
}
void Desktop : : AppEvent ( const ApplicationEvent & rAppEvent )
{
HandleAppEvent ( rAppEvent ) ;
2000-09-18 15:18:56 +00:00
}
void Desktop : : Main ( )
{
2001-08-07 10:25:00 +00:00
RTL_LOGFILE_CONTEXT ( aLog , " desktop (cd100003) ::Desktop::Main " ) ;
2004-09-17 12:07:23 +00:00
// Remember current context object
com : : sun : : star : : uno : : ContextLayer layer (
com : : sun : : star : : uno : : getCurrentContext ( ) ) ;
2004-11-09 14:15:02 +00:00
BootstrapError eError = GetBootstrapError ( ) ;
if ( eError = = BE_OK )
2003-11-07 13:51:04 +00:00
{
2004-09-17 12:07:23 +00:00
// Detect desktop environment - need to do this as early as possible
com : : sun : : star : : uno : : setCurrentContext (
new DesktopContext ( com : : sun : : star : : uno : : getCurrentContext ( ) ) ) ;
2003-11-07 13:51:04 +00:00
// Startup screen
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " desktop (lo119109) Desktop::Main { OpenSplashScreen " ) ;
2003-11-07 13:51:04 +00:00
OpenSplashScreen ( ) ;
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " desktop (lo119109) Desktop::Main } OpenSplashScreen " ) ;
2003-11-07 13:51:04 +00:00
2004-08-20 12:04:13 +00:00
// Use a temporary error handler during user install.
ConfigurationErrorHandler aConfigErrHandler ;
if ( ! ShouldSuppressUI ( GetCommandLineArgs ( ) ) )
aConfigErrHandler . activate ( ) ;
2004-07-23 10:20:30 +00:00
UserInstall : : UserInstallError instErr_lang = UserInstall : : configureLanguage ( ) ;
UserInstall : : UserInstallError instErr_fin = UserInstall : : finalize ( ) ;
if ( instErr_lang ! = UserInstall : : E_None | | instErr_fin ! = UserInstall : : E_None )
2003-11-07 13:51:04 +00:00
{
2004-07-23 10:20:30 +00:00
OSL_ENSURE ( sal_False , " userinstall failed " ) ;
HandleBootstrapErrors ( BE_USERINSTALL_FAILED ) ;
return ;
2003-11-07 13:51:04 +00:00
}
// refresh path information
utl : : Bootstrap : : reloadData ( ) ;
2004-07-23 10:20:30 +00:00
SetSplashScreenProgress ( 10 ) ;
2003-11-07 13:51:04 +00:00
}
else
2001-08-07 10:25:00 +00:00
{
2004-11-09 14:15:02 +00:00
HandleBootstrapErrors ( eError ) ;
2002-11-01 13:49:58 +00:00
return ;
2001-08-07 10:25:00 +00:00
}
2001-07-10 04:29:45 +00:00
2001-07-16 11:55:47 +00:00
CommandLineArgs * pCmdLineArgs = GetCommandLineArgs ( ) ;
2004-07-23 10:20:30 +00:00
Reference < XMultiServiceFactory > xSMgr =
: : comphelper : : getProcessServiceFactory ( ) ;
SvtLanguageOptions * pLanguageOptions = NULL ;
SvtPathOptions * pPathOptions = NULL ;
try
{
RegisterServices ( xSMgr ) ;
SetSplashScreenProgress ( 15 ) ;
2003-03-25 12:52:54 +00:00
# ifndef UNX
2004-07-23 10:20:30 +00:00
if ( pCmdLineArgs - > IsHelp ( ) ) {
displayCmdlineHelp ( ) ;
return ;
}
2003-03-25 12:52:54 +00:00
# endif
2004-07-23 10:20:30 +00:00
ResMgr : : SetReadStringHook ( ReplaceStringHookProc ) ;
SetAppName ( DEFINE_CONST_UNICODE ( " soffice " ) ) ;
2002-09-30 15:01:32 +00:00
2004-07-23 10:20:30 +00:00
// check user installation directory for lockfile so we can be sure
// there is no other instance using our data files from a remote host
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " desktop (lo119109) Desktop::Main -> Lockfile " ) ;
m_pLockfile = new Lockfile ;
if ( ! pCmdLineArgs - > IsInvisible ( ) & & ! pCmdLineArgs - > IsNoLockcheck ( ) & & ! m_pLockfile - > check ( Lockfile_execWarning ) ) {
// Lockfile exists, and user clicked 'no'
return ;
}
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " desktop (lo119109) Desktop::Main <- Lockfile " ) ;
2002-08-16 13:14:03 +00:00
2004-11-15 15:01:54 +00:00
com : : sun : : star : : uno : : ContextLayer layer (
com : : sun : : star : : uno : : getCurrentContext ( ) ) ;
com : : sun : : star : : uno : : setCurrentContext (
new DesktopContext ( com : : sun : : star : : uno : : getCurrentContext ( ) ) ) ;
2004-08-20 12:04:13 +00:00
ConfigurationErrorHandler aConfigErrHandler ;
if ( ! ShouldSuppressUI ( pCmdLineArgs ) )
aConfigErrHandler . activate ( ) ;
2004-07-23 10:20:30 +00:00
// check if accessibility is enabled but not working and allow to quit
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { GetEnableATToolSupport " ) ;
2004-07-23 10:20:30 +00:00
if ( Application : : GetSettings ( ) . GetMiscSettings ( ) . GetEnableATToolSupport ( ) )
{
BOOL bQuitApp ;
2003-04-11 17:02:32 +00:00
2004-07-23 10:20:30 +00:00
if ( ! InitAccessBridge ( true , bQuitApp ) )
if ( bQuitApp )
return ;
}
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } GetEnableATToolSupport " ) ;
2003-04-11 17:02:32 +00:00
2004-12-10 17:39:02 +00:00
// terminate if requested...
2004-07-23 10:20:30 +00:00
if ( pCmdLineArgs - > IsTerminateAfterInit ( ) ) return ;
2000-09-18 15:18:56 +00:00
2002-11-01 13:49:58 +00:00
2004-07-23 10:20:30 +00:00
// Read the common configuration items for optimization purpose
if ( ! InitializeConfiguration ( ) ) return ;
2002-11-01 13:49:58 +00:00
2004-07-23 10:20:30 +00:00
SetSplashScreenProgress ( 20 ) ;
2002-11-01 13:49:58 +00:00
2004-07-23 10:20:30 +00:00
// create title string
sal_Bool bCheckOk = sal_False ;
2004-07-26 14:13:19 +00:00
: : com : : sun : : star : : lang : : Locale aLocale ;
2004-07-23 10:20:30 +00:00
String aMgrName = String : : CreateFromAscii ( " iso " ) ;
2004-06-10 12:34:26 +00:00
aMgrName + = String : : CreateFromInt32 ( SUPD ) ; // current build version
2004-07-26 14:13:19 +00:00
ResMgr * pLabelResMgr = ResMgr : : SearchCreateResMgr ( U2S ( aMgrName ) , aLocale ) ;
2004-07-23 10:20:30 +00:00
if ( ! pLabelResMgr )
{
// no "iso" resource -> search for "ooo" resource
aMgrName = String : : CreateFromAscii ( " ooo " ) ;
aMgrName + = String : : CreateFromInt32 ( SUPD ) ; // current build version
2004-07-26 14:13:19 +00:00
pLabelResMgr = ResMgr : : SearchCreateResMgr ( U2S ( aMgrName ) , aLocale ) ;
2004-07-23 10:20:30 +00:00
}
String aTitle = pLabelResMgr ? String ( ResId ( RID_APPTITLE , pLabelResMgr ) ) : String ( ) ;
delete pLabelResMgr ;
// Check for StarOffice/Suite specific extensions runs also with OpenOffice installation sets
OUString aTitleString ( aTitle ) ;
bCheckOk = CheckInstallation ( aTitleString ) ;
if ( ! bCheckOk )
return ;
else
aTitle = aTitleString ;
2003-03-25 12:52:54 +00:00
# ifndef PRODUCT
2004-07-23 10:20:30 +00:00
//include version ID in non product builds
: : rtl : : OUString aDefault ;
aTitle + = DEFINE_CONST_UNICODE ( " [ " ) ;
String aVerId ( utl : : Bootstrap : : getBuildIdData ( aDefault ) ) ;
aTitle + = aVerId ;
aTitle + = ' ] ' ;
# endif
2003-03-25 12:52:54 +00:00
2004-07-23 10:20:30 +00:00
SetDisplayName ( aTitle ) ;
2003-04-04 16:22:32 +00:00
SetSplashScreenProgress ( 30 ) ;
2002-05-13 08:39:57 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { create SvtPathOptions and SvtLanguageOptions " ) ;
2003-03-25 12:52:54 +00:00
pPathOptions = new SvtPathOptions ;
2003-04-04 16:22:32 +00:00
SetSplashScreenProgress ( 40 ) ;
2003-03-25 12:52:54 +00:00
pLanguageOptions = new SvtLanguageOptions ( sal_True ) ;
2003-04-04 16:22:32 +00:00
SetSplashScreenProgress ( 45 ) ;
2002-05-13 08:39:57 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } create SvtPathOptions and SvtLanguageOptions " ) ;
2001-07-16 11:55:47 +00:00
2003-09-29 13:56:09 +00:00
// Check special env variable #111015#
std : : vector < String > aUnrestrictedFolders ;
svt : : getUnrestrictedFolders ( aUnrestrictedFolders ) ;
if ( aUnrestrictedFolders . size ( ) > 0 )
{
// Set different working directory. The first entry is
// the new work path.
String aWorkPath = aUnrestrictedFolders [ 0 ] ;
SvtPathOptions ( ) . SetWorkPath ( aWorkPath ) ;
}
2003-04-29 11:40:40 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { set locale settings " ) ;
2003-11-07 13:51:04 +00:00
/*
2003-04-29 11:40:40 +00:00
String sLanguage = SvtPathOptions ( ) . SubstituteVariable ( String : : CreateFromAscii ( " $(langid) " ) ) ;
LanguageType eUILanguage = ( LanguageType ) sLanguage . ToInt32 ( ) ;
2003-11-07 13:51:04 +00:00
*/
2004-11-26 13:49:05 +00:00
//LanguageSelection langselect;
2004-06-25 11:39:32 +00:00
OUString aUILocaleString = LanguageSelection : : getLanguageString ( ) ;
sal_Int32 nIndex = 0 ;
OUString aLanguage = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
OUString aCountry = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
OUString aVariant = aUILocaleString . getToken ( 0 , ' - ' , nIndex ) ;
: : com : : sun : : star : : lang : : Locale aUILocale ( aLanguage , aCountry , aVariant ) ;
2003-11-07 13:51:04 +00:00
LanguageType eLanguage = SvtSysLocaleOptions ( ) . GetLocaleLanguageType ( ) ;
2005-01-31 08:29:39 +00:00
// #i39040#, do not call anything between GetSettings and SetSettings that might have
// a side effect on the settings (like, eg, SvtSysLocaleOptions().GetLocaleLanguageType(),
// which changes the MiscSettings !!! )
AllSettings aSettings ( Application : : GetSettings ( ) ) ;
aSettings . SetUILocale ( aUILocale ) ;
2003-04-29 11:40:40 +00:00
aSettings . SetLanguage ( eLanguage ) ;
Application : : SetSettings ( aSettings ) ;
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } set locale settings " ) ;
2004-06-25 12:10:20 +00:00
aMgrName = String : : CreateFromAscii ( " ofa " ) ;
aMgrName + = String : : CreateFromInt32 ( SOLARUPD ) ; // aktuelle Versionsnummer
ResMgr * pOffResMgr = ResMgr : : CreateResMgr ( U2S ( aMgrName ) ) ;
Resource : : SetResManager ( pOffResMgr ) ;
// create service for loadin SFX (still needed in startup)
2005-02-02 12:45:19 +00:00
Reference < css : : document : : XEventListener > xGlobalBroadcaster ( xSMgr - > createInstance (
2004-06-25 12:10:20 +00:00
DEFINE_CONST_UNICODE ( " com.sun.star.frame.GlobalEventBroadcaster " ) ) , UNO_QUERY ) ;
// initialize test-tool library (if available)
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { tools::InitTestToolLib " ) ;
2004-06-25 12:10:20 +00:00
tools : : InitTestToolLib ( ) ;
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } tools::InitTestToolLib " ) ;
2004-06-25 12:10:20 +00:00
2004-11-15 15:01:54 +00:00
// First Start Wizard
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { FirstStartWizard " ) ;
2004-11-15 15:01:54 +00:00
FirstStartWizard fsw ( NULL ) ;
if ( ! fsw . Execute ( ) ) {
Reference < XDesktop > xDesktop ( xSMgr - > createInstance (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) , UNO_QUERY ) ;
xDesktop . is ( ) & & xDesktop - > terminate ( ) ;
return ;
2003-07-22 10:07:33 +00:00
}
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } FirstStartWizard " ) ;
2004-11-15 15:01:54 +00:00
2005-02-02 12:45:19 +00:00
if ( xGlobalBroadcaster . is ( ) )
{
css : : document : : EventObject aEvent ;
aEvent . EventName = : : rtl : : OUString : : createFromAscii ( " OnStartApp " ) ;
xGlobalBroadcaster - > notifyEvent ( aEvent ) ;
}
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 50 ) ;
2003-07-22 10:07:33 +00:00
2004-06-25 12:10:20 +00:00
// Backing Component
2004-11-26 13:49:05 +00:00
sal_Bool bCrashed = sal_False ;
sal_Bool bExistsRecoveryData = sal_False ;
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { impl_checkRecoveryState " ) ;
2004-11-26 13:49:05 +00:00
impl_checkRecoveryState ( bCrashed , bExistsRecoveryData ) ;
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } impl_checkRecoveryState " ) ;
2004-11-26 13:49:05 +00:00
if (
2005-02-16 15:37:23 +00:00
( pCmdLineArgs - > IsEmptyOrAcceptOnly ( ) ) & &
2004-11-26 13:49:05 +00:00
( SvtModuleOptions ( ) . IsModuleInstalled ( SvtModuleOptions : : E_SSTARTMODULE ) ) & &
( ! bExistsRecoveryData )
)
2003-04-24 12:35:03 +00:00
{
: : desktop : : Desktop : : bSuppressOpenDefault = sal_True ;
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " { create BackingComponent " ) ;
Reference < XFrame > xDesktopFrame ( xSMgr - > createInstance (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) , UNO_QUERY ) ;
if ( xDesktopFrame . is ( ) )
{
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 60 ) ;
2003-04-24 12:35:03 +00:00
Reference < XFrame > xBackingFrame ;
Reference < : : com : : sun : : star : : awt : : XWindow > xContainerWindow ;
xBackingFrame = xDesktopFrame - > findFrame ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " _blank " ) ) , 0 ) ;
if ( xBackingFrame . is ( ) )
xContainerWindow = xBackingFrame - > getContainerWindow ( ) ;
if ( xContainerWindow . is ( ) )
{
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 70 ) ;
2003-04-24 12:35:03 +00:00
Sequence < Any > lArgs ( 1 ) ;
lArgs [ 0 ] < < = xContainerWindow ;
Reference < XController > xBackingComp (
2004-02-25 17:16:12 +00:00
xSMgr - > createInstanceWithArguments ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.StartModule " ) ) , lArgs ) ,
2003-04-24 12:35:03 +00:00
UNO_QUERY ) ;
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 80 ) ;
2003-04-24 12:35:03 +00:00
if ( xBackingComp . is ( ) )
{
Reference < : : com : : sun : : star : : awt : : XWindow > xBackingWin ( xBackingComp , UNO_QUERY ) ;
// Attention: You MUST(!) call setComponent() before you call attachFrame().
// Because the backing component set the property "IsBackingMode" of the frame
// to true inside attachFrame(). But setComponent() reset this state everytimes ...
xBackingFrame - > setComponent ( xBackingWin , xBackingComp ) ;
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 90 ) ;
2003-04-24 12:35:03 +00:00
xBackingComp - > attachFrame ( xBackingFrame ) ;
2004-06-25 12:10:20 +00:00
CloseSplashScreen ( ) ;
2003-04-24 12:35:03 +00:00
xContainerWindow - > setVisible ( sal_True ) ;
Window * pCompWindow = VCLUnoHelper : : GetWindow ( xBackingFrame - > getComponentWindow ( ) ) ;
if ( pCompWindow )
pCompWindow - > Update ( ) ;
}
}
}
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " } create BackingComponent " ) ;
}
2003-03-25 12:52:54 +00:00
}
catch ( com : : sun : : star : : lang : : WrappedTargetException & wte )
{
com : : sun : : star : : uno : : Exception te ;
wte . TargetException > > = te ;
FatalError ( MakeStartupConfigAccessErrorMessage ( wte . Message + te . Message ) ) ;
return ;
}
catch ( com : : sun : : star : : uno : : Exception & e )
{
FatalError ( MakeStartupErrorMessage ( e . Message ) ) ;
return ;
}
/*
catch ( . . . )
{
FatalError ( MakeStartupErrorMessage (
OUString : : createFromAscii (
" Unknown error during startup (Office wrapper service). \n Installation could be damaged. " ) ) ) ;
return ;
}
*/
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 55 ) ;
2004-02-03 19:03:09 +00:00
SvtFontSubstConfig ( ) . Apply ( ) ;
SvtTabAppearanceCfg aAppearanceCfg ;
//aAppearanceCfg.SetInitialized();
aAppearanceCfg . SetApplicationDefaults ( this ) ;
SvtAccessibilityOptions aOptions ;
aOptions . SetVCLSettings ( ) ;
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 60 ) ;
2004-02-03 19:03:09 +00:00
Application : : SetFilterHdl ( LINK ( this , Desktop , ImplInitFilterHdl ) ) ;
2003-03-25 12:52:54 +00:00
sal_Bool bTerminateRequested = sal_False ;
2002-10-21 04:36:19 +00:00
2003-03-25 12:52:54 +00:00
// Preload function depends on an initialized sfx application!
2004-06-25 12:10:20 +00:00
SetSplashScreenProgress ( 70 ) ;
2002-10-21 04:36:19 +00:00
2004-06-25 16:30:04 +00:00
sal_Bool bUseSystemFileDialog ( sal_True ) ;
2003-03-25 12:52:54 +00:00
if ( pCmdLineArgs - > IsHeadless ( ) )
{
// Ensure that we use not the system file dialogs as
// headless mode relies on Application::EnableHeadlessMode()
// which does only work for VCL dialogs!!
SvtMiscOptions aMiscOptions ;
bUseSystemFileDialog = aMiscOptions . UseSystemFileDialog ( ) ;
aMiscOptions . SetUseSystemFileDialog ( sal_False ) ;
}
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// use system window dialogs
Application : : SetSystemWindowMode ( SYSTEMWINDOW_MODE_DIALOG ) ;
2001-07-16 11:55:47 +00:00
2003-04-04 16:22:32 +00:00
SetSplashScreenProgress ( 80 ) ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
if ( ! bTerminateRequested & & ! pCmdLineArgs - > IsInvisible ( ) )
InitializeQuickstartMode ( xSMgr ) ;
2001-07-16 11:55:47 +00:00
2004-07-23 10:20:30 +00:00
RTL_LOGFILE_CONTEXT ( aLog2 , " desktop (cd100003) createInstance com.sun.star.frame.Desktop " ) ;
2004-01-06 17:37:50 +00:00
try
2003-03-25 12:52:54 +00:00
{
2004-01-06 17:37:50 +00:00
Reference < XDesktop > xDesktop ( xSMgr - > createInstance (
OUString ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) , UNO_QUERY ) ;
if ( xDesktop . is ( ) )
xDesktop - > addTerminateListener ( new OfficeIPCThreadController ) ;
SetSplashScreenProgress ( 100 ) ;
}
catch ( com : : sun : : star : : uno : : Exception & e )
{
FatalError ( MakeStartupErrorMessage ( e . Message ) ) ;
return ;
2003-03-25 12:52:54 +00:00
}
2004-01-06 17:37:50 +00:00
/*
catch ( . . . )
{
FatalError ( MakeStartupErrorMessage (
OUString : : createFromAscii (
" Unknown error during startup (TD/Desktop service). \n Installation could be damaged. " ) ) ) ;
return ;
}
*/
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// Release solar mutex just before we wait for our client to connect
int nAcquireCount = 0 ;
: : vos : : IMutex & rMutex = Application : : GetSolarMutex ( ) ;
if ( rMutex . tryToAcquire ( ) )
nAcquireCount = Application : : ReleaseSolarMutex ( ) - 1 ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// Post user event to startup first application component window
// We have to send this OpenClients message short before execute() to
// minimize the risk that this message overtakes type detection contruction!!
Application : : PostUserEvent ( LINK ( this , Desktop , OpenClients_Impl ) ) ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// Post event to enable acceptors
Application : : PostUserEvent ( LINK ( this , Desktop , EnableAcceptors_Impl ) ) ;
2001-07-16 11:55:47 +00:00
2004-08-20 12:04:13 +00:00
// The configuration error handler currently is only for startup
2004-08-24 10:25:12 +00:00
ConfigurationErrorHandler aConfigErrHandler ;
2004-08-20 12:04:13 +00:00
aConfigErrHandler . deactivate ( ) ;
// Acquire solar mutex just before we enter our message loop
2003-03-25 12:52:54 +00:00
if ( nAcquireCount )
Application : : AcquireSolarMutex ( nAcquireCount ) ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// call Application::Execute to process messages in vcl message loop
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_TRACE ( " PERFORMANCE - enter Application::Execute() " ) ;
2004-02-03 19:03:09 +00:00
2004-07-23 10:20:30 +00:00
try
{
2004-11-09 13:04:03 +00:00
// The JavaContext contains an interaction handler which is used when
// the creation of a Java Virtual Machine fails
com : : sun : : star : : uno : : ContextLayer layer (
new JavaContext ( com : : sun : : star : : uno : : getCurrentContext ( ) ) ) ;
2004-07-23 10:20:30 +00:00
Execute ( ) ;
}
catch ( const com : : sun : : star : : document : : CorruptedFilterConfigurationException & exFilterCfg )
{
FatalError ( MakeStartupErrorMessage ( exFilterCfg . Message ) ) ;
// dont kill the office here! Terminate it in the right way. It shouldnt be a problem ...
}
2002-10-21 04:36:19 +00:00
2004-02-03 19:03:09 +00:00
Resource : : SetResManager ( NULL ) ;
delete pResMgr ;
2003-03-25 12:52:54 +00:00
// Restore old value
if ( pCmdLineArgs - > IsHeadless ( ) )
SvtMiscOptions ( ) . SetUseSystemFileDialog ( bUseSystemFileDialog ) ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
// remove temp directory
RemoveTemporaryDirectory ( ) ;
2001-07-16 11:55:47 +00:00
2003-03-25 12:52:54 +00:00
DeregisterServices ( ) ;
2001-07-26 06:45:36 +00:00
2004-06-25 12:10:20 +00:00
tools : : DeInitTestToolLib ( ) ;
2001-02-23 10:22:36 +00:00
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " -> dispose path/language options " ) ;
2004-07-23 10:20:30 +00:00
if ( pLanguageOptions ! = NULL )
delete pLanguageOptions ;
if ( pPathOptions ! = NULL )
delete pPathOptions ;
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " <- dispose path/language options " ) ;
2000-11-30 07:47:40 +00:00
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " -> deinit ucb " ) ;
2001-07-16 11:55:47 +00:00
: : ucb : : ContentBroker : : deinitialize ( ) ;
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " <- deinit ucb " ) ;
2001-06-26 12:35:41 +00:00
2001-07-16 11:55:47 +00:00
// instead of removing of the configManager just let it commit all the changes
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " <- store config items " ) ;
2001-07-16 11:55:47 +00:00
utl : : ConfigManager : : GetConfigManager ( ) - > StoreConfigItems ( ) ;
2003-03-25 12:52:54 +00:00
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " <- store config items " ) ;
RTL_LOGFILE_CONTEXT_TRACE ( aLog , " FINISHED WITH Destop::Main " ) ;
2000-09-18 15:18:56 +00:00
}
2004-02-03 19:03:09 +00:00
IMPL_LINK ( Desktop , ImplInitFilterHdl , ConvertData * , pData )
{
return GraphicFilter : : GetGraphicFilter ( ) - > GetFilterCallback ( ) . Call ( pData ) ;
}
2002-11-01 13:49:58 +00:00
sal_Bool Desktop : : InitializeConfiguration ( )
2002-10-22 14:14:00 +00:00
{
2002-11-01 13:49:58 +00:00
sal_Bool bOk = sal_False ;
try
2002-10-22 14:14:00 +00:00
{
2002-11-01 13:49:58 +00:00
bOk = InitConfiguration ( ) ;
}
catch ( : : com : : sun : : star : : lang : : ServiceNotRegisteredException & )
{
this - > HandleBootstrapErrors ( Desktop : : BE_UNO_SERVICE_CONFIG_MISSING ) ;
}
catch ( : : com : : sun : : star : : configuration : : MissingBootstrapFileException & e )
{
OUString aMsg ( CreateErrorMsgString ( utl : : Bootstrap : : MISSING_BOOTSTRAP_FILE ,
e . BootstrapFileURL ) ) ;
HandleBootstrapPathErrors ( : : utl : : Bootstrap : : INVALID_USER_INSTALL , aMsg ) ;
}
catch ( : : com : : sun : : star : : configuration : : InvalidBootstrapFileException & e )
{
OUString aMsg ( CreateErrorMsgString ( utl : : Bootstrap : : INVALID_BOOTSTRAP_FILE_ENTRY ,
e . BootstrapFileURL ) ) ;
HandleBootstrapPathErrors ( : : utl : : Bootstrap : : INVALID_BASE_INSTALL , aMsg ) ;
}
catch ( : : com : : sun : : star : : configuration : : InstallationIncompleteException & )
{
OUString aVersionFileURL ;
OUString aMsg ;
utl : : Bootstrap : : PathStatus aPathStatus = utl : : Bootstrap : : locateVersionFile ( aVersionFileURL ) ;
if ( aPathStatus = = utl : : Bootstrap : : PATH_EXISTS )
aMsg = CreateErrorMsgString ( utl : : Bootstrap : : MISSING_VERSION_FILE_ENTRY , aVersionFileURL ) ;
else
aMsg = CreateErrorMsgString ( utl : : Bootstrap : : MISSING_VERSION_FILE , aVersionFileURL ) ;
2002-10-22 14:14:00 +00:00
2002-11-01 13:49:58 +00:00
HandleBootstrapPathErrors ( : : utl : : Bootstrap : : MISSING_USER_INSTALL , aMsg ) ;
}
2003-04-17 12:32:52 +00:00
catch ( com : : sun : : star : : configuration : : backend : : BackendAccessException & exception )
2002-11-01 13:49:58 +00:00
{
// [cm122549] It is assumed in this case that the message
// coming from InitConfiguration (in fact CreateApplicationConf...)
// is suitable for display directly.
2003-03-25 12:52:54 +00:00
FatalError ( MakeStartupErrorMessage ( exception . Message ) ) ;
2002-11-01 13:49:58 +00:00
}
2003-04-17 12:32:52 +00:00
catch ( com : : sun : : star : : configuration : : backend : : BackendSetupException & exception )
2002-11-01 13:49:58 +00:00
{
// [cm122549] It is assumed in this case that the message
// coming from InitConfiguration (in fact CreateApplicationConf...)
// is suitable for display directly.
2003-03-25 12:52:54 +00:00
FatalError ( MakeStartupErrorMessage ( exception . Message ) ) ;
2002-11-01 13:49:58 +00:00
}
catch ( : : com : : sun : : star : : configuration : : CannotLoadConfigurationException & )
{
OUString aMsg ( CreateErrorMsgString ( utl : : Bootstrap : : INVALID_BOOTSTRAP_DATA ,
OUString ( ) ) ) ;
HandleBootstrapPathErrors ( : : utl : : Bootstrap : : INVALID_BASE_INSTALL , aMsg ) ;
}
catch ( : : com : : sun : : star : : uno : : Exception & )
{
OUString aMsg ( CreateErrorMsgString ( utl : : Bootstrap : : INVALID_BOOTSTRAP_DATA ,
OUString ( ) ) ) ;
HandleBootstrapPathErrors ( : : utl : : Bootstrap : : INVALID_BASE_INSTALL , aMsg ) ;
}
2002-10-22 14:14:00 +00:00
2002-11-01 13:49:58 +00:00
return bOk ;
}
2002-10-22 14:14:00 +00:00
2002-11-01 13:49:58 +00:00
sal_Bool Desktop : : InitializeQuickstartMode ( Reference < XMultiServiceFactory > & rSMgr )
{
try
{
// the shutdown icon sits in the systray and allows the user to keep
// the office instance running for quicker restart
// this will only be activated if -quickstart was specified on cmdline
RTL_LOGFILE_CONTEXT ( aLog , " desktop (cd100003) createInstance com.sun.star.office.Quickstart " ) ;
2002-10-22 14:14:00 +00:00
2002-11-01 13:49:58 +00:00
sal_Bool bQuickstart = GetCommandLineArgs ( ) - > IsQuickstart ( ) ;
Sequence < Any > aSeq ( 1 ) ;
aSeq [ 0 ] < < = bQuickstart ;
2002-10-22 14:14:00 +00:00
2002-11-01 13:49:58 +00:00
// Try to instanciate quickstart service. This service is not mandatory, so
// do nothing if service is not available.
Reference < XComponent > xQuickstart ( rSMgr - > createInstanceWithArguments (
DEFINE_CONST_UNICODE ( " com.sun.star.office.Quickstart " ) , aSeq ) ,
UNO_QUERY ) ;
return sal_True ;
2002-10-22 14:14:00 +00:00
}
2002-11-01 13:49:58 +00:00
catch ( : : com : : sun : : star : : uno : : Exception & )
2002-10-22 14:14:00 +00:00
{
2002-11-01 13:49:58 +00:00
return sal_False ;
2002-10-22 14:14:00 +00:00
}
2002-11-01 13:49:58 +00:00
}
2000-09-18 15:18:56 +00:00
void Desktop : : SystemSettingsChanging ( AllSettings & rSettings , Window * pFrame )
{
2004-02-03 19:03:09 +00:00
if ( ! SvtTabAppearanceCfg : : IsInitialized ( ) )
return ;
# define DRAGFULL_OPTION_ALL \
( DRAGFULL_OPTION_WINDOWMOVE | DRAGFULL_OPTION_WINDOWSIZE \
| DRAGFULL_OPTION_OBJECTMOVE | DRAGFULL_OPTION_OBJECTSIZE \
| DRAGFULL_OPTION_DOCKING | DRAGFULL_OPTION_SPLIT \
| DRAGFULL_OPTION_SCROLL )
# define DRAGFULL_OPTION_NONE ((sal_uInt32)~DRAGFULL_OPTION_ALL)
StyleSettings hStyleSettings = rSettings . GetStyleSettings ( ) ;
MouseSettings hMouseSettings = rSettings . GetMouseSettings ( ) ;
sal_uInt32 nDragFullOptions = hStyleSettings . GetDragFullOptions ( ) ;
SvtTabAppearanceCfg aAppearanceCfg ;
sal_uInt16 nGet = aAppearanceCfg . GetDragMode ( ) ;
switch ( nGet )
{
case DragFullWindow :
nDragFullOptions | = DRAGFULL_OPTION_ALL ;
break ;
case DragFrame :
nDragFullOptions & = DRAGFULL_OPTION_NONE ;
break ;
case DragSystemDep :
default :
break ;
}
sal_uInt32 nFollow = hMouseSettings . GetFollow ( ) ;
hMouseSettings . SetFollow ( aAppearanceCfg . IsMenuMouseFollow ( ) ? ( nFollow | MOUSE_FOLLOW_MENU ) : ( nFollow & ~ MOUSE_FOLLOW_MENU ) ) ;
rSettings . SetMouseSettings ( hMouseSettings ) ;
sal_uInt16 nTabStyle = hStyleSettings . GetTabControlStyle ( ) ;
nTabStyle & = ~ STYLE_TABCONTROL_SINGLELINE ;
if ( aAppearanceCfg . IsSingleLineTabCtrl ( ) )
nTabStyle | = STYLE_TABCONTROL_SINGLELINE ;
nTabStyle & = ~ STYLE_TABCONTROL_COLOR ;
if ( aAppearanceCfg . IsColoredTabCtrl ( ) )
nTabStyle | = STYLE_TABCONTROL_COLOR ;
hStyleSettings . SetTabControlStyle ( nTabStyle ) ;
hStyleSettings . SetDragFullOptions ( nDragFullOptions ) ;
rSettings . SetStyleSettings ( hStyleSettings ) ;
MiscSettings aMiscSettings ( rSettings . GetMiscSettings ( ) ) ;
aMiscSettings . SetTwoDigitYearStart ( ( USHORT ) SfxMiscCfg ( ) . GetYear2000 ( ) ) ;
rSettings . SetMiscSettings ( aMiscSettings ) ;
2000-09-18 15:18:56 +00:00
}
2001-08-01 11:16:42 +00:00
// ========================================================================
IMPL_LINK ( Desktop , AsyncInitFirstRun , void * , NOTINTERESTEDIN )
{
DoFirstRunInitializations ( ) ;
return 0L ;
}
// ========================================================================
2003-05-22 07:51:28 +00:00
IMPL_STATIC_LINK ( Desktop , AsyncTerminate , void * , NOTINTERESTEDIN )
{
Reference < XMultiServiceFactory > rFactory = : : comphelper : : getProcessServiceFactory ( ) ;
Reference < XDesktop > xDesktop ( rFactory - > createInstance (
OUString : : createFromAscii ( " com.sun.star.frame.Desktop " ) ) ,
UNO_QUERY ) ;
xDesktop . is ( ) & & xDesktop - > terminate ( ) ;
return 0L ;
}
2001-07-10 10:34:26 +00:00
IMPL_LINK ( Desktop , OpenClients_Impl , void * , pvoid )
2001-07-06 14:58:45 +00:00
{
2005-02-16 15:37:23 +00:00
RTL_LOGFILE_CONTEXT ( aLog , " PERFORMANCE - DesktopOpenClients_Impl() " ) ;
2001-07-24 09:24:30 +00:00
2001-07-16 11:55:47 +00:00
OpenClients ( ) ;
2004-06-25 12:10:20 +00:00
2003-03-25 12:52:54 +00:00
// CloseStartupScreen();
2003-04-04 16:22:32 +00:00
CloseSplashScreen ( ) ;
2001-07-06 14:58:45 +00:00
2001-08-01 11:16:42 +00:00
CheckFirstRun ( ) ;
2004-03-09 10:07:00 +00:00
// allow ipc interaction
OfficeIPCThread : : SetReady ( ) ;
2001-08-02 11:21:35 +00:00
EnableOleAutomation ( ) ;
2001-07-06 14:58:45 +00:00
return 0 ;
}
2003-03-25 12:52:54 +00:00
// enable acceptos
IMPL_LINK ( Desktop , EnableAcceptors_Impl , void * , pvoid )
{
enableAcceptors ( ) ;
return 0 ;
}
2001-08-02 11:21:35 +00:00
// Registers a COM class factory of the service manager with the windows operating system.
void Desktop : : EnableOleAutomation ( )
{
RTL_LOGFILE_CONTEXT ( aLog , " desktop (jl97489) ::Desktop::EnableOleAutomation " ) ;
# ifdef WNT
Reference < XMultiServiceFactory > xSMgr = comphelper : : getProcessServiceFactory ( ) ;
xSMgr - > createInstance ( DEFINE_CONST_UNICODE ( " com.sun.star.bridge.OleApplicationRegistration " ) ) ;
2003-04-04 18:11:50 +00:00
xSMgr - > createInstance ( DEFINE_CONST_UNICODE ( " com.sun.star.comp.ole.EmbedServer " ) ) ;
2004-01-20 15:33:21 +00:00
# endif
2001-08-02 11:21:35 +00:00
}
2001-07-06 14:58:45 +00:00
2003-05-22 07:51:28 +00:00
sal_Bool Desktop : : CheckOEM ( )
{
Reference < XMultiServiceFactory > rFactory = : : comphelper : : getProcessServiceFactory ( ) ;
Reference < XJob > rOemJob ( rFactory - > createInstance (
OUString : : createFromAscii ( " com.sun.star.office.OEMPreloadJob " ) ) ,
UNO_QUERY ) ;
Sequence < NamedValue > args ;
sal_Bool bResult = sal_False ;
if ( rOemJob . is ( ) ) {
Any aResult = rOemJob - > execute ( args ) ;
aResult > > = bResult ;
return bResult ;
} else {
return sal_True ;
}
}
2001-07-16 11:55:47 +00:00
void Desktop : : OpenClients ( )
{
2003-11-07 13:51:04 +00:00
2001-07-16 11:55:47 +00:00
// check if a document has been recovered - if there is one of if a document was loaded by cmdline, no default document
// should be created
Reference < XComponent > xFirst ;
BOOL bLoaded = FALSE ;
CommandLineArgs * pArgs = GetCommandLineArgs ( ) ;
SvtInternalOptions aInternalOptions ;
2003-05-22 07:51:28 +00:00
Reference < XMultiServiceFactory > rFactory = : : comphelper : : getProcessServiceFactory ( ) ;
2003-06-27 08:42:13 +00:00
if ( ! pArgs - > IsQuickstart ( ) ) {
sal_Bool bShowHelp = sal_False ;
: : rtl : : OUStringBuffer aHelpURLBuffer ;
if ( pArgs - > IsHelpWriter ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://swriter/start " ) ;
} else if ( pArgs - > IsHelpCalc ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://scalc/start " ) ;
} else if ( pArgs - > IsHelpDraw ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://sdraw/start " ) ;
} else if ( pArgs - > IsHelpImpress ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://simpress/start " ) ;
2004-08-02 13:39:04 +00:00
} else if ( pArgs - > IsHelpBase ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://sdatabase/start " ) ;
2003-06-27 08:42:13 +00:00
} else if ( pArgs - > IsHelpBasic ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://sbasic/start " ) ;
} else if ( pArgs - > IsHelpMath ( ) ) {
bShowHelp = sal_True ;
aHelpURLBuffer . appendAscii ( " vnd.sun.star.help://smath/start " ) ;
}
if ( bShowHelp ) {
Help * pHelp = Application : : GetHelp ( ) ;
Any aRet = : : utl : : ConfigManager : : GetDirectConfigProperty ( : : utl : : ConfigManager : : LOCALE ) ;
rtl : : OUString aTmp ;
aRet > > = aTmp ;
aHelpURLBuffer . appendAscii ( " ?Language= " ) ;
aHelpURLBuffer . append ( aTmp ) ;
# if defined UNX
aHelpURLBuffer . appendAscii ( " &System=UNX " ) ;
# elif defined WNT
aHelpURLBuffer . appendAscii ( " &System=WIN " ) ;
# elif defined MAC
aHelpURLBuffer . appendAscii ( " &System=MAC " ) ;
# endif
pHelp - > Start ( aHelpURLBuffer . makeStringAndClear ( ) , NULL ) ;
return ;
}
}
2004-12-02 08:14:48 +00:00
// Disable AutoSave feature in case "-norestore" is given on the command line.
// The reason behind: AutoSave/EmergencySave/AutoRecovery share the same data.
// But the require that all documents, which are saved as backup should exists inside
// memory. May be this mechanism will be inconsistent if the configuration exists ...
// but no document inside memory corrspodn to this data.
// Furter it's not acceptable to recover such documents without any UI. It can
// need some time, where the user wont see any results and wait for finishing the office startup ...
if ( pArgs - > IsNoRestore ( ) )
{
: : comphelper : : ConfigurationHelper : : writeDirectKey (
: : comphelper : : getProcessServiceFactory ( ) ,
: : rtl : : OUString : : createFromAscii ( " org.openoffice.Office.Recovery " ) ,
: : rtl : : OUString : : createFromAscii ( " AutoSave " ) ,
: : rtl : : OUString : : createFromAscii ( " Enabled " ) ,
: : com : : sun : : star : : uno : : makeAny ( sal_False ) ,
: : comphelper : : ConfigurationHelper : : E_STANDARD ) ;
}
2004-11-26 13:49:05 +00:00
if ( ! pArgs - > IsServer ( ) & & ! pArgs - > IsNoRestore ( ) )
2001-07-16 11:55:47 +00:00
{
2004-11-26 13:49:05 +00:00
sal_Bool bCrashed = sal_False ;
sal_Bool bExistsRecoveryData = sal_False ;
impl_checkRecoveryState ( bCrashed , bExistsRecoveryData ) ;
if ( bCrashed | | bExistsRecoveryData )
2001-07-16 11:55:47 +00:00
{
2004-11-26 13:49:05 +00:00
impl_callRecoveryUI (
sal_False , // false => force recovery instead of emergency save
bCrashed ,
bExistsRecoveryData ) ;
/* TODO we cant be shure, that at least one document could be recovered here successfully
So we set bLoaded = TRUE to supress opening of the default document .
But we should make it more safe . Otherwhise we have an office without an UI . . .
. . .
May be we can check the desktop if some documents are existing there .
*/
Reference < XFramesSupplier > xTasksSupplier (
: : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) ,
: : com : : sun : : star : : uno : : UNO_QUERY ) ;
Reference < XElementAccess > xList ( xTasksSupplier - > getFrames ( ) , UNO_QUERY ) ;
if ( xList - > hasElements ( ) )
bLoaded = sal_True ;
2001-07-16 11:55:47 +00:00
}
2005-02-02 12:45:19 +00:00
// session management
#if 0
// disabled
try
{
Reference < XInitialization > aListener ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance (
OUString : : createFromAscii ( " com.sun.star.frame.SessionListener " ) ) , UNO_QUERY ) ;
if ( aListener . is ( ) )
{
aListener - > initialize ( Sequence < Any > ( 0 ) ) ;
Reference < XSessionManagerListener > r ( aListener , UNO_QUERY ) ;
if ( r . is ( ) & & ! bLoaded )
bLoaded = r - > doRestore ( ) ;
}
}
catch ( com : : sun : : star : : uno : : Exception & e )
{
OUString aMessage = OUString : : createFromAscii ( " Error in session management \n " )
+ e . Message ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMessage , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
# endif
2001-07-16 11:55:47 +00:00
}
2001-11-21 15:31:29 +00:00
if ( ! pArgs - > IsServer ( ) )
2001-07-16 11:55:47 +00:00
{
2002-02-26 07:16:22 +00:00
ProcessDocumentsRequest aRequest ;
2003-07-10 13:41:29 +00:00
aRequest . pcProcessed = NULL ;
2002-02-26 07:16:22 +00:00
pArgs - > GetOpenList ( aRequest . aOpenList ) ;
2002-10-17 09:46:33 +00:00
pArgs - > GetViewList ( aRequest . aViewList ) ;
2003-05-16 13:20:54 +00:00
pArgs - > GetStartList ( aRequest . aStartList ) ;
2002-02-26 07:16:22 +00:00
pArgs - > GetPrintList ( aRequest . aPrintList ) ;
pArgs - > GetPrintToList ( aRequest . aPrintToList ) ;
pArgs - > GetPrinterName ( aRequest . aPrinterName ) ;
pArgs - > GetForceOpenList ( aRequest . aForceOpenList ) ;
pArgs - > GetForceNewList ( aRequest . aForceNewList ) ;
if ( aRequest . aOpenList . getLength ( ) > 0 | |
2002-10-17 09:46:33 +00:00
aRequest . aViewList . getLength ( ) > 0 | |
2003-05-16 13:20:54 +00:00
aRequest . aStartList . getLength ( ) > 0 | |
2002-02-26 07:16:22 +00:00
aRequest . aPrintList . getLength ( ) > 0 | |
aRequest . aForceOpenList . getLength ( ) > 0 | |
aRequest . aForceNewList . getLength ( ) > 0 | |
( aRequest . aPrintToList . getLength ( ) > 0 & & aRequest . aPrinterName . getLength ( ) > 0 ) )
2001-11-21 15:31:29 +00:00
{
bLoaded = sal_True ;
2002-02-26 07:16:22 +00:00
2005-02-21 16:19:17 +00:00
if ( pArgs - > HasModuleParam ( ) )
{
SvtModuleOptions aOpt ;
// Support command line parameters to start a module (as preselection)
if ( pArgs - > IsWriter ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SWRITER ) )
aRequest . aModule = aOpt . GetFactoryName ( SvtModuleOptions : : E_WRITER ) ;
else if ( pArgs - > IsCalc ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SCALC ) )
aRequest . aModule = aOpt . GetFactoryName ( SvtModuleOptions : : E_CALC ) ;
else if ( pArgs - > IsImpress ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SIMPRESS ) )
aRequest . aModule = aOpt . GetFactoryName ( SvtModuleOptions : : E_IMPRESS ) ;
else if ( pArgs - > IsDraw ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SDRAW ) )
aRequest . aModule = aOpt . GetFactoryName ( SvtModuleOptions : : E_DRAW ) ;
}
2002-02-26 07:16:22 +00:00
// Process request
OfficeIPCThread : : ExecuteCmdLineRequests ( aRequest ) ;
2001-11-21 15:31:29 +00:00
}
2001-07-16 11:55:47 +00:00
}
// no default document if a document was loaded by recovery or by command line or if soffice is used as server
if ( bLoaded | | xFirst . is ( ) | | pArgs - > IsServer ( ) )
return ;
2003-04-24 12:35:03 +00:00
if ( pArgs - > IsQuickstart ( ) | | pArgs - > IsInvisible ( ) | | pArgs - > IsBean ( ) )
// soffice was started as tray icon ...
2001-07-16 11:55:47 +00:00
return ;
{
OpenDefault ( ) ;
}
}
void Desktop : : OpenDefault ( )
{
2003-04-24 12:35:03 +00:00
if ( : : desktop : : Desktop : : bSuppressOpenDefault )
return ;
2001-08-07 10:25:00 +00:00
RTL_LOGFILE_CONTEXT ( aLog , " desktop (cd100003) ::Desktop::OpenDefault " ) ;
2001-07-24 09:24:30 +00:00
2003-06-27 08:42:13 +00:00
: : rtl : : OUString aName ;
2002-10-24 14:39:22 +00:00
SvtModuleOptions aOpt ;
CommandLineArgs * pArgs = GetCommandLineArgs ( ) ;
2003-03-25 12:52:54 +00:00
if ( pArgs - > IsNoDefault ( ) ) return ;
2002-10-24 14:39:22 +00:00
if ( pArgs - > HasModuleParam ( ) )
{
// Support new command line parameters to start a module
if ( pArgs - > IsWriter ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SWRITER ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_WRITER ) ;
else if ( pArgs - > IsCalc ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SCALC ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_CALC ) ;
else if ( pArgs - > IsImpress ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SIMPRESS ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_IMPRESS ) ;
2004-08-02 13:39:04 +00:00
else if ( pArgs - > IsBase ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SDATABASE ) )
2005-01-21 16:35:22 +00:00
aName = : : rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " service:com.sun.star.sdb.DatabaseWizardDialog " ) ) ;
2002-10-24 14:39:22 +00:00
else if ( pArgs - > IsDraw ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SDRAW ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_DRAW ) ;
else if ( pArgs - > IsMath ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SMATH ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_MATH ) ;
else if ( pArgs - > IsGlobal ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SWRITER ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_WRITERGLOBAL ) ;
else if ( pArgs - > IsWeb ( ) & & aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SWRITER ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_WRITERWEB ) ;
}
2001-08-22 12:06:35 +00:00
if ( ! aName . getLength ( ) )
2001-07-16 11:55:47 +00:00
{
2002-10-24 14:39:22 +00:00
// Old way to create a default document
2001-08-22 12:06:35 +00:00
if ( aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SWRITER ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_WRITER ) ;
else if ( aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SCALC ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_CALC ) ;
else if ( aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SIMPRESS ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_IMPRESS ) ;
2004-08-02 13:39:04 +00:00
else if ( aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SDATABASE ) )
2005-01-21 16:35:22 +00:00
aName = : : rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " service:com.sun.star.sdb.DatabaseWizardDialog " ) ) ;
2001-08-22 12:06:35 +00:00
else if ( aOpt . IsModuleInstalled ( SvtModuleOptions : : E_SDRAW ) )
aName = aOpt . GetFactoryEmptyDocumentURL ( SvtModuleOptions : : E_DRAW ) ;
2001-07-16 11:55:47 +00:00
else
return ;
}
2003-03-25 12:52:54 +00:00
Sequence < PropertyValue > aNoArgs ;
2001-07-16 11:55:47 +00:00
Reference < XComponentLoader > xDesktop (
2003-06-10 08:12:11 +00:00
: : comphelper : : getProcessServiceFactory ( ) - > createInstance (
OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) ,
2001-07-16 11:55:47 +00:00
: : com : : sun : : star : : uno : : UNO_QUERY ) ;
2004-03-09 10:07:00 +00:00
2005-01-21 16:35:22 +00:00
// TODO: the dispatch has to be done for loadComponentFromURL as well. Please ask AS for moer detail.
if ( ! aName . compareToAscii ( " service: " , 8 ) )
2004-03-09 10:07:00 +00:00
{
2005-01-21 16:35:22 +00:00
URL aURL ;
aURL . Complete = aName ;
Reference < XDispatch > xDispatcher ;
Reference < XDispatchProvider > xProvider ( xDesktop , UNO_QUERY ) ;
Reference < XURLTransformer > xParser ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.util.URLTransformer " ) ) ) , : : com : : sun : : star : : uno : : UNO_QUERY ) ;
if ( xParser . is ( ) = = sal_True )
xParser - > parseStrict ( aURL ) ;
if ( xProvider . is ( ) = = sal_True )
xDispatcher = xProvider - > queryDispatch ( aURL , : : rtl : : OUString ( ) , 0 ) ;
if ( xDispatcher . is ( ) = = sal_True )
{
try
{
// We have to be listener to catch errors during dispatching URLs.
// Otherwise it would be possible to have an office running without an open
// window!!
Reference < XNotifyingDispatch > xDisp ( xDispatcher , UNO_QUERY ) ;
if ( xDisp . is ( ) )
xDisp - > dispatchWithNotification ( aURL , aNoArgs , DispatchWatcher : : GetDispatchWatcher ( ) ) ;
else
xDispatcher - > dispatch ( aURL , aNoArgs ) ;
}
catch ( : : com : : sun : : star : : uno : : Exception & )
{
OUString aMsg = OUString : : createFromAscii (
" Desktop::OpenDefault() IllegalArgumentException while calling XNotifyingDispatch: " ) ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMsg , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
}
2004-03-09 10:07:00 +00:00
}
2005-01-21 16:35:22 +00:00
else
2004-03-09 10:07:00 +00:00
{
2003-06-10 08:12:11 +00:00
2005-01-21 16:35:22 +00:00
Reference < XComponent > aComp ;
try
{
aComp = Reference < XComponent > ( xDesktop - > loadComponentFromURL (
aName , : : rtl : : OUString : : createFromAscii ( " _default " ) , 0 , aNoArgs ) , UNO_QUERY ) ;
}
catch ( : : com : : sun : : star : : lang : : IllegalArgumentException & iae )
{
OUString aMsg = OUString : : createFromAscii (
" Desktop::OpenDefault() IllegalArgumentException while calling loadComponentFromURL: " )
+ iae . Message ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMsg , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
catch ( com : : sun : : star : : io : : IOException & ioe )
{
OUString aMsg = OUString : : createFromAscii (
" Desktop::OpenDefault() IOException while calling loadComponentFromURL: " )
+ ioe . Message ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMsg , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
// shut down again if no component could be loaded
OSL_ENSURE ( aComp . is ( ) , " Desktop::OpenDesfault(), no component was loaded. " ) ;
if ( ! aComp . is ( ) )
Application : : PostUserEvent ( STATIC_LINK ( 0 , Desktop , AsyncTerminate ) ) ;
}
2001-07-16 11:55:47 +00:00
}
String GetURL_Impl ( const String & rName )
{
2004-10-22 13:42:55 +00:00
// if rName is a vnd.sun.star.script URL do not attempt to parse it
// as INetURLObj does not handle handle there URLs
if ( rName . CompareToAscii ( " vnd.sun.star.script " , 19 ) = = COMPARE_EQUAL )
{
return rName ;
}
2005-01-21 16:35:22 +00:00
if ( rName . CompareToAscii ( " service: " , 8 ) = = COMPARE_EQUAL )
{
return rName ;
}
2001-07-16 11:55:47 +00:00
// if the filename is a physical name, it is the client file system, not the file system
// of the machine where the office is running ( if this are different machines )
// so in the remote case we can't handle relative filenames as arguments, because they
// are parsed relative to the program path
// the file system of the client is addressed through the "file:" protocol
2001-09-26 08:45:06 +00:00
// Get current working directory to support relativ pathes
: : rtl : : OUString aWorkingDir ;
osl_getProcessWorkingDir ( & aWorkingDir . pData ) ;
// Add path seperator to these directory and make given URL (rName) absolute by using of current working directory
// Attention: "setFianlSlash()" is neccessary for calling "smartRel2Abs()"!!!
// Otherwhise last part will be ignored and wrong result will be returned!!!
// "smartRel2Abs()" interpret given URL as file not as path. So he truncate last element to get the base path ...
// But if we add a seperator - he doesn't do it anymore.
INetURLObject aObj ( aWorkingDir ) ;
aObj . setFinalSlash ( ) ;
2003-06-16 10:38:09 +00:00
// Use the provided parameters for smartRel2Abs to support the usage of '%' in system paths.
// Otherwise this char won't get encoded and we are not able to load such files later,
// see #110156#
2001-07-16 11:55:47 +00:00
bool bWasAbsolute ;
2003-06-16 10:38:09 +00:00
INetURLObject aURL = aObj . smartRel2Abs ( rName , bWasAbsolute , false , INetURLObject : : WAS_ENCODED ,
RTL_TEXTENCODING_UTF8 , true ) ;
2001-09-26 08:45:06 +00:00
String aFileURL = aURL . GetMainURL ( INetURLObject : : NO_DECODE ) ;
2001-09-13 11:30:26 +00:00
: : osl : : FileStatus aStatus ( FileStatusMask_FileURL ) ;
: : osl : : DirectoryItem aItem ;
if ( : : osl : : FileBase : : E_None = = : : osl : : DirectoryItem : : get ( aFileURL , aItem ) & &
: : osl : : FileBase : : E_None = = aItem . getFileStatus ( aStatus ) )
aFileURL = aStatus . getFileURL ( ) ;
return aFileURL ;
2001-07-16 11:55:47 +00:00
}
void Desktop : : HandleAppEvent ( const ApplicationEvent & rAppEvent )
{
if ( rAppEvent . IsOpenEvent ( ) | | rAppEvent . IsPrintEvent ( ) )
{
String aPrinterName ;
Reference < XComponentLoader > xDesktop (
: : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) ,
: : com : : sun : : star : : uno : : UNO_QUERY ) ;
// create parameter array
2003-03-25 12:52:54 +00:00
sal_Int32 nCount = rAppEvent . IsPrintEvent ( ) ? 5 : 1 ;
2001-07-16 11:55:47 +00:00
Sequence < PropertyValue > aArgs ( nCount ) ;
aArgs [ 0 ] . Name = : : rtl : : OUString : : createFromAscii ( " Referer " ) ;
if ( rAppEvent . IsPrintEvent ( ) )
{
aArgs [ 1 ] . Name = : : rtl : : OUString : : createFromAscii ( " ReadOnly " ) ;
aArgs [ 2 ] . Name = : : rtl : : OUString : : createFromAscii ( " OpenNewView " ) ;
aArgs [ 3 ] . Name = : : rtl : : OUString : : createFromAscii ( " Hidden " ) ;
aArgs [ 4 ] . Name = : : rtl : : OUString : : createFromAscii ( " Silent " ) ;
}
// mark request as user interaction from outside
aArgs [ 0 ] . Value < < = : : rtl : : OUString : : createFromAscii ( " private:OpenEvent " ) ;
for ( sal_uInt16 i = 0 ; i < rAppEvent . GetParamCount ( ) ; i + + )
{
// get file name
String aName ( rAppEvent . GetParam ( i ) ) ;
2001-11-27 17:15:20 +00:00
: : rtl : : OUString aTarget ( DEFINE_CONST_UNICODE ( " _default " ) ) ;
2001-07-16 11:55:47 +00:00
// is the parameter a printername ?
if ( aName . Len ( ) > 1 & & * aName . GetBuffer ( ) = = ' @ ' )
{
aPrinterName = aName . Copy ( 1 ) ;
continue ;
}
aName = GetURL_Impl ( aName ) ;
if ( rAppEvent . IsPrintEvent ( ) )
{
// documents opened for printing are opened readonly because they must be opened as a new document and this
// document could be open already
aArgs [ 1 ] . Value < < = sal_True ;
// always open a new document for printing, because it must be disposed afterwards
aArgs [ 2 ] . Value < < = sal_True ;
// printing is done in a hidden view
aArgs [ 3 ] . Value < < = sal_True ;
// load document for printing without user interaction
aArgs [ 4 ] . Value < < = sal_True ;
2001-11-27 17:15:20 +00:00
// hidden documents should never be put into open tasks
aTarget = : : rtl : : OUString ( DEFINE_CONST_UNICODE ( " _blank " ) ) ;
2001-07-16 11:55:47 +00:00
}
2001-08-02 12:34:32 +00:00
Reference < XPrintable > xDoc ;
if (
( aName . CompareToAscii ( " .uno " , 4 ) = = COMPARE_EQUAL ) | |
( aName . CompareToAscii ( " slot: " , 5 ) = = COMPARE_EQUAL ) | |
2004-10-22 13:42:55 +00:00
( aName . CompareToAscii ( " macro: " , 6 ) = = COMPARE_EQUAL ) | |
( aName . CompareToAscii ( " vnd.sun.star.script " , 19 ) = = COMPARE_EQUAL )
2001-08-02 12:34:32 +00:00
)
{
URL aURL ;
aURL . Complete = aName ;
Reference < XDispatch > xDispatcher ;
Reference < XDispatchProvider > xProvider ( xDesktop , UNO_QUERY ) ;
Reference < XURLTransformer > xParser ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.util.URLTransformer " ) ) ) , : : com : : sun : : star : : uno : : UNO_QUERY ) ;
if ( xParser . is ( ) = = sal_True )
xParser - > parseStrict ( aURL ) ;
if ( xProvider . is ( ) = = sal_True )
xDispatcher = xProvider - > queryDispatch ( aURL , : : rtl : : OUString ( ) , 0 ) ;
if ( xDispatcher . is ( ) = = sal_True )
2001-11-05 06:18:26 +00:00
{
2001-11-21 15:31:29 +00:00
// We have to be listener to catch errors during dispatching URLs.
2001-11-05 06:18:26 +00:00
// Otherwise it would be possible to have an office running without an open
// window!!
2001-11-21 15:31:29 +00:00
Reference < XNotifyingDispatch > xDisp ( xDispatcher , UNO_QUERY ) ;
if ( xDisp . is ( ) )
xDisp - > dispatchWithNotification ( aURL , aArgs , DispatchWatcher : : GetDispatchWatcher ( ) ) ;
else
xDispatcher - > dispatch ( aURL , aArgs ) ;
2001-11-05 06:18:26 +00:00
}
2001-08-02 12:34:32 +00:00
}
else
{
2001-11-27 17:15:20 +00:00
INetURLObject aObj ( aName ) ;
if ( aObj . GetProtocol ( ) = = INET_PROT_PRIVATE )
aTarget = : : rtl : : OUString ( DEFINE_CONST_UNICODE ( " _blank " ) ) ;
2004-03-09 10:07:00 +00:00
try {
xDoc = Reference < XPrintable > ( xDesktop - > loadComponentFromURL ( aName , aTarget , 0 , aArgs ) , UNO_QUERY ) ;
}
catch ( : : com : : sun : : star : : lang : : IllegalArgumentException & iae )
{
OUString aMsg = OUString : : createFromAscii (
" handle app event IllegalArgumentException while calling loadComponentFromURL: " )
+ iae . Message ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMsg , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
catch ( com : : sun : : star : : io : : IOException & ioe )
{
OUString aMsg = OUString : : createFromAscii (
" handle app event IOException while calling loadComponentFromURL: " )
+ ioe . Message ;
OSL_ENSURE ( sal_False , OUStringToOString ( aMsg , RTL_TEXTENCODING_ASCII_US ) . getStr ( ) ) ;
}
2001-11-21 15:31:29 +00:00
if ( ! xDoc . is ( ) )
{
// error case
2002-05-24 10:24:34 +00:00
Reference < XFramesSupplier > xTasksSupplier ( xDesktop , UNO_QUERY ) ;
Reference < XElementAccess > xList ( xTasksSupplier - > getFrames ( ) , UNO_QUERY ) ;
2001-11-21 15:31:29 +00:00
2002-05-24 10:24:34 +00:00
if ( ! xList - > hasElements ( ) )
2001-11-21 15:31:29 +00:00
{
// We don't have any task open so we have to shutdown ourself!!
Reference < XDesktop > xDesktop ( xTasksSupplier , UNO_QUERY ) ;
if ( xDesktop . is ( ) )
xDesktop - > terminate ( ) ;
return ;
}
}
2001-08-02 12:34:32 +00:00
}
2001-07-16 11:55:47 +00:00
if ( rAppEvent . IsPrintEvent ( ) )
{
2001-07-20 08:52:29 +00:00
if ( xDoc . is ( ) )
2001-07-16 11:55:47 +00:00
{
2001-07-20 08:52:29 +00:00
if ( aPrinterName . Len ( ) )
{
// create the printer
Sequence < PropertyValue > aPrinterArgs ( 1 ) ;
aPrinterArgs [ 0 ] . Name = : : rtl : : OUString : : createFromAscii ( " Name " ) ;
aPrinterArgs [ 0 ] . Value < < = : : rtl : : OUString ( aPrinterName ) ;
xDoc - > setPrinter ( aPrinterArgs ) ;
}
2001-07-16 11:55:47 +00:00
// print ( also without user interaction )
2001-07-20 08:52:29 +00:00
Sequence < PropertyValue > aPrinterArgs ( 1 ) ;
2001-07-16 11:55:47 +00:00
aPrinterArgs [ 0 ] . Name = : : rtl : : OUString : : createFromAscii ( " Silent " ) ;
aPrinterArgs [ 0 ] . Value < < = ( sal_Bool ) sal_True ;
xDoc - > print ( aPrinterArgs ) ;
}
else
{
// place error message here ...
}
// remove the document
Reference < XComponent > xComp ( xDoc , UNO_QUERY ) ;
if ( xComp . is ( ) )
xComp - > dispose ( ) ;
}
}
2001-07-27 10:12:55 +00:00
// remove this pending request
OfficeIPCThread : : RequestsCompleted ( 1 ) ;
2001-07-16 11:55:47 +00:00
}
2002-07-10 05:57:45 +00:00
else if ( rAppEvent . GetEvent ( ) = = " APPEAR " & & ! GetCommandLineArgs ( ) - > IsInvisible ( ) )
2001-07-16 11:55:47 +00:00
{
// find active task - the active task is always a visible task
2002-05-24 10:24:34 +00:00
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : frame : : XFramesSupplier >
2001-07-16 11:55:47 +00:00
xDesktop ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance ( OUSTRING ( RTL_CONSTASCII_USTRINGPARAM ( " com.sun.star.frame.Desktop " ) ) ) ,
: : com : : sun : : star : : uno : : UNO_QUERY ) ;
2002-05-24 10:24:34 +00:00
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : frame : : XFrame > xTask = xDesktop - > getActiveFrame ( ) ;
2001-07-16 11:55:47 +00:00
if ( ! xTask . is ( ) )
{
// get any task if there is no active one
2002-05-24 10:24:34 +00:00
: : com : : sun : : star : : uno : : Reference < : : com : : sun : : star : : container : : XIndexAccess > xList ( xDesktop - > getFrames ( ) , : : com : : sun : : star : : uno : : UNO_QUERY ) ;
if ( xList - > getCount ( ) > 0 )
xList - > getByIndex ( 0 ) > > = xTask ;
2001-07-16 11:55:47 +00:00
}
if ( xTask . is ( ) )
{
Reference < com : : sun : : star : : awt : : XTopWindow > xTop ( xTask - > getContainerWindow ( ) , UNO_QUERY ) ;
xTop - > toFront ( ) ;
}
else
// no visible task that could be activated found
OpenDefault ( ) ;
}
2003-03-25 12:52:54 +00:00
else if ( rAppEvent . GetEvent ( ) = = " QUICKSTART " & & ! GetCommandLineArgs ( ) - > IsInvisible ( ) )
2001-07-20 08:52:29 +00:00
{
2002-07-10 05:57:45 +00:00
// If the office has been started the second time its command line arguments are sent through a pipe
// connection to the first office. We want to reuse the quickstart option for the first office.
// NOTICE: The quickstart service must be initialized inside the "main thread", so we use the
// application events to do this (they are executed inside main thread)!!!
// Don't start quickstart service if the user specified "-invisible" on the command line!
sal_Bool bQuickstart ( sal_True ) ;
Sequence < Any > aSeq ( 1 ) ;
aSeq [ 0 ] < < = bQuickstart ;
2001-07-20 08:52:29 +00:00
2002-07-10 05:57:45 +00:00
Reference < XInitialization > xQuickstart ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance (
2003-03-25 12:52:54 +00:00
DEFINE_CONST_UNICODE ( " com.sun.star.office.Quickstart " ) ) ,
UNO_QUERY ) ;
2002-07-10 05:57:45 +00:00
if ( xQuickstart . is ( ) )
xQuickstart - > initialize ( aSeq ) ;
2001-07-20 08:52:29 +00:00
}
2003-03-25 12:52:54 +00:00
else if ( rAppEvent . GetEvent ( ) = = " ACCEPT " )
{
// every time an accept parameter is used we create an acceptor
// with the corresponding accept-string
OUString aAcceptString ( rAppEvent . GetData ( ) . GetBuffer ( ) ) ;
createAcceptor ( aAcceptString ) ;
}
else if ( rAppEvent . GetEvent ( ) = = " UNACCEPT " )
{
// try to remove corresponding acceptor
OUString aUnAcceptString ( rAppEvent . GetData ( ) . GetBuffer ( ) ) ;
destroyAcceptor ( aUnAcceptString ) ;
}
2003-06-10 13:37:31 +00:00
else if ( rAppEvent . GetEvent ( ) = = " SaveDocuments " )
{
2003-07-22 07:26:21 +00:00
Desktop : : _bTasksSaved = sal_False ;
Desktop : : _bTasksSaved = SaveTasks ( DESKTOP_SAVETASKS_ALL ) ;
2003-06-10 13:37:31 +00:00
// SaveTasks(DESKTOP_SAVETASKS_MOD);
}
2003-06-27 08:42:13 +00:00
else if ( rAppEvent . GetEvent ( ) = = " OPENHELPURL " )
{
// start help for a specific URL
OUString aHelpURL ( rAppEvent . GetData ( ) . GetBuffer ( ) ) ;
Help * pHelp = Application : : GetHelp ( ) ;
pHelp - > Start ( aHelpURL , NULL ) ;
}
2003-03-25 12:52:54 +00:00
# ifndef UNX
else if ( rAppEvent . GetEvent ( ) = = " HELP " )
{
// in non unix version allow showing of cmdline help window
displayCmdlineHelp ( ) ;
}
# endif
2001-07-16 11:55:47 +00:00
}
2003-04-04 16:22:32 +00:00
void Desktop : : OpenSplashScreen ( )
2001-07-06 14:58:45 +00:00
{
2003-06-27 08:42:13 +00:00
: : rtl : : OUString aTmpString ;
2001-07-24 09:24:30 +00:00
CommandLineArgs * pCmdLine = GetCommandLineArgs ( ) ;
2003-03-25 12:52:54 +00:00
sal_Bool bVisible = sal_False ;
2001-07-24 09:24:30 +00:00
// Show intro only if this is normal start (e.g. no server, no quickstart, no printing )
2004-01-06 17:37:50 +00:00
if ( ! pCmdLine - > IsInvisible ( ) & &
2001-07-24 09:24:30 +00:00
! pCmdLine - > IsQuickstart ( ) & &
! pCmdLine - > IsMinimized ( ) & &
2002-07-09 04:21:23 +00:00
! pCmdLine - > IsNoLogo ( ) & &
2001-07-30 14:31:59 +00:00
! pCmdLine - > IsTerminateAfterInit ( ) & &
2001-12-04 15:05:32 +00:00
! pCmdLine - > GetPrintList ( aTmpString ) & &
! pCmdLine - > GetPrintToList ( aTmpString ) )
2001-07-06 14:58:45 +00:00
{
2003-03-25 12:52:54 +00:00
bVisible = sal_True ;
2003-04-04 16:22:32 +00:00
Sequence < Any > aSeq ( 1 ) ;
aSeq [ 0 ] < < = bVisible ;
m_rSplashScreen = Reference < XStatusIndicator > (
comphelper : : getProcessServiceFactory ( ) - > createInstanceWithArguments (
OUString : : createFromAscii ( " com.sun.star.office.SplashScreen " ) ,
aSeq ) , UNO_QUERY ) ;
if ( m_rSplashScreen . is ( ) )
m_rSplashScreen - > start ( OUString : : createFromAscii ( " SplashScreen " ) , 100 ) ;
}
}
void Desktop : : SetSplashScreenProgress ( sal_Int32 iProgress )
{
if ( m_rSplashScreen . is ( ) )
{
m_rSplashScreen - > setValue ( iProgress ) ;
}
}
void Desktop : : CloseSplashScreen ( )
{
if ( m_rSplashScreen . is ( ) )
{
m_rSplashScreen - > end ( ) ;
m_rSplashScreen = NULL ;
2001-07-06 14:58:45 +00:00
}
}
2001-08-01 11:16:42 +00:00
// ========================================================================
void Desktop : : DoFirstRunInitializations ( )
{
2001-12-05 12:33:54 +00:00
try
{
Reference < XJobExecutor > xExecutor ( : : comphelper : : getProcessServiceFactory ( ) - > createInstance ( : : rtl : : OUString : : createFromAscii ( " com.sun.star.task.JobExecutor " ) ) , UNO_QUERY ) ;
if ( xExecutor . is ( ) )
xExecutor - > trigger ( : : rtl : : OUString : : createFromAscii ( " onFirstRunInitialization " ) ) ;
}
catch ( const : : com : : sun : : star : : uno : : Exception & )
{
OSL_ENSURE ( sal_False , " Desktop::DoFirstRunInitializations: caught an exception while trigger job executor ... " ) ;
2001-08-01 11:16:42 +00:00
}
}
// ========================================================================
void Desktop : : CheckFirstRun ( )
{
const : : rtl : : OUString sCommonMiscNodeName = : : rtl : : OUString : : createFromAscii ( " /org.openoffice.Office.Common/Misc " ) ;
const : : rtl : : OUString sFirstRunNodeName = : : rtl : : OUString : : createFromAscii ( " FirstRun " ) ;
// --------------------------------------------------------------------
// check if this is the first office start
// for this, open the Common/Misc node where this info is stored
: : utl : : OConfigurationTreeRoot aCommonMisc = : : utl : : OConfigurationTreeRoot : : createWithServiceFactory (
: : comphelper : : getProcessServiceFactory ( ) ,
sCommonMiscNodeName ,
2 ,
: : utl : : OConfigurationTreeRoot : : CM_UPDATABLE
) ;
// read the flag
OSL_ENSURE ( aCommonMisc . isValid ( ) , " Desktop::CheckFirstRun: could not open the config node needed! " ) ;
sal_Bool bIsFirstRun = sal_False ;
aCommonMisc . getNodeValue ( sFirstRunNodeName ) > > = bIsFirstRun ;
if ( ! bIsFirstRun )
// nothing to do ....
return ;
// --------------------------------------------------------------------
// it is the first run
2003-03-25 12:52:54 +00:00
// this has once been done using a vos timer. this could lead to problems when
// the timer would trigger when the app is already going down again, since VCL would
// no longer be available. Since the old handler would do a postUserEvent to the main
// thread anyway, we can use a vcl timer here to prevent the race contition (#107197#)
m_firstRunTimer . SetTimeout ( 3000 ) ; // 3 sec.
m_firstRunTimer . SetTimeoutHdl ( LINK ( this , Desktop , AsyncInitFirstRun ) ) ;
m_firstRunTimer . Start ( ) ;
2001-08-01 11:16:42 +00:00
// --------------------------------------------------------------------
// reset the config flag
// set the value
aCommonMisc . setNodeValue ( sFirstRunNodeName , makeAny ( ( sal_Bool ) sal_False ) ) ;
// commit the changes
aCommonMisc . commit ( ) ;
}
2002-11-01 13:49:58 +00:00
2003-03-25 12:52:54 +00:00
}