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& ) {
