parent
a0dc8e17e9
commit
a610ba3af2
@ -0,0 +1,51 @@
|
|||||||
|
@@ -, +, @@
|
||||||
|
fix crash in exiting via disabling lone quick-starter, terminate at idle
|
||||||
|
--- a/sfx2/source/appl/shutdownicon.cxx
|
||||||
|
+++ a/sfx2/source/appl/shutdownicon.cxx
|
||||||
|
@@ -182,6 +182,9 @@ bool ShutdownIcon::LoadModule( osl::Module **pModule,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// These two timeouts are necessary to avoid there being
|
||||||
|
+// plugin frames still on the stack, after unloading that
|
||||||
|
+// code, causing a crash during disabling / termination.
|
||||||
|
class IdleUnloader : Timer
|
||||||
|
{
|
||||||
|
::osl::Module *m_pModule;
|
||||||
|
@@ -199,6 +202,22 @@ public:
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
+class IdleTerminate : Timer
|
||||||
|
+{
|
||||||
|
+ Reference< XDesktop > m_xDesktop;
|
||||||
|
+public:
|
||||||
|
+ IdleTerminate (Reference< XDesktop > xDesktop)
|
||||||
|
+ {
|
||||||
|
+ m_xDesktop = xDesktop;
|
||||||
|
+ Start();
|
||||||
|
+ }
|
||||||
|
+ virtual void Timeout()
|
||||||
|
+ {
|
||||||
|
+ m_xDesktop->terminate();
|
||||||
|
+ delete this;
|
||||||
|
+ }
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
void ShutdownIcon::initSystray()
|
||||||
|
{
|
||||||
|
if (m_bInitialized)
|
||||||
|
@@ -576,11 +595,8 @@ void ShutdownIcon::terminateDesktop()
|
||||||
|
if ( xSupplier.is() )
|
||||||
|
{
|
||||||
|
Reference< XIndexAccess > xTasks ( xSupplier->getFrames(), UNO_QUERY );
|
||||||
|
- if( xTasks.is() )
|
||||||
|
- {
|
||||||
|
- if( xTasks->getCount() < 1 )
|
||||||
|
- xDesktop->terminate();
|
||||||
|
- }
|
||||||
|
+ if( xTasks.is() && xTasks->getCount() < 1 )
|
||||||
|
+ new IdleTerminate( xDesktop );
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove the instance pointer
|
Loading…
Reference in new issue