summaryrefslogtreecommitdiff
path: root/framework/source/services/pathsettings.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/services/pathsettings.cxx')
-rw-r--r--framework/source/services/pathsettings.cxx41
1 files changed, 9 insertions, 32 deletions
diff --git a/framework/source/services/pathsettings.cxx b/framework/source/services/pathsettings.cxx
index 6d9777a5ab04..ff7e725586af 100644
--- a/framework/source/services/pathsettings.cxx
+++ b/framework/source/services/pathsettings.cxx
@@ -40,6 +40,8 @@
#include <threadhelp/writeguard.hxx>
#include <services.h>
+#include "helper/mischelper.hxx"
+
// ______________________________________________
// interface includes
#include <com/sun/star/beans/Property.hpp>
@@ -48,7 +50,6 @@
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/util/XChangesNotifier.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
// ______________________________________________
// includes of other projects
@@ -99,11 +100,10 @@ namespace framework
//-----------------------------------------------------------------------------
// XInterface, XTypeProvider, XServiceInfo
-DEFINE_XINTERFACE_8 ( PathSettings ,
+DEFINE_XINTERFACE_7 ( PathSettings ,
OWeakObject ,
DIRECT_INTERFACE ( css::lang::XTypeProvider ),
DIRECT_INTERFACE ( css::lang::XServiceInfo ),
- DIRECT_INTERFACE ( css::lang::XComponent ),
DERIVED_INTERFACE( css::lang::XEventListener, css::util::XChangesListener),
DIRECT_INTERFACE ( css::util::XChangesListener ),
DIRECT_INTERFACE ( css::beans::XPropertySet ),
@@ -111,11 +111,10 @@ DEFINE_XINTERFACE_8 ( PathSettings
DIRECT_INTERFACE ( css::beans::XMultiPropertySet )
)
-DEFINE_XTYPEPROVIDER_8 ( PathSettings ,
+DEFINE_XTYPEPROVIDER_7 ( PathSettings ,
css::lang::XTypeProvider ,
css::lang::XServiceInfo ,
css::lang::XEventListener ,
- css::lang::XComponent ,
css::util::XChangesListener ,
css::beans::XPropertySet ,
css::beans::XFastPropertySet ,
@@ -153,7 +152,6 @@ PathSettings::PathSettings( const css::uno::Reference< css::lang::XMultiServiceF
, ::cppu::OWeakObject()
// Init member
, m_xSMGR (xSMGR)
- , m_aListenerContainer(m_aLock.getShareableOslMutex())
, m_pPropHelp(0 )
, m_bIgnoreEvents(sal_False)
{
@@ -163,6 +161,9 @@ PathSettings::PathSettings( const css::uno::Reference< css::lang::XMultiServiceF
//-----------------------------------------------------------------------------
PathSettings::~PathSettings()
{
+ css::uno::Reference< css::util::XChangesNotifier > xBroadcaster(m_xCfgNew, css::uno::UNO_QUERY);
+ if (xBroadcaster.is())
+ xBroadcaster->removeChangesListener(m_xCfgNewListener);
if (m_pPropHelp)
delete m_pPropHelp;
}
@@ -209,37 +210,12 @@ void SAL_CALL PathSettings::disposing(const css::lang::EventObject& aSource)
throw(css::uno::RuntimeException)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "PathSettings::disposing" );
- // SAFE ->
WriteGuard aWriteLock(m_aLock);
if (aSource.Source == m_xCfgNew)
m_xCfgNew.clear();
aWriteLock.unlock();
- // <- SAFE
-}
-
-void SAL_CALL PathSettings::dispose() throw (css::uno::RuntimeException)
-{
- css::uno::Reference< css::util::XChangesNotifier > xBroadcaster(m_xCfgNew, css::uno::UNO_QUERY_THROW);
- if (xBroadcaster.is())
- xBroadcaster->removeChangesListener(static_cast< css::util::XChangesListener* >(this));
-
- css::uno::Reference< css::uno::XInterface > xThis ( static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY );
- css::lang::EventObject aEvent( xThis );
- m_aListenerContainer.disposeAndClear( aEvent );
-}
-
-void SAL_CALL PathSettings::addEventListener(const css::uno::Reference< css::lang::XEventListener >& xListener)
- throw (css::uno::RuntimeException)
-{
- m_aListenerContainer.addInterface( ::getCppuType( ( const css::uno::Reference< css::lang::XEventListener >*) NULL ), xListener );
-}
-
-void SAL_CALL PathSettings::removeEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener)
- throw (css::uno::RuntimeException)
-{
- m_aListenerContainer.addInterface( ::getCppuType( ( const css::uno::Reference< css::lang::XEventListener >*) NULL ), xListener );
}
//-----------------------------------------------------------------------------
@@ -1196,10 +1172,11 @@ css::uno::Reference< css::container::XNameAccess > PathSettings::fa_getCfgNew()
// SAFE ->
WriteGuard aWriteLock(m_aLock);
m_xCfgNew = xCfg;
+ m_xCfgNewListener = new WeakChangesListener(this);
aWriteLock.unlock();
css::uno::Reference< css::util::XChangesNotifier > xBroadcaster(xCfg, css::uno::UNO_QUERY_THROW);
- xBroadcaster->addChangesListener(static_cast< css::util::XChangesListener* >(this));
+ xBroadcaster->addChangesListener(m_xCfgNewListener);
}
return xCfg;