[Libreoffice-commits] core.git: sw/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Thu Jun 27 08:29:16 UTC 2019


 sw/source/core/unocore/unofield.cxx |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

New commits:
commit 459de9c585505b43acd184c00a0251bf7a7c8768
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Jun 26 14:02:59 2019 +0200
Commit:     Michael Stahl <Michael.Stahl at cib.de>
CommitDate: Thu Jun 27 10:28:14 2019 +0200

    sw: fix SwXTextField::Impl::IsDescriptor()
    
    ... to return false for a disposed instance.
    
    Follow-up to 36defda96fc62cef1e1ffb725f6768d54b0d9cd0
    
    Unfortrunately have to resurrect the boolean flag again, because neither
    m_pDoc nor m_pFieldType can be used to check.
    
    (regression from e18359445fabad9ba1a704600e9ee327112cc6ae)
    
    Change-Id: I6009cb39cd49b930e042aa21f4b40877c4fdbdde
    Reviewed-on: https://gerrit.libreoffice.org/74739
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>

diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index 7759844fe93d..8a05e1916438 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -1131,6 +1131,7 @@ public:
 
     SwDoc* m_pDoc;
     rtl::Reference<SwTextAPIObject> m_xTextObject;
+    bool m_bIsDescriptor;
     bool m_bCallUpdate;
     SwServiceType const m_nServiceId;
     OUString m_sTypeName;
@@ -1140,6 +1141,7 @@ public:
         : m_pFormatField(pFormat)
         , m_EventListeners(m_Mutex)
         , m_pDoc(pDoc)
+        , m_bIsDescriptor(pFormat == nullptr)
         , m_bCallUpdate(false)
         , m_nServiceId(pFormat
                 ? lcl_GetServiceForField(*pFormat->GetField())
@@ -1174,7 +1176,9 @@ public:
     }
     bool IsDescriptor() const
     {
-        return !m_pFormatField;
+        // ideally should be: !m_pFormatField && m_pDoc
+        // but: SwXServiceProvider::MakeInstance() passes nullptr SwDoc, see comment there
+        return m_bIsDescriptor;
     }
     void Invalidate();
 
@@ -2037,6 +2041,7 @@ void SAL_CALL SwXTextField::attach(
     m_pImpl->m_pDoc = pDoc;
     m_pImpl->GetFormatField()->SetXTextField(this);
     m_pImpl->m_wThis = *this;
+    m_pImpl->m_bIsDescriptor = false;
     m_pImpl->ClearFieldType();
     m_pImpl->m_pProps.reset();
     if (m_pImpl->m_bCallUpdate)
@@ -2231,7 +2236,8 @@ SwXTextField::setPropertyValue(
         }
 
         //#i100374# notify SwPostIt about new field content
-        if (SwFieldIds::Postit == nWhich && !m_pImpl->IsDescriptor())
+        assert(m_pImpl->GetFormatField());
+        if (SwFieldIds::Postit == nWhich)
         {
             m_pImpl->GetFormatField()->Broadcast(
                     SwFormatFieldHint( nullptr, SwFormatFieldHintWhich::CHANGED ));
@@ -2677,7 +2683,7 @@ void SwXTextField::Impl::Notify(const SfxHint& rHint)
 
 const SwField* SwXTextField::Impl::GetField() const
 {
-    return IsDescriptor() ? nullptr : m_pFormatField->GetField();
+    return m_pFormatField ? m_pFormatField->GetField() : nullptr;
 }
 
 OUString SwXTextFieldMasters::getImplementationName()


More information about the Libreoffice-commits mailing list