[Libreoffice-commits] core.git: sw/source
Bjoern Michaelsen (via logerrit)
logerrit at kemper.freedesktop.org
Sat Apr 6 10:33:43 UTC 2019
sw/source/core/unocore/unofield.cxx | 57 +++++++++++++++++++++---------------
sw/source/core/unocore/unotbl.cxx | 1
2 files changed, 34 insertions(+), 24 deletions(-)
New commits:
commit 2c9298e4f667a5dd7606d79890fcedfff0f66e26
Author: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Fri Apr 5 23:14:47 2019 +0200
Commit: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Sat Apr 6 12:33:22 2019 +0200
SwXTextField::Impl FieldTypeClient: SwClient no more
Change-Id: I745ebae5a58df9b3a7dcb96448099f6803b7b1a2
Reviewed-on: https://gerrit.libreoffice.org/70326
Tested-by: Jenkins
Reviewed-by: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index 439a387488a9..5bf539324d0b 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -1117,10 +1117,11 @@ struct SwFieldProperties_Impl
};
class SwXTextField::Impl
- : public SwClient
+ : public SwClient, public SvtListener
{
private:
::osl::Mutex m_Mutex; // just for OInterfaceContainerHelper2
+ SwFieldType* m_pFieldType;
public:
uno::WeakReference<uno::XInterface> m_wThis;
@@ -1131,8 +1132,6 @@ public:
rtl::Reference<SwTextAPIObject> m_xTextObject;
bool m_bIsDescriptor;
- // required to access field master of not yet inserted fields
- SwClient m_FieldTypeClient;
bool m_bCallUpdate;
SwServiceType const m_nServiceId;
OUString m_sTypeName;
@@ -1164,9 +1163,29 @@ public:
const SwField* GetField() const;
+ SwFieldType* GetFieldType()
+ {
+ if (m_bIsDescriptor)
+ return m_pFieldType;
+ if (!GetRegisteredIn())
+ throw uno::RuntimeException();
+ return m_pFormatField->GetField()->GetTyp();
+ }
+ void SetFieldType(SwFieldType& rType)
+ {
+ SvtListener::EndListeningAll();
+ m_pFieldType = &rType;
+ StartListening(m_pFieldType->GetNotifier());
+ }
+ void ClearFieldType()
+ {
+ SvtListener::EndListeningAll();
+ m_pFieldType = nullptr;
+ }
protected:
// SwClient
virtual void Modify(SfxPoolItem const* pOld, SfxPoolItem const* pNew) override;
+ virtual void Notify(const SfxHint&) override;
};
namespace
@@ -1270,26 +1289,14 @@ void SAL_CALL SwXTextField::attachTextFieldMaster(
throw lang::IllegalArgumentException();
}
m_pImpl->m_sTypeName = pFieldType->GetName();
- pFieldType->Add( &m_pImpl->m_FieldTypeClient );
+ m_pImpl->SetFieldType(*pFieldType);
}
uno::Reference< beans::XPropertySet > SAL_CALL
SwXTextField::getTextFieldMaster()
{
SolarMutexGuard aGuard;
- SwFieldType* pType = nullptr;
- if (m_pImpl->m_bIsDescriptor && m_pImpl->m_FieldTypeClient.GetRegisteredIn())
- {
- pType = static_cast<SwFieldType*>(
- m_pImpl->m_FieldTypeClient.GetRegisteredIn());
- }
- else
- {
- if (!m_pImpl->GetRegisteredIn())
- throw uno::RuntimeException();
- pType = m_pImpl->m_pFormatField->GetField()->GetTyp();
- }
-
+ SwFieldType* pType = m_pImpl->GetFieldType();
uno::Reference<beans::XPropertySet> const xRet(
SwXFieldMaster::CreateXFieldMaster(m_pImpl->m_pDoc, pType));
return xRet;
@@ -1959,11 +1966,7 @@ void SAL_CALL SwXTextField::attach(
m_pImpl->m_pDoc = pDoc;
const_cast<SwFormatField *>(m_pImpl->m_pFormatField)->Add(m_pImpl.get());
m_pImpl->m_bIsDescriptor = false;
- if (m_pImpl->m_FieldTypeClient.GetRegisteredIn())
- {
- m_pImpl->m_FieldTypeClient.GetRegisteredIn()
- ->Remove(&m_pImpl->m_FieldTypeClient);
- }
+ m_pImpl->ClearFieldType();
m_pImpl->m_pProps.reset();
if (m_pImpl->m_bCallUpdate)
update();
@@ -2574,7 +2577,7 @@ void SwXTextField::Impl::Invalidate()
{
if (GetRegisteredIn())
{
- EndListeningAll();
+ SwClient::EndListeningAll();
m_pFormatField = nullptr;
m_pDoc = nullptr;
uno::Reference<uno::XInterface> const xThis(m_wThis);
@@ -2607,6 +2610,14 @@ void SwXTextField::Impl::Modify(
}
}
+void SwXTextField::Impl::Notify(const SfxHint& rHint)
+{
+ if(rHint.GetId() == SfxHintId::Dying)
+ {
+ m_pFieldType = nullptr;
+ }
+}
+
const SwField* SwXTextField::Impl::GetField() const
{
if (GetRegisteredIn() && m_pFormatField)
diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx
index 2bf04080a03d..d7abd42dea4a 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -105,7 +105,6 @@
#include <rtl/math.hxx>
#include <sal/log.hxx>
#include <editeng/frmdiritem.hxx>
-#include <calbck.hxx>
#include <comphelper/interfacecontainer2.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/string.hxx>
More information about the Libreoffice-commits
mailing list