Kaydet (Commit) 1d9ea5f5 authored tarafından Noel Grandin's avatar Noel Grandin

use rtl::Reference in ConvDicList

instead of storing both a raw pointer and an uno::Reference

Change-Id: I7241edcb50736d0650349387ca1c032b88caf192
üst e5634d4e
...@@ -348,38 +348,34 @@ void ConvDicList::MyAppExitListener::AtExit() ...@@ -348,38 +348,34 @@ void ConvDicList::MyAppExitListener::AtExit()
ConvDicList::ConvDicList() : ConvDicList::ConvDicList() :
aEvtListeners( GetLinguMutex() ) aEvtListeners( GetLinguMutex() )
{ {
pNameContainer = nullptr;
bDisposing = false; bDisposing = false;
pExitListener = new MyAppExitListener( *this ); mxExitListener = new MyAppExitListener( *this );
xExitListener = pExitListener; mxExitListener->Activate();
pExitListener->Activate();
} }
ConvDicList::~ConvDicList() ConvDicList::~ConvDicList()
{ {
if (!bDisposing && mxNameContainer.is())
mxNameContainer->FlushDics();
if (!bDisposing && pNameContainer) mxExitListener->Deactivate();
pNameContainer->FlushDics();
pExitListener->Deactivate();
} }
void ConvDicList::FlushDics() void ConvDicList::FlushDics()
{ {
// check only pointer to avoid creating the container when // check only pointer to avoid creating the container when
// the dictionaries were not accessed yet // the dictionaries were not accessed yet
if (pNameContainer) if (mxNameContainer.is())
pNameContainer->FlushDics(); mxNameContainer->FlushDics();
} }
ConvDicNameContainer & ConvDicList::GetNameContainer() ConvDicNameContainer & ConvDicList::GetNameContainer()
{ {
if (!pNameContainer) if (!mxNameContainer.is())
{ {
pNameContainer = new ConvDicNameContainer; mxNameContainer = new ConvDicNameContainer;
pNameContainer->AddConvDics( GetDictionaryWriteablePath(), CONV_DIC_EXT ); mxNameContainer->AddConvDics( GetDictionaryWriteablePath(), CONV_DIC_EXT );
xNameContainer = pNameContainer;
// access list of text conversion dictionaries to activate // access list of text conversion dictionaries to activate
SvtLinguOptions aOpt; SvtLinguOptions aOpt;
...@@ -389,7 +385,7 @@ ConvDicNameContainer & ConvDicList::GetNameContainer() ...@@ -389,7 +385,7 @@ ConvDicNameContainer & ConvDicList::GetNameContainer()
for (sal_Int32 i = 0; i < nLen; ++i) for (sal_Int32 i = 0; i < nLen; ++i)
{ {
uno::Reference< XConversionDictionary > xDic = uno::Reference< XConversionDictionary > xDic =
pNameContainer->GetByName( pActiveConvDics[i] ); mxNameContainer->GetByName( pActiveConvDics[i] );
if (xDic.is()) if (xDic.is())
xDic->setActive( true ); xDic->setActive( true );
} }
...@@ -397,24 +393,24 @@ ConvDicNameContainer & ConvDicList::GetNameContainer() ...@@ -397,24 +393,24 @@ ConvDicNameContainer & ConvDicList::GetNameContainer()
// since there is no UI to active/deactivate the dictionaries // since there is no UI to active/deactivate the dictionaries
// for chinese text conversion they should be activated by default // for chinese text conversion they should be activated by default
uno::Reference< XConversionDictionary > xS2TDic( uno::Reference< XConversionDictionary > xS2TDic(
pNameContainer->GetByName( "ChineseS2T" ), UNO_QUERY ); mxNameContainer->GetByName( "ChineseS2T" ), UNO_QUERY );
uno::Reference< XConversionDictionary > xT2SDic( uno::Reference< XConversionDictionary > xT2SDic(
pNameContainer->GetByName( "ChineseT2S" ), UNO_QUERY ); mxNameContainer->GetByName( "ChineseT2S" ), UNO_QUERY );
if (xS2TDic.is()) if (xS2TDic.is())
xS2TDic->setActive( true ); xS2TDic->setActive( true );
if (xT2SDic.is()) if (xT2SDic.is())
xT2SDic->setActive( true ); xT2SDic->setActive( true );
} }
return *pNameContainer; return *mxNameContainer;
} }
uno::Reference< container::XNameContainer > SAL_CALL ConvDicList::getDictionaryContainer( ) throw (RuntimeException, std::exception) uno::Reference< container::XNameContainer > SAL_CALL ConvDicList::getDictionaryContainer( ) throw (RuntimeException, std::exception)
{ {
MutexGuard aGuard( GetLinguMutex() ); MutexGuard aGuard( GetLinguMutex() );
GetNameContainer(); GetNameContainer();
DBG_ASSERT( xNameContainer.is(), "missing name container" ); DBG_ASSERT( mxNameContainer.is(), "missing name container" );
return xNameContainer; return mxNameContainer.get();
} }
uno::Reference< XConversionDictionary > SAL_CALL ConvDicList::addNewDictionary( uno::Reference< XConversionDictionary > SAL_CALL ConvDicList::addNewDictionary(
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XServiceInfo.hpp>
#include <cppuhelper/implbase.hxx> #include <cppuhelper/implbase.hxx>
#include <cppuhelper/interfacecontainer.h> #include <cppuhelper/interfacecontainer.h>
#include <rtl/ref.hxx>
#include "linguistic/misc.hxx" #include "linguistic/misc.hxx"
#include "lngopt.hxx" #include "lngopt.hxx"
...@@ -51,18 +52,10 @@ class ConvDicList : ...@@ -51,18 +52,10 @@ class ConvDicList :
virtual void AtExit() override; virtual void AtExit() override;
}; };
::comphelper::OInterfaceContainerHelper2 aEvtListeners;
::comphelper::OInterfaceContainerHelper2 aEvtListeners; rtl::Reference<ConvDicNameContainer> mxNameContainer;
rtl::Reference<MyAppExitListener> mxExitListener;
ConvDicNameContainer *pNameContainer; bool bDisposing;
css::uno::Reference<
css::container::XNameContainer > xNameContainer;
MyAppExitListener *pExitListener;
css::uno::Reference< css::frame::
XTerminateListener > xExitListener;
bool bDisposing;
ConvDicList( const ConvDicList & ) = delete; ConvDicList( const ConvDicList & ) = delete;
ConvDicList & operator = (const ConvDicList &) = delete; ConvDicList & operator = (const ConvDicList &) = delete;
......
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