sw/inc/unofieldcoll.hxx                               |    3 +++
 sw/source/core/inc/unofield.hxx                       |    2 +-
 sw/source/core/unocore/unofield.cxx                   |    6 ++++++
 sw/source/writerfilter/dmapper/ModelEventListener.cxx |   17 +++++++++--------
 4 files changed, 19 insertions(+), 9 deletions(-)

New commits:
commit 4409ab659064e3d10e281d718a06b1eb2222f566
Author:     Noel Grandin <[email protected]>
AuthorDate: Sat Jul 12 20:25:10 2025 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Sun Jul 13 11:50:05 2025 +0200

    use more concrete UNO in sw
    
    Change-Id: I97dcef112cb16fb14c5b02f5a2a6e21a4a44abf2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187783
    Reviewed-by: Noel Grandin <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/inc/unofieldcoll.hxx b/sw/inc/unofieldcoll.hxx
index 392b15028dc0..1b4eb3f59df8 100644
--- a/sw/inc/unofieldcoll.hxx
+++ b/sw/inc/unofieldcoll.hxx
@@ -28,6 +28,7 @@
 #include "unocoll.hxx"
 
 class SwFieldType;
+class SwXFieldEnumeration;
 
 typedef ::cppu::WeakImplHelper
 <   css::container::XNameAccess
@@ -117,6 +118,8 @@ public:
     // container::XUniqueIDAccess
     virtual css::uno::Any SAL_CALL getByUniqueID( const OUString& ID ) 
override;
     virtual void SAL_CALL removeByUniqueID( const OUString& ID ) override;
+
+    rtl::Reference<SwXFieldEnumeration> createFieldEnumeration();
 };
 
 #endif
diff --git a/sw/source/core/inc/unofield.hxx b/sw/source/core/inc/unofield.hxx
index e16476a798dc..bd8e2d88e580 100644
--- a/sw/source/core/inc/unofield.hxx
+++ b/sw/source/core/inc/unofield.hxx
@@ -202,7 +202,7 @@ typedef ::cppu::WeakImplHelper
 ,   css::lang::XServiceInfo
 > SwXFieldEnumeration_Base;
 
-class SwXFieldEnumeration final
+class SW_DLLPUBLIC SwXFieldEnumeration final
     : public SwXFieldEnumeration_Base
 {
 
diff --git a/sw/source/core/unocore/unofield.cxx 
b/sw/source/core/unocore/unofield.cxx
index bc2bb7a6cbd7..63334c2cfc86 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -2914,6 +2914,12 @@ uno::Reference< container::XEnumeration >  
SwXTextFieldTypes::createEnumeration(
     return new SwXFieldEnumeration(GetDoc());
 }
 
+rtl::Reference< SwXFieldEnumeration >  
SwXTextFieldTypes::createFieldEnumeration()
+{
+    SolarMutexGuard aGuard;
+    return new SwXFieldEnumeration(GetDoc());
+}
+
 uno::Type  SwXTextFieldTypes::getElementType()
 {
     return cppu::UnoType<text::XDependentTextField>::get();
diff --git a/sw/source/writerfilter/dmapper/ModelEventListener.cxx 
b/sw/source/writerfilter/dmapper/ModelEventListener.cxx
index f097220ba760..9d04b82a751c 100644
--- a/sw/source/writerfilter/dmapper/ModelEventListener.cxx
+++ b/sw/source/writerfilter/dmapper/ModelEventListener.cxx
@@ -28,6 +28,9 @@
 #include <com/sun/star/frame/XModel.hpp>
 #include <com/sun/star/view/XFormLayerAccess.hpp>
 #include <comphelper/diagnose_ex.hxx>
+#include <unotxdoc.hxx>
+#include <unofieldcoll.hxx>
+#include <unofield.hxx>
 
 namespace writerfilter::dmapper {
 
@@ -53,12 +56,13 @@ void ModelEventListener::notifyEvent( const 
document::EventObject& rEvent )
         try
         {
             //remove listener
-            uno::Reference<document::XEventBroadcaster>(rEvent.Source, 
uno::UNO_QUERY_THROW )->removeEventListener(
-                uno::Reference<document::XEventListener>(this));
+            SwXTextDocument* pDoc = 
dynamic_cast<SwXTextDocument*>(rEvent.Source.get());
+            assert(pDoc);
+            
pDoc->removeEventListener(uno::Reference<document::XEventListener>(this));
 
             // If we have PAGEREF fields, update fields as well.
-            uno::Reference<text::XTextFieldsSupplier> 
xTextFieldsSupplier(rEvent.Source, uno::UNO_QUERY);
-            uno::Reference<container::XEnumeration> xEnumeration = 
xTextFieldsSupplier->getTextFields()->createEnumeration();
+            rtl::Reference<SwXTextFieldTypes> pTextFields = 
pDoc->getSwTextFields();
+            rtl::Reference<SwXFieldEnumeration> xEnumeration = 
pTextFields->createFieldEnumeration();
             sal_Int32 nIndex = 0;
             while(xEnumeration->hasMoreElements())
             {
@@ -78,10 +82,7 @@ void ModelEventListener::notifyEvent( const 
document::EventObject& rEvent )
                 }
             }
             if (nIndex)
-            {
-                uno::Reference<util::XRefreshable> 
xRefreshable(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY);
-                xRefreshable->refresh();
-            }
+                pTextFields->refresh();
         }
         catch( const uno::Exception& )
         {

Reply via email to