diff --git a/main/sfx2/source/appl/shutdownicon.cxx b/main/sfx2/source/appl/shutdownicon.cxx index 537e19e..2e8c6f1 100644 --- a/main/sfx2/source/appl/shutdownicon.cxx +++ b/main/sfx2/source/appl/shutdownicon.cxx @@ -190,6 +190,15 @@ bool ShutdownIcon::LoadModule( osl::Module **pModule, return true; } + +struct TerminateHdlData +{ + Reference< XDesktop > mxDesktop; + TerminateHdlData( const Reference< XDesktop > &xDesktop ) + : mxDesktop( xDesktop ) {} +}; + + class IdleUnloader : Timer { ::osl::Module *m_pModule; @@ -584,10 +593,9 @@ void ShutdownIcon::terminateDesktop() if ( xSupplier.is() ) { Reference< XIndexAccess > xTasks ( xSupplier->getFrames(), UNO_QUERY ); - if( xTasks.is() ) + if( xTasks.is() && xTasks->getCount() < 1 ) { - if( xTasks->getCount() < 1 ) - xDesktop->terminate(); + Application::PostUserEvent( STATIC_LINK(0, ShutdownIcon, TerminateHdl_Impl), new TerminateHdlData( xDesktop ) ); } } @@ -595,6 +603,17 @@ void ShutdownIcon::terminateDesktop() ShutdownIcon::pShutdownIcon = 0; } + +IMPL_STATIC_LINK_NOINSTANCE( ShutdownIcon, TerminateHdl_Impl, TerminateHdlData*, pData ) +{ + if ( pData->mxDesktop.is() ) + pData->mxDesktop->terminate(); + delete pData; + return 0; +} + + + // --------------------------------------------------------------------------- ShutdownIcon* ShutdownIcon::getInstance() diff --git a/main/sfx2/source/appl/shutdownicon.hxx b/main/sfx2/source/appl/shutdownicon.hxx index 2d9c305..b3d0f3f 100644 --- a/main/sfx2/source/appl/shutdownicon.hxx +++ b/main/sfx2/source/appl/shutdownicon.hxx @@ -44,7 +44,9 @@ #include #include #include +#include +struct TerminateHdlData; class ResMgr; namespace sfx2 { @@ -102,6 +104,8 @@ class SFX2_DLLPUBLIC ShutdownIcon : public ShutdownIconServiceBase virtual ~ShutdownIcon(); + DECL_STATIC_LINK( ShutdownIcon, TerminateHdl_Impl, TerminateHdlData* ); + SFX_DECL_XSERVICEINFO static ShutdownIcon* getInstance(); diff --git a/main/sfx2/source/appl/shutdowniconunx.cxx b/main/sfx2/source/appl/shutdowniconunx.cxx index 8d61ea1..1a1d943 100644 --- a/main/sfx2/source/appl/shutdowniconunx.cxx +++ b/main/sfx2/source/appl/shutdowniconunx.cxx @@ -87,8 +87,8 @@ static void systray_disable_cb() static void exit_quickstarter_cb( GtkWidget * ) { - ShutdownIcon::getInstance()->terminateDesktop(); plugin_shutdown_sys_tray(); + ShutdownIcon::getInstance()->terminateDesktop(); } static void menu_deactivate_cb( GtkWidget *pMenu )