1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _DESKTOP_APP_HXX_ 25*b1cdbd2cSJim Jagielski #define _DESKTOP_APP_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski // stl includes first 28*b1cdbd2cSJim Jagielski #include <map> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp> 30*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx> 31*b1cdbd2cSJim Jagielski #ifndef _VCL_TIMER_HXX_ 32*b1cdbd2cSJim Jagielski #include <vcl/timer.hxx> 33*b1cdbd2cSJim Jagielski #endif 34*b1cdbd2cSJim Jagielski #include <tools/resmgr.hxx> 35*b1cdbd2cSJim Jagielski #include <unotools/bootstrap.hxx> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XStatusIndicator.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.h> 39*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx> 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski using namespace com::sun::star::task; 42*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno; 43*b1cdbd2cSJim Jagielski using namespace com::sun::star::lang; 44*b1cdbd2cSJim Jagielski using namespace rtl; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski #define DESKTOP_SAVETASKS_MOD 0x1 47*b1cdbd2cSJim Jagielski #define DESKTOP_SAVETASKS_UNMOD 0x2 48*b1cdbd2cSJim Jagielski #define DESKTOP_SAVETASKS_ALL 0x3 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski namespace desktop 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski /*-------------------------------------------------------------------- 54*b1cdbd2cSJim Jagielski Description: Application-class 55*b1cdbd2cSJim Jagielski --------------------------------------------------------------------*/ 56*b1cdbd2cSJim Jagielski class CommandLineArgs; 57*b1cdbd2cSJim Jagielski class Lockfile; 58*b1cdbd2cSJim Jagielski class AcceptorMap : public std::map< OUString, Reference<XInitialization> > {}; 59*b1cdbd2cSJim Jagielski struct ConvertData; 60*b1cdbd2cSJim Jagielski class Desktop : public Application 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski friend class UserInstall; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski void doShutdown(); 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski public: 67*b1cdbd2cSJim Jagielski enum BootstrapError 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski BE_OK, 70*b1cdbd2cSJim Jagielski BE_UNO_SERVICEMANAGER, 71*b1cdbd2cSJim Jagielski BE_UNO_SERVICE_CONFIG_MISSING, 72*b1cdbd2cSJim Jagielski BE_PATHINFO_MISSING, 73*b1cdbd2cSJim Jagielski BE_USERINSTALL_FAILED, 74*b1cdbd2cSJim Jagielski BE_LANGUAGE_MISSING, 75*b1cdbd2cSJim Jagielski BE_USERINSTALL_NOTENOUGHDISKSPACE, 76*b1cdbd2cSJim Jagielski BE_USERINSTALL_NOWRITEACCESS, 77*b1cdbd2cSJim Jagielski BE_MUTLISESSION_NOT_SUPPROTED, 78*b1cdbd2cSJim Jagielski BE_OFFICECONFIG_BROKEN 79*b1cdbd2cSJim Jagielski }; 80*b1cdbd2cSJim Jagielski enum BootstrapStatus 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski BS_OK, 83*b1cdbd2cSJim Jagielski BS_TERMINATE 84*b1cdbd2cSJim Jagielski }; 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski Desktop(); 87*b1cdbd2cSJim Jagielski ~Desktop(); 88*b1cdbd2cSJim Jagielski virtual void Main( ); 89*b1cdbd2cSJim Jagielski virtual void Init(); 90*b1cdbd2cSJim Jagielski virtual void DeInit(); 91*b1cdbd2cSJim Jagielski virtual sal_Bool QueryExit(); 92*b1cdbd2cSJim Jagielski virtual sal_uInt16 Exception(sal_uInt16 nError); 93*b1cdbd2cSJim Jagielski virtual void SystemSettingsChanging( AllSettings& rSettings, Window* pFrame ); 94*b1cdbd2cSJim Jagielski virtual void AppEvent( const ApplicationEvent& rAppEvent ); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski DECL_LINK( OpenClients_Impl, void* ); 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski static void OpenClients(); 99*b1cdbd2cSJim Jagielski static void OpenDefault(); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski DECL_LINK( EnableAcceptors_Impl, void*); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski static void HandleAppEvent( const ApplicationEvent& rAppEvent ); 104*b1cdbd2cSJim Jagielski static ResMgr* GetDesktopResManager(); 105*b1cdbd2cSJim Jagielski static CommandLineArgs* GetCommandLineArgs(); 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski void HandleBootstrapErrors( BootstrapError ); SetBootstrapError(BootstrapError nError)108*b1cdbd2cSJim Jagielski void SetBootstrapError( BootstrapError nError ) 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski if ( m_aBootstrapError == BE_OK ) 111*b1cdbd2cSJim Jagielski m_aBootstrapError = nError; 112*b1cdbd2cSJim Jagielski } GetBootstrapError() const113*b1cdbd2cSJim Jagielski BootstrapError GetBootstrapError() const 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski return m_aBootstrapError; 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski SetBootstrapStatus(BootstrapStatus nStatus)118*b1cdbd2cSJim Jagielski void SetBootstrapStatus( BootstrapStatus nStatus ) 119*b1cdbd2cSJim Jagielski { 120*b1cdbd2cSJim Jagielski m_aBootstrapStatus = nStatus; 121*b1cdbd2cSJim Jagielski } GetBootstrapStatus() const122*b1cdbd2cSJim Jagielski BootstrapStatus GetBootstrapStatus() const 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski return m_aBootstrapStatus; 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski static sal_Bool CheckOEM(); 128*b1cdbd2cSJim Jagielski static sal_Bool isCrashReporterEnabled(); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski // first-start (ever) & license relate methods 131*b1cdbd2cSJim Jagielski static rtl::OUString GetLicensePath(); 132*b1cdbd2cSJim Jagielski static sal_Bool LicenseNeedsAcceptance(); 133*b1cdbd2cSJim Jagielski static sal_Bool IsFirstStartWizardNeeded(); 134*b1cdbd2cSJim Jagielski static sal_Bool CheckExtensionDependencies(); 135*b1cdbd2cSJim Jagielski static void EnableQuickstart(); 136*b1cdbd2cSJim Jagielski static void FinishFirstStart(); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski static void DoRestartActionsIfNecessary( sal_Bool bQuickStart ); 139*b1cdbd2cSJim Jagielski static void SetRestartState(); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski void SynchronizeExtensionRepositories(); 142*b1cdbd2cSJim Jagielski void SetSplashScreenText( const ::rtl::OUString& rText ); 143*b1cdbd2cSJim Jagielski void SetSplashScreenProgress( sal_Int32 ); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski private: 146*b1cdbd2cSJim Jagielski // Bootstrap methods 147*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager(); 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski void RegisterServices( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); 150*b1cdbd2cSJim Jagielski void DeregisterServices(); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski void DestroyApplicationServiceManager( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xSMgr ); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski void CreateTemporaryDirectory(); 155*b1cdbd2cSJim Jagielski void RemoveTemporaryDirectory(); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski sal_Bool InitializeInstallation( const rtl::OUString& rAppFilename ); 158*b1cdbd2cSJim Jagielski sal_Bool InitializeConfiguration(); 159*b1cdbd2cSJim Jagielski void FlushConfiguration(); 160*b1cdbd2cSJim Jagielski sal_Bool InitializeQuickstartMode( com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rSMgr ); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski void HandleBootstrapPathErrors( ::utl::Bootstrap::Status, const ::rtl::OUString& aMsg ); 163*b1cdbd2cSJim Jagielski void StartSetup( const ::rtl::OUString& aParameters ); 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski // Get a resource message string securely e.g. if resource cannot be retrieved return aFaultBackMsg 166*b1cdbd2cSJim Jagielski ::rtl::OUString GetMsgString( sal_uInt16 nId, const ::rtl::OUString& aFaultBackMsg ); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski // Create a error message depending on bootstrap failure code and an optional file url 169*b1cdbd2cSJim Jagielski ::rtl::OUString CreateErrorMsgString( utl::Bootstrap::FailureCode nFailureCode, 170*b1cdbd2cSJim Jagielski const ::rtl::OUString& aFileURL ); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski static void PreloadModuleData( CommandLineArgs* ); 173*b1cdbd2cSJim Jagielski static void PreloadConfigurationData(); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski Reference<XStatusIndicator> m_rSplashScreen; 176*b1cdbd2cSJim Jagielski void OpenSplashScreen(); 177*b1cdbd2cSJim Jagielski void CloseSplashScreen(); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski void EnableOleAutomation(); 180*b1cdbd2cSJim Jagielski DECL_LINK( ImplInitFilterHdl, ConvertData* ); 181*b1cdbd2cSJim Jagielski DECL_LINK( AsyncInitFirstRun, void* ); 182*b1cdbd2cSJim Jagielski /** checks if the office is run the first time 183*b1cdbd2cSJim Jagielski <p>If so, <method>DoFirstRunInitializations</method> is called (asynchronously and delayed) and the 184*b1cdbd2cSJim Jagielski respective flag in the configuration is reset.</p> 185*b1cdbd2cSJim Jagielski */ 186*b1cdbd2cSJim Jagielski void CheckFirstRun( ); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski /// does initializations which are necessary for the first run of the office 189*b1cdbd2cSJim Jagielski void DoFirstRunInitializations(); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski static sal_Bool SaveTasks(); 192*b1cdbd2cSJim Jagielski static sal_Bool _bTasksSaved; 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski static void retrieveCrashReporterState(); 195*b1cdbd2cSJim Jagielski static sal_Bool isUIOnSessionShutdownAllowed(); 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski // on-demand acceptors 198*b1cdbd2cSJim Jagielski static void createAcceptor(const OUString& aDescription); 199*b1cdbd2cSJim Jagielski static void enableAcceptors(); 200*b1cdbd2cSJim Jagielski static void destroyAcceptor(const OUString& aDescription); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski sal_Bool m_bMinimized; 203*b1cdbd2cSJim Jagielski sal_Bool m_bInvisible; 204*b1cdbd2cSJim Jagielski bool m_bServicesRegistered; 205*b1cdbd2cSJim Jagielski sal_uInt16 m_nAppEvents; 206*b1cdbd2cSJim Jagielski BootstrapError m_aBootstrapError; 207*b1cdbd2cSJim Jagielski BootstrapStatus m_aBootstrapStatus; 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski Lockfile *m_pLockfile; 210*b1cdbd2cSJim Jagielski Timer m_firstRunTimer; 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski static ResMgr* pResMgr; 213*b1cdbd2cSJim Jagielski static sal_Bool bSuppressOpenDefault; 214*b1cdbd2cSJim Jagielski }; 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski #endif // _DESKTOP_APP_HXX_ 219