Kaydet (Commit) 5279616d authored tarafından Bjoern Michaelsen's avatar Bjoern Michaelsen

lp#562027: fix logout with quickstarter

üst 478485d1
...@@ -339,6 +339,10 @@ class Desktop : // interfaces ...@@ -339,6 +339,10 @@ class Desktop : // interfaces
virtual ::rtl::OUString SAL_CALL getUntitledPrefix() virtual ::rtl::OUString SAL_CALL getUntitledPrefix()
throw (css::uno::RuntimeException); throw (css::uno::RuntimeException);
// we need this wrapped terminate()-call to terminate even the QuickStarter
// non-virtual and non-UNO for now
bool SAL_CALL terminateQuickstarterToo()
throw( css::uno::RuntimeException );
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
// protected methods // protected methods
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
......
...@@ -401,6 +401,36 @@ sal_Bool SAL_CALL Desktop::terminate() ...@@ -401,6 +401,36 @@ sal_Bool SAL_CALL Desktop::terminate()
return bTerminate; return bTerminate;
} }
namespace
{
class QuickstartSuppressor
{
Desktop* const m_pDesktop;
css::uno::Reference< css::frame::XTerminateListener > m_xQuickLauncher;
public:
QuickstartSuppressor(Desktop* const pDesktop, css::uno::Reference< css::frame::XTerminateListener > xQuickLauncher)
: m_pDesktop(pDesktop)
, m_xQuickLauncher(xQuickLauncher)
{
SAL_INFO("fwk.desktop", "temporary removing Quickstarter");
if(m_xQuickLauncher.is())
m_pDesktop->removeTerminateListener(m_xQuickLauncher);
}
~QuickstartSuppressor()
{
SAL_INFO("fwk.desktop", "readding Quickstarter");
if(m_xQuickLauncher.is())
m_pDesktop->addTerminateListener(m_xQuickLauncher);
}
};
}
bool SAL_CALL Desktop::terminateQuickstarterToo()
throw( css::uno::RuntimeException )
{
QuickstartSuppressor(this, m_xQuickLauncher);
return terminate();
}
//============================================================================= //=============================================================================
void SAL_CALL Desktop::addTerminateListener( const css::uno::Reference< css::frame::XTerminateListener >& xListener ) void SAL_CALL Desktop::addTerminateListener( const css::uno::Reference< css::frame::XTerminateListener >& xListener )
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
// my own includes // my own includes
#include <services/sessionlistener.hxx> #include <services/sessionlistener.hxx>
#include <services/desktop.hxx>
#include <threadhelp/readguard.hxx> #include <threadhelp/readguard.hxx>
#include <threadhelp/resetableguard.hxx> #include <threadhelp/resetableguard.hxx>
#include <protocols.h> #include <protocols.h>
...@@ -326,7 +327,19 @@ void SAL_CALL SessionListener::approveInteraction( sal_Bool bInteractionGranted ...@@ -326,7 +327,19 @@ void SAL_CALL SessionListener::approveInteraction( sal_Bool bInteractionGranted
StoreSession( sal_False ); StoreSession( sal_False );
css::uno::Reference< css::frame::XDesktop > xDesktop( m_xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY_THROW); css::uno::Reference< css::frame::XDesktop > xDesktop( m_xSMGR->createInstance(SERVICENAME_DESKTOP), css::uno::UNO_QUERY_THROW);
m_bTerminated = xDesktop->terminate(); // honestly: how many implementations of XDesktop will we ever have?
// so casting this directly to the implementation
Desktop* pDesktop(dynamic_cast<Desktop*>(xDesktop.get()));
if(pDesktop)
{
SAL_INFO("fwk.session", "XDesktop is a framework::Desktop -- good.");
m_bTerminated = pDesktop->terminateQuickstarterToo();
}
else
{
SAL_WARN("fwk.session", "XDesktop is not a framework::Desktop -- this should never happen.");
m_bTerminated = xDesktop->terminate();
}
if ( m_rSessionManager.is() ) if ( m_rSessionManager.is() )
{ {
......
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