[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.0' - 7 commits - filter/source include/toolkit lotuswordpro/source package/source reportdesign/inc reportdesign/source sc/source toolkit/source xmlhelp/source

Matúš Kukan matus.kukan at gmail.com
Fri Jan 8 04:35:57 PST 2016


 filter/source/odfflatxml/OdfFlatXml.cxx           |    4 +
 include/toolkit/awt/vclxaccessiblecomponent.hxx   |   15 ++--
 lotuswordpro/source/filter/lwplayout.cxx          |    5 -
 lotuswordpro/source/filter/lwplayout.hxx          |   14 +++-
 package/source/zippackage/ZipPackageStream.cxx    |    3 
 reportdesign/inc/ReportDefinition.hxx             |   15 +++-
 reportdesign/source/core/api/ReportDefinition.cxx |   42 ++++++++++++-
 sc/source/ui/undo/undoblk3.cxx                    |    6 +
 toolkit/source/awt/vclxaccessiblecomponent.cxx    |   70 +++++++++++-----------
 xmlhelp/source/cxxhelp/provider/provider.cxx      |    2 
 10 files changed, 122 insertions(+), 54 deletions(-)

New commits:
commit bd509c57fe66c69901ed24a46ae835f149d8dcfd
Author: Matúš Kukan <matus.kukan at gmail.com>
Date:   Thu Jan 7 21:34:50 2016 +0100

    tdf#89236: Don't deflate encrypted document in parallel
    
    I see "warn:legacy.osl:22439:1:package/source/zipapi/ZipFile.cxx:583:
    Can't detect password correctness without digest!"
    when opening file saved with password.
    
    Obviously css::xml::crypto::XDigestContext used in ZipOutputEntry does not
    work properly when encrypting files in parallel, so don't do that.
    
    Change-Id: I4b354535240a4f31a6bc6855cf7f9af527634e7e
    Reviewed-on: https://gerrit.libreoffice.org/21238
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Matúš Kukan <matus at libreoffice.org>
    (cherry picked from commit eaed822c9cf6b3762f727f1281003dafd300df6d)
    Reviewed-on: https://gerrit.libreoffice.org/21242
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>
    (cherry picked from commit fe7d69565866b4b02cde5aebdab4cbc11d00af2b)

diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
index 76d8efc..2ed7f57 100644
--- a/package/source/zippackage/ZipPackageStream.cxx
+++ b/package/source/zippackage/ZipPackageStream.cxx
@@ -816,7 +816,8 @@ bool ZipPackageStream::saveChild(
             }
             else
             {
-                bParallelDeflate = true;
+                // tdf#89236 Encrypting in parallel does not work
+                bParallelDeflate = !bToBeEncrypted;
                 // Do not deflate small streams in a thread
                 if (xSeek.is() && xSeek->getLength() < 100000)
                     bParallelDeflate = false;
commit fb9888f172b7e41605a107c13420614fe53259e3
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Thu Dec 24 21:49:23 2015 +0200

    tdf#96713 OdfFlatXml: Seek to 0 before reading
    
    Similar to tdf#45418.
    
    The problem is that sfx2 DocumentInserter code calls SfxMedium::IsStorage,
    which reads the stream but doesn't correctly seek back to 0. Actually
    SfxMedium_Impl has 2 members for the input stream, one of SvStream type
    and another one as Reference<XInputStream>. Turns out that reading with
    SvStream::Read changes the position in the object referenced by
    Reference<XInputStream>, but SvStream::Seek doesn't, so Seek(0) doesn't
    do the desired effect.
    
    My current solution is to ensure that we're reading from 0 inside the
    filter. I think it's a good thing to do anyway, and should be sufficient,
    given that other filters doesn't seem to be affected by this bug.
    
    Change-Id: I49b41077032d3e395c675e4f7824cc778c075473
    (cherry picked from commit 5e4124396cafc2b0a435f17a66b33e36303ae4e4)
    Reviewed-on: https://gerrit.libreoffice.org/20983
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    (cherry picked from commit 47f6e49e2a204a00ac631f9fa021d6320752d039)

diff --git a/filter/source/odfflatxml/OdfFlatXml.cxx b/filter/source/odfflatxml/OdfFlatXml.cxx
index 6b75b83..e81eff7 100644
--- a/filter/source/odfflatxml/OdfFlatXml.cxx
+++ b/filter/source/odfflatxml/OdfFlatXml.cxx
@@ -147,6 +147,10 @@ OdfFlatXml::importer(
     saxParser->setDocumentHandler(docHandler);
     try
         {
+            css::uno::Reference< css::io::XSeekable > xSeekable( inputStream, css::uno::UNO_QUERY );
+            if ( xSeekable.is() )
+                xSeekable->seek( 0 );
+
             saxParser->parseStream(inputSource);
         }
     catch (const Exception &exc)
commit 4b08660542a647b1ab01ff7c55910f6b914fab0d
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Jan 7 12:11:30 2016 +0100

    Resolves: tdf#94208 broadcast fill undo (for deleted cells)
    
    Change-Id: I0fb54956bffc77dad4236b326eee3af836017623
    (cherry picked from commit ece5cc21aa7814be79016e0d285981c6ced4d9ee)
    Reviewed-on: https://gerrit.libreoffice.org/21207
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    (cherry picked from commit 81dad223dbfac9352bbfd9333d1ba101d245a15a)

diff --git a/sc/source/ui/undo/undoblk3.cxx b/sc/source/ui/undo/undoblk3.cxx
index 764d717..b28f0bb 100644
--- a/sc/source/ui/undo/undoblk3.cxx
+++ b/sc/source/ui/undo/undoblk3.cxx
@@ -550,6 +550,12 @@ void ScUndoAutoFill::Undo()
         rDoc.DeleteAreaTab( aWorkRange, IDF_AUTOFILL );
         pUndoDoc->CopyToDocument( aWorkRange, IDF_AUTOFILL, false, &rDoc );
 
+        // Actually we'd only need to broadcast the cells inserted during
+        // CopyToDocument(), as DeleteAreaTab() broadcasts deleted cells. For
+        // this we'd need to either record the span sets or let
+        // CopyToDocument() broadcast.
+        BroadcastChanges( aWorkRange);
+
         rDoc.ExtendMerge( aWorkRange, true );
         pDocShell->PostPaint( aWorkRange, PAINT_GRID, nExtFlags );
     }
commit b8756d4226a3544f4a90a562726ed5f3c3003c7c
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Mon Jan 4 21:28:59 2016 +0000

    tdf#94715 - ensure we remove ourselves from the same event source.
    
    Seemingly event removal was not occuring; also clean up historic
    duplication of UNO and C++ references using rtl::Reference.
    
    Reviewed-on: https://gerrit.libreoffice.org/21088
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    
    Conflicts:
    	include/toolkit/awt/vclxaccessiblecomponent.hxx
    	toolkit/source/awt/vclxaccessiblecomponent.cxx
    
    Change-Id: I56dfb76501929886f70495804670f8c4f70e796b
    Reviewed-on: https://gerrit.libreoffice.org/21110
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    (cherry picked from commit 9a22f9f5fe528c7c0f45813a025b377f79c8372e)

diff --git a/include/toolkit/awt/vclxaccessiblecomponent.hxx b/include/toolkit/awt/vclxaccessiblecomponent.hxx
index 0fdc2a8..f01183f 100644
--- a/include/toolkit/awt/vclxaccessiblecomponent.hxx
+++ b/include/toolkit/awt/vclxaccessiblecomponent.hxx
@@ -63,15 +63,16 @@ class TOOLKIT_DLLPUBLIC VCLXAccessibleComponent
         ,public VCLXAccessibleComponent_BASE
 {
 private:
-    ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow> mxWindow;
-    VCLXWindow*                         mpVCLXindow;
+    rtl::Reference<VCLXWindow>      m_xVCLXWindow;
+    VclPtr<vcl::Window>             m_xEventSource;
 
     VCLExternalSolarLock*           m_pSolarLock;
 
-protected:
-     DECL_LINK( WindowEventListener, VclSimpleEvent* );
-     DECL_LINK( WindowChildEventListener, VclSimpleEvent* );
+    DECL_LINK( WindowEventListener, VclSimpleEvent* );
+    DECL_LINK( WindowChildEventListener, VclSimpleEvent* );
+    void            DisconnectEvents();
 
+protected:
     virtual void    ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent );
     virtual void    ProcessWindowChildEvent( const VclWindowEvent& rVclWindowEvent );
     virtual void    FillAccessibleRelationSet( utl::AccessibleRelationSetHelper& rRelationSet );
@@ -80,10 +81,10 @@ protected:
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GetChildAccessible( const VclWindowEvent& rVclWindowEvent );
 
 public:
-    VCLXAccessibleComponent( VCLXWindow* pVCLXindow );
+    VCLXAccessibleComponent( VCLXWindow* pVCLXWindow );
     virtual ~VCLXAccessibleComponent();
 
-    VCLXWindow*    GetVCLXWindow() const { return mpVCLXindow; }
+    VCLXWindow*    GetVCLXWindow() const;
     VclPtr<vcl::Window> GetWindow() const;
     template< class derived_type > VclPtr< derived_type > GetAs() const {
         return VclPtr< derived_type >( static_cast< derived_type * >( GetWindow().get() ) ); }
diff --git a/toolkit/source/awt/vclxaccessiblecomponent.cxx b/toolkit/source/awt/vclxaccessiblecomponent.cxx
index 9031492..2d50fd5 100644
--- a/toolkit/source/awt/vclxaccessiblecomponent.cxx
+++ b/toolkit/source/awt/vclxaccessiblecomponent.cxx
@@ -42,35 +42,45 @@
 using namespace ::com::sun::star;
 using namespace ::comphelper;
 
-VCLXAccessibleComponent::VCLXAccessibleComponent( VCLXWindow* pVCLXindow )
+VCLXAccessibleComponent::VCLXAccessibleComponent( VCLXWindow* pVCLXWindow )
     : AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
     , OAccessibleImplementationAccess( )
 {
-    mpVCLXindow = pVCLXindow;
-    mxWindow = pVCLXindow;
+    m_xVCLXWindow = pVCLXWindow;
 
     m_pSolarLock = static_cast< VCLExternalSolarLock* >( getExternalLock( ) );
 
-    DBG_ASSERT( pVCLXindow->GetWindow(), "VCLXAccessibleComponent - no window!" );
-    if ( pVCLXindow->GetWindow() )
+    DBG_ASSERT( pVCLXWindow->GetWindow(), "VCLXAccessibleComponent - no window!" );
+    m_xEventSource = pVCLXWindow->GetWindow();
+    if ( m_xEventSource )
     {
-      pVCLXindow->GetWindow()->AddEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
-      pVCLXindow->GetWindow()->AddChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
+        m_xEventSource->AddEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
+        m_xEventSource->AddChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
     }
 
     // announce the XAccessible of our creator to the base class
-    lateInit( pVCLXindow );
+    lateInit( pVCLXWindow );
 }
 
-VCLXAccessibleComponent::~VCLXAccessibleComponent()
+VCLXWindow* VCLXAccessibleComponent::GetVCLXWindow() const
 {
-    ensureDisposed();
+    return m_xVCLXWindow.get();
+}
 
-    if ( mpVCLXindow && mpVCLXindow->GetWindow() )
+void VCLXAccessibleComponent::DisconnectEvents()
+{
+    if ( m_xEventSource )
     {
-        mpVCLXindow->GetWindow()->RemoveEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
-        mpVCLXindow->GetWindow()->RemoveChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
+        m_xEventSource->RemoveEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
+        m_xEventSource->RemoveChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
+        m_xEventSource.clear();
     }
+}
+
+VCLXAccessibleComponent::~VCLXAccessibleComponent()
+{
+    ensureDisposed();
+    DisconnectEvents();
 
     delete m_pSolarLock;
     m_pSolarLock = NULL;
@@ -104,13 +114,11 @@ uno::Sequence< OUString > VCLXAccessibleComponent::getSupportedServiceNames() th
 
 IMPL_LINK( VCLXAccessibleComponent, WindowEventListener, VclSimpleEvent*, pEvent )
 {
-    DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
-
-        /* Ignore VCLEVENT_WINDOW_ENDPOPUPMODE, because the UNO accessibility wrapper
-         * might have been destroyed by the previous VCLEventListener (if no AT tool
-         * is running), e.g. sub-toolbars in impress.
-         */
-    if ( pEvent && pEvent->ISA( VclWindowEvent ) && mxWindow.is() /* #122218# */ && (pEvent->GetId() != VCLEVENT_WINDOW_ENDPOPUPMODE) )
+    /* Ignore VCLEVENT_WINDOW_ENDPOPUPMODE, because the UNO accessibility wrapper
+     * might have been destroyed by the previous VCLEventListener (if no AT tool
+     * is running), e.g. sub-toolbars in impress.
+     */
+    if ( pEvent && pEvent->ISA( VclWindowEvent ) && m_xVCLXWindow.is() /* #122218# */ && (pEvent->GetId() != VCLEVENT_WINDOW_ENDPOPUPMODE) )
     {
         DBG_ASSERT( static_cast<VclWindowEvent*>(pEvent)->GetWindow(), "Window???" );
         if( !static_cast<VclWindowEvent*>(pEvent)->GetWindow()->IsAccessibilityEventsSuppressed() || ( pEvent->GetId() == VCLEVENT_OBJECT_DYING ) )
@@ -123,8 +131,7 @@ IMPL_LINK( VCLXAccessibleComponent, WindowEventListener, VclSimpleEvent*, pEvent
 
 IMPL_LINK( VCLXAccessibleComponent, WindowChildEventListener, VclSimpleEvent*, pEvent )
 {
-    DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
-    if ( pEvent && pEvent->ISA( VclWindowEvent ) && mxWindow.is() /* #i68079# */ )
+    if ( pEvent && pEvent->ISA( VclWindowEvent ) && m_xVCLXWindow.is() /* #i68079# */ )
     {
         DBG_ASSERT( static_cast<VclWindowEvent*>(pEvent)->GetWindow(), "Window???" );
         if( !static_cast<VclWindowEvent*>(pEvent)->GetWindow()->IsAccessibilityEventsSuppressed() )
@@ -192,10 +199,8 @@ void VCLXAccessibleComponent::ProcessWindowEvent( const VclWindowEvent& rVclWind
     {
         case VCLEVENT_OBJECT_DYING:
         {
-            pAccWindow->RemoveEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
-            pAccWindow->RemoveChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
-            mxWindow.clear();
-            mpVCLXindow = NULL;
+            DisconnectEvents();
+            m_xVCLXWindow.clear();
         }
         break;
         case VCLEVENT_WINDOW_CHILDDESTROYED:
@@ -344,16 +349,11 @@ void VCLXAccessibleComponent::ProcessWindowEvent( const VclWindowEvent& rVclWind
 
 void VCLXAccessibleComponent::disposing()
 {
-    if ( mpVCLXindow && mpVCLXindow->GetWindow() )
-    {
-        mpVCLXindow->GetWindow()->RemoveEventListener( LINK( this, VCLXAccessibleComponent, WindowEventListener ) );
-        mpVCLXindow->GetWindow()->RemoveChildEventListener( LINK( this, VCLXAccessibleComponent, WindowChildEventListener ) );
-    }
+    DisconnectEvents();
 
     AccessibleExtendedComponentHelper_BASE::disposing();
 
-    mxWindow.clear();
-    mpVCLXindow = NULL;
+    m_xVCLXWindow.clear();
 }
 
 VclPtr<vcl::Window> VCLXAccessibleComponent::GetWindow() const
@@ -770,8 +770,8 @@ void VCLXAccessibleComponent::grabFocus(  ) throw (uno::RuntimeException, std::e
     OExternalLockGuard aGuard( this );
 
     uno::Reference< accessibility::XAccessibleStateSet > xStates = getAccessibleStateSet();
-    if ( mxWindow.is() && xStates.is() && xStates->contains( accessibility::AccessibleStateType::FOCUSABLE ) )
-        mxWindow->setFocus();
+    if ( m_xVCLXWindow.is() && xStates.is() && xStates->contains( accessibility::AccessibleStateType::FOCUSABLE ) )
+        m_xVCLXWindow->setFocus();
 }
 
 sal_Int32 SAL_CALL VCLXAccessibleComponent::getForeground(  ) throw (uno::RuntimeException, std::exception)
commit 3092e9a5a89e53a38c9b6c95a6dc777421c2a205
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Tue Dec 22 14:40:51 2015 +0200

    tdf#92203 OReportDefinition should implement XDocumentEventListener interface
    
    ... since 252b0c4364690e00b45175693d35eb64a07324b4
    
    Change-Id: I4101dac0078df7cb06f4d33da2a722cfbafb5608
    Reviewed-on: https://gerrit.libreoffice.org/20875
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>
    (cherry picked from commit d48370043b3759c79340c162048c5f2b4da394b9)

diff --git a/reportdesign/inc/ReportDefinition.hxx b/reportdesign/inc/ReportDefinition.hxx
index cf3da36..d2432d2b 100644
--- a/reportdesign/inc/ReportDefinition.hxx
+++ b/reportdesign/inc/ReportDefinition.hxx
@@ -25,6 +25,7 @@
 #include "ReportHelperDefines.hxx"
 
 #include <com/sun/star/datatransfer/XTransferable.hpp>
+#include <com/sun/star/document/XDocumentEventBroadcaster.hpp>
 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
 #include <com/sun/star/document/XUndoManagerSupplier.hpp>
 #include <com/sun/star/frame/XModule.hpp>
@@ -44,9 +45,9 @@
 #include <cppuhelper/propertysetmixin.hxx>
 #include <svx/unomod.hxx>
 
-#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_13
-#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_13
-#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 13
+#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_14
+#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_14
+#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 14
 #include <comphelper/implbase_var.hxx>
 #endif
 
@@ -64,8 +65,9 @@ namespace utl
 namespace reportdesign
 {
     class OReportComponentProperties;
-    typedef ::comphelper::PartialWeakComponentImplHelper13 <   ::com::sun::star::report::XReportDefinition
+    typedef ::comphelper::PartialWeakComponentImplHelper14<    ::com::sun::star::report::XReportDefinition
                                                     ,   ::com::sun::star::document::XEventBroadcaster
+                                                    ,   ::com::sun::star::document::XDocumentEventBroadcaster
                                                     ,   ::com::sun::star::lang::XServiceInfo
                                                     ,   ::com::sun::star::frame::XModule
                                                     ,   ::com::sun::star::lang::XUnoTunnel
@@ -350,6 +352,11 @@ namespace reportdesign
         // document::XEventListener
         void SAL_CALL notifyEvent( const ::com::sun::star::document::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
 
+        // document::XDocumentEventBroadcaster
+        virtual void SAL_CALL addDocumentEventListener( const css::uno::Reference< css::document::XDocumentEventListener >& rListener ) throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+        virtual void SAL_CALL removeDocumentEventListener( const css::uno::Reference< css::document::XDocumentEventListener >& rListener ) throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+        virtual void SAL_CALL notifyDocumentEvent( const OUString& rEventName, const css::uno::Reference< css::frame::XController2 >& rViewController, const css::uno::Any& rSupplement ) throw (css::lang::IllegalArgumentException, css::lang::NoSupportException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
         // XUIConfigurationManagerSupplier
         virtual ::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIConfigurationManager > SAL_CALL getUIConfigurationManager(  ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
diff --git a/reportdesign/source/core/api/ReportDefinition.cxx b/reportdesign/source/core/api/ReportDefinition.cxx
index a3f4663..40109e0 100644
--- a/reportdesign/source/core/api/ReportDefinition.cxx
+++ b/reportdesign/source/core/api/ReportDefinition.cxx
@@ -478,6 +478,7 @@ struct OReportDefinitionImpl
     ::cppu::OInterfaceContainerHelper                       m_aStorageChangeListeners;
     ::cppu::OInterfaceContainerHelper                       m_aCloseListener;
     ::cppu::OInterfaceContainerHelper                       m_aModifyListeners;
+    ::cppu::OInterfaceContainerHelper                       m_aLegacyEventListeners;
     ::cppu::OInterfaceContainerHelper                       m_aDocEventListeners;
     ::std::vector< uno::Reference< frame::XController> >    m_aControllers;
     uno::Sequence< beans::PropertyValue >                   m_aArgs;
@@ -532,6 +533,7 @@ struct OReportDefinitionImpl
     :m_aStorageChangeListeners(_aMutex)
     ,m_aCloseListener(_aMutex)
     ,m_aModifyListeners(_aMutex)
+    ,m_aLegacyEventListeners(_aMutex)
     ,m_aDocEventListeners(_aMutex)
     ,m_sMimeType(MIMETYPE_OASIS_OPENDOCUMENT_TEXT_ASCII)
     ,m_sIdentifier(SERVICE_REPORTDEFINITION)
@@ -653,6 +655,7 @@ void SAL_CALL OReportDefinition::disposing()
     lang::EventObject aDisposeEvent( static_cast< ::cppu::OWeakObject* >( this ) );
     m_pImpl->m_aModifyListeners.disposeAndClear( aDisposeEvent );
     m_pImpl->m_aCloseListener.disposeAndClear( aDisposeEvent );
+    m_pImpl->m_aLegacyEventListeners.disposeAndClear( aDisposeEvent );
     m_pImpl->m_aDocEventListeners.disposeAndClear( aDisposeEvent );
     m_pImpl->m_aStorageChangeListeners.disposeAndClear( aDisposeEvent );
 
@@ -1849,11 +1852,44 @@ void OReportDefinition::notifyEvent(const OUString& _sEventName)
         ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
         document::EventObject aEvt(*this, _sEventName);
         aGuard.clear();
-        m_pImpl->m_aDocEventListeners.notifyEach(&document::XEventListener::notifyEvent,aEvt);
+        m_pImpl->m_aLegacyEventListeners.notifyEach(&document::XEventListener::notifyEvent,aEvt);
     }
     catch (const uno::Exception&)
     {
     }
+
+    notifyDocumentEvent(_sEventName, nullptr, css::uno::Any());
+}
+
+// document::XDocumentEventBroadcaster
+void SAL_CALL OReportDefinition::notifyDocumentEvent( const OUString& rEventName, const uno::Reference< frame::XController2 >& rViewController, const uno::Any& rSupplement ) throw (lang::IllegalArgumentException, lang::NoSupportException, uno::RuntimeException, std::exception)
+{
+    try
+    {
+        ::osl::ResettableMutexGuard aGuard(m_aMutex);
+        ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
+        document::DocumentEvent aEvt(*this, rEventName, rViewController, rSupplement);
+        aGuard.clear();
+        m_pImpl->m_aDocEventListeners.notifyEach(&document::XDocumentEventListener::documentEventOccured,aEvt);
+    }
+    catch (const uno::Exception&)
+    {
+    }
+}
+
+void SAL_CALL OReportDefinition::addDocumentEventListener( const uno::Reference< document::XDocumentEventListener >& rListener ) throw (uno::RuntimeException, std::exception)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
+    if ( rListener.is() )
+        m_pImpl->m_aDocEventListeners.addInterface(rListener);
+}
+
+void SAL_CALL OReportDefinition::removeDocumentEventListener( const uno::Reference< document::XDocumentEventListener >& rListener ) throw (uno::RuntimeException, std::exception)
+{
+    ::osl::MutexGuard aGuard(m_aMutex);
+    ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
+    m_pImpl->m_aDocEventListeners.removeInterface(rListener);
 }
 
 // document::XEventBroadcaster
@@ -1862,14 +1898,14 @@ void SAL_CALL OReportDefinition::addEventListener(const uno::Reference< document
     ::osl::MutexGuard aGuard(m_aMutex);
     ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
     if ( _xListener.is() )
-        m_pImpl->m_aDocEventListeners.addInterface(_xListener);
+        m_pImpl->m_aLegacyEventListeners.addInterface(_xListener);
 }
 
 void SAL_CALL OReportDefinition::removeEventListener( const uno::Reference< document::XEventListener >& _xListener ) throw (uno::RuntimeException, std::exception)
 {
     ::osl::MutexGuard aGuard(m_aMutex);
     ::connectivity::checkDisposed(ReportDefinitionBase::rBHelper.bDisposed);
-    m_pImpl->m_aDocEventListeners.removeInterface(_xListener);
+    m_pImpl->m_aLegacyEventListeners.removeInterface(_xListener);
 }
 
 // document::XEventListener
commit e96210ffee3a049a9e435e8c52d9c19046ed5c6c
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jan 1 16:57:43 2016 +0000

    guard against infinite recursion in MarginsSameAsParent
    
    (cherry picked from commit e8dc85c2b3fd197aa5d484be3fc2cb25f7bd2412)
    (cherry picked from commit 54fe17fabaa258a48e18c4a19c29da2d2cf634ca)
    
    Change-Id: I09c1ccb850f0cb2365e52ee6ffd293ccf34ad00e
    Reviewed-on: https://gerrit.libreoffice.org/21033
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: David Tardon <dtardon at redhat.com>
    (cherry picked from commit a586293844de4d9c0e36dd20b7c157f19ca60a9e)

diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx
index 53e1261..de77f9c 100644
--- a/lotuswordpro/source/filter/lwplayout.cxx
+++ b/lotuswordpro/source/filter/lwplayout.cxx
@@ -79,6 +79,7 @@
 LwpVirtualLayout::LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
     : LwpDLNFPVList(objHdr, pStrm)
     , m_bGettingHonorProtection(false)
+    , m_bGettingMarginsSameAsParent(false)
     , m_bGettingHasProtection(false)
     , m_bGettingIsProtected(false)
     , m_bGettingMarginsValue(false)
@@ -726,7 +727,7 @@ bool LwpMiddleLayout::MarginsSameAsParent()
     rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
     if (LwpVirtualLayout* pLay = dynamic_cast<LwpVirtualLayout*>(xBase.get()))
     {
-        pLay->MarginsSameAsParent();
+        pLay->GetMarginsSameAsParent();
     }
     return LwpVirtualLayout::MarginsSameAsParent();
 }
@@ -740,7 +741,7 @@ double LwpMiddleLayout::MarginsValue(const sal_uInt8 &nWhichSide)
     double fValue = 0;
     if((nWhichSide==MARGIN_LEFT)||(nWhichSide==MARGIN_RIGHT))
     {
-        if ( MarginsSameAsParent() )
+        if ( GetMarginsSameAsParent() )
         {
             rtl::Reference<LwpVirtualLayout> xParent(dynamic_cast<LwpVirtualLayout*>(GetParent().obj().get()));
             if (xParent.is() && !xParent->IsHeader())
diff --git a/lotuswordpro/source/filter/lwplayout.hxx b/lotuswordpro/source/filter/lwplayout.hxx
index f540aec..ee46b3d5 100644
--- a/lotuswordpro/source/filter/lwplayout.hxx
+++ b/lotuswordpro/source/filter/lwplayout.hxx
@@ -100,7 +100,6 @@ class LwpVirtualLayout : public LwpDLNFPVList
 public:
     LwpVirtualLayout(LwpObjectHeader &objHdr, LwpSvStream* pStrm);
     virtual ~LwpVirtualLayout(){}
-    virtual bool MarginsSameAsParent();
     inline virtual sal_uInt16 GetNumCols(){return 1;}
     virtual double GetColWidth(sal_uInt16 nIndex);
     virtual double GetColGap(sal_uInt16 nIndex);
@@ -123,6 +122,15 @@ public:
         m_bGettingHonorProtection = false;
         return bRet;
     }
+    bool GetMarginsSameAsParent()
+    {
+        if (m_bGettingMarginsSameAsParent)
+            throw std::runtime_error("recursion in layout");
+        m_bGettingMarginsSameAsParent = true;
+        bool bRet = MarginsSameAsParent();
+        m_bGettingMarginsSameAsParent = false;
+        return bRet;
+    }
     bool GetIsProtected()
     {
         if (m_bGettingIsProtected)
@@ -203,8 +211,10 @@ protected:
     virtual bool HonorProtection();
     virtual bool IsProtected();
     virtual double MarginsValue(const sal_uInt8& /*nWhichSide*/){return 0;}
+    virtual bool MarginsSameAsParent();
 protected:
     bool m_bGettingHonorProtection;
+    bool m_bGettingMarginsSameAsParent;
     bool m_bGettingHasProtection;
     bool m_bGettingIsProtected;
     bool m_bGettingMarginsValue;
@@ -318,7 +328,6 @@ class LwpMiddleLayout : public LwpVirtualLayout
 public:
     LwpMiddleLayout( LwpObjectHeader &objHdr, LwpSvStream* pStrm );
     virtual ~LwpMiddleLayout();
-    virtual bool MarginsSameAsParent() SAL_OVERRIDE;
     virtual double MarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
     virtual double GetExtMarginsValue(const sal_uInt8& nWhichSide) SAL_OVERRIDE;
     LwpLayoutGeometry* GetGeometry()
@@ -375,6 +384,7 @@ public:
 
 protected:
     void Read() SAL_OVERRIDE;
+    virtual bool MarginsSameAsParent() SAL_OVERRIDE;
 private:
     LwpObjectID m_BasedOnStyle;
     LwpLayoutGeometry* Geometry();
commit 7d146afbf6440c738d82e61974bd3d2bc975e31c
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jan 4 15:14:27 2016 +0100

    tdf#96855: Put back assignment of xHierAccess
    
    ...that had inadvertently been removed as part of a larger code removal in
    6948c546fdc00dddec7d58e03150dcc87921d6b2 "tdf#75637: Resolve help images via a
    vnd.libreoffice.image UCP"
    
    Change-Id: Ic2d5e1a5fa5a10b240bb9e511e6dcb8097e58081
    (cherry picked from commit 549e900b4b0047b8cb6c236ea50a3fc046e5fb51)
    Reviewed-on: https://gerrit.libreoffice.org/21082
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit e4a154790397428f2e2f5bcdf26de407d6b0e2da)

diff --git a/xmlhelp/source/cxxhelp/provider/provider.cxx b/xmlhelp/source/cxxhelp/provider/provider.cxx
index 95b1c6d..7f833ff 100644
--- a/xmlhelp/source/cxxhelp/provider/provider.cxx
+++ b/xmlhelp/source/cxxhelp/provider/provider.cxx
@@ -323,6 +323,8 @@ void ContentProvider::init()
     }
 
     OUString productversion( setupversion + " " + setupextension );
+
+    xHierAccess = getHierAccess( sProvider,  "org.openoffice.Office.Common" );
     bool showBasic = getBooleanKey(xHierAccess,"Help/ShowBasic");
     m_pDatabases = new Databases( showBasic,
                                   instPath,


More information about the Libreoffice-commits mailing list