Kaydet (Commit) 7de1caa8 authored tarafından Ariel Constenla-Haile's avatar Ariel Constenla-Haile

i120095 - Asynchronous Desktop termination

üst 880aadbe
......@@ -190,6 +190,15 @@ bool ShutdownIcon::LoadModule( osl::Module **pModule,
return true;
}
struct AsyncDesktopTerminationData
{
Reference< XDesktop > mxDesktop;
AsyncDesktopTerminationData( const Reference< XDesktop > &xDesktop )
: mxDesktop( xDesktop ) {}
};
class IdleUnloader : Timer
{
::osl::Module *m_pModule;
......@@ -584,10 +593,11 @@ 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();
AsyncDesktopTerminationData * pData = new AsyncDesktopTerminationData( xDesktop );
if ( !Application::PostUserEvent( STATIC_LINK( 0, ShutdownIcon, AsyncDesktopTermination ), pData ) )
delete pData;
}
}
......@@ -595,6 +605,17 @@ void ShutdownIcon::terminateDesktop()
ShutdownIcon::pShutdownIcon = 0;
}
IMPL_STATIC_LINK_NOINSTANCE( ShutdownIcon, AsyncDesktopTermination, AsyncDesktopTerminationData*, pData )
{
if ( pData && pData->mxDesktop.is() )
pData->mxDesktop->terminate();
delete pData;
return 0;
}
// ---------------------------------------------------------------------------
ShutdownIcon* ShutdownIcon::getInstance()
......
......@@ -44,7 +44,9 @@
#include <sfx2/sfxuno.hxx>
#include <cppuhelper/compbase4.hxx>
#include <sfx2/dllapi.h>
#include <tools/link.hxx>
struct AsyncDesktopTerminationData;
class ResMgr;
namespace sfx2
{
......@@ -102,6 +104,8 @@ class SFX2_DLLPUBLIC ShutdownIcon : public ShutdownIconServiceBase
virtual ~ShutdownIcon();
DECL_STATIC_LINK( ShutdownIcon, AsyncDesktopTermination, AsyncDesktopTerminationData* );
SFX_DECL_XSERVICEINFO
static ShutdownIcon* getInstance();
......
......@@ -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 )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment