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, ...@@ -190,6 +190,15 @@ bool ShutdownIcon::LoadModule( osl::Module **pModule,
return true; return true;
} }
struct AsyncDesktopTerminationData
{
Reference< XDesktop > mxDesktop;
AsyncDesktopTerminationData( const Reference< XDesktop > &xDesktop )
: mxDesktop( xDesktop ) {}
};
class IdleUnloader : Timer class IdleUnloader : Timer
{ {
::osl::Module *m_pModule; ::osl::Module *m_pModule;
...@@ -584,10 +593,11 @@ void ShutdownIcon::terminateDesktop() ...@@ -584,10 +593,11 @@ void ShutdownIcon::terminateDesktop()
if ( xSupplier.is() ) if ( xSupplier.is() )
{ {
Reference< XIndexAccess > xTasks ( xSupplier->getFrames(), UNO_QUERY ); Reference< XIndexAccess > xTasks ( xSupplier->getFrames(), UNO_QUERY );
if( xTasks.is() ) if( xTasks.is() && xTasks->getCount() < 1 )
{ {
if( xTasks->getCount() < 1 ) AsyncDesktopTerminationData * pData = new AsyncDesktopTerminationData( xDesktop );
xDesktop->terminate(); if ( !Application::PostUserEvent( STATIC_LINK( 0, ShutdownIcon, AsyncDesktopTermination ), pData ) )
delete pData;
} }
} }
...@@ -595,6 +605,17 @@ void ShutdownIcon::terminateDesktop() ...@@ -595,6 +605,17 @@ void ShutdownIcon::terminateDesktop()
ShutdownIcon::pShutdownIcon = 0; 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() ShutdownIcon* ShutdownIcon::getInstance()
......
...@@ -44,7 +44,9 @@ ...@@ -44,7 +44,9 @@
#include <sfx2/sfxuno.hxx> #include <sfx2/sfxuno.hxx>
#include <cppuhelper/compbase4.hxx> #include <cppuhelper/compbase4.hxx>
#include <sfx2/dllapi.h> #include <sfx2/dllapi.h>
#include <tools/link.hxx>
struct AsyncDesktopTerminationData;
class ResMgr; class ResMgr;
namespace sfx2 namespace sfx2
{ {
...@@ -102,6 +104,8 @@ class SFX2_DLLPUBLIC ShutdownIcon : public ShutdownIconServiceBase ...@@ -102,6 +104,8 @@ class SFX2_DLLPUBLIC ShutdownIcon : public ShutdownIconServiceBase
virtual ~ShutdownIcon(); virtual ~ShutdownIcon();
DECL_STATIC_LINK( ShutdownIcon, AsyncDesktopTermination, AsyncDesktopTerminationData* );
SFX_DECL_XSERVICEINFO SFX_DECL_XSERVICEINFO
static ShutdownIcon* getInstance(); static ShutdownIcon* getInstance();
......
...@@ -87,8 +87,8 @@ static void systray_disable_cb() ...@@ -87,8 +87,8 @@ static void systray_disable_cb()
static void exit_quickstarter_cb( GtkWidget * ) static void exit_quickstarter_cb( GtkWidget * )
{ {
ShutdownIcon::getInstance()->terminateDesktop();
plugin_shutdown_sys_tray(); plugin_shutdown_sys_tray();
ShutdownIcon::getInstance()->terminateDesktop();
} }
static void menu_deactivate_cb( GtkWidget *pMenu ) 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