diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-08-07 00:29:46 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-08-08 13:04:45 +0100 |
commit | 4cab499c00e9183a3c5be758b56725529c2bde50 (patch) | |
tree | 00566d665826a82f8a04f4d934196d1d293288a5 /desktop | |
parent | a1316a5d3a2446a4271717b0c3ea54699349158c (diff) |
explicitly call XDesktop::terminate on early "restart" exit
Too many things create an XDesktop and too many things depend on it explicitly
having terminate called on it to allow the office on early-restart after
updating extensions to exit without config items etc not getting flushed.
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/app/app.cxx | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index ad3f0ba6d9bb..9f3ac9e968cc 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -1605,6 +1605,7 @@ int Desktop::Main() Reference< XMultiServiceFactory > xSMgr = ::comphelper::getProcessServiceFactory(); + Reference< XDesktop > xDesktop; Reference< ::com::sun::star::task::XRestartManager > xRestartManager; try { @@ -1698,6 +1699,9 @@ int Desktop::Main() SvtPathOptions().SetWorkPath( aWorkPath ); } + xDesktop = Reference<XDesktop>( xSMgr->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY ); + // create service for loadin SFX (still needed in startup) pExecGlobals->xGlobalBroadcaster = Reference < css::document::XEventListener > ( xSMgr->createInstance( @@ -1781,7 +1785,7 @@ int Desktop::Main() (!Application::AnyInput( INPUT_APPEVENT ) )) { RTL_LOGFILE_CONTEXT_TRACE( aLog, "{ create BackingComponent" ); - Reference< XFrame > xDesktopFrame( xSMgr->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY ); + Reference< XFrame > xDesktopFrame( xDesktop, UNO_QUERY ); if (xDesktopFrame.is()) { SetSplashScreenProgress(60); @@ -1861,8 +1865,6 @@ int Desktop::Main() RTL_LOGFILE_CONTEXT( aLog2, "desktop (cd100003) createInstance com.sun.star.frame.Desktop" ); try { - 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); @@ -1923,6 +1925,11 @@ int Desktop::Main() FatalError( MakeStartupErrorMessage(exAnyCfg.Message) ); } } + else + { + if (xDesktop.is()) + xDesktop->terminate(); + } // CAUTION: you do not necessarily get here e.g. on the Mac. // please put all deinitialization code into doShutdown return doShutdown(); |