canvas/source/directx/dx_canvashelper.cxx                                |   
33 
 chart2/source/controller/dialogs/DataBrowser.cxx                         |    
2 
 dbaccess/source/ui/browser/unodatbr.cxx                                  |    
9 
 emfio/inc/mtftools.hxx                                                   |   
23 
 emfio/qa/cppunit/emf/EmfImportTest.cxx                                   |  
201 
 emfio/qa/cppunit/emf/data/TestChordWithModifyWorldTransform.emf          
|binary
 emfio/qa/cppunit/emf/data/TestEllipseWithSelectClipPath.emf              
|binary
 emfio/qa/cppunit/emf/data/TestEllipseXformIntersectClipRect.emf          
|binary
 emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf                          
|binary
 emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf                  
|binary
 emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf      
|binary
 emfio/qa/cppunit/emf/data/TestRoundRect.emf                              
|binary
 emfio/qa/cppunit/wmf/data/TestPalette.wmf                                
|binary
 emfio/source/reader/emfreader.cxx                                        |   
58 
 emfio/source/reader/mtftools.cxx                                         |   
81 
 emfio/source/reader/wmfreader.cxx                                        |   
19 
 extensions/source/bibliography/framectr.cxx                              |   
78 
 extensions/source/bibliography/framectr.hxx                              |   
12 
 framework/source/fwe/helper/titlehelper.cxx                              |    
4 
 framework/source/helper/persistentwindowstate.cxx                        |    
4 
 framework/source/helper/tagwindowasmodified.cxx                          |    
3 
 framework/source/helper/titlebarupdate.cxx                               |    
4 
 framework/source/uielement/resourcemenucontroller.cxx                    |    
6 
 include/svx/sdr/table/tablecontroller.hxx                                |    
1 
 include/svx/selectioncontroller.hxx                                      |    
2 
 include/vcl/sysdata.hxx                                                  |    
3 
 oox/source/drawingml/shape.cxx                                           |    
4 
 readlicense_oo/license/CREDITS.fodt                                      | 
3742 ++++------
 reportdesign/Library_rpt.mk                                              |    
1 
 reportdesign/inc/ReportDefinition.hxx                                    |    
7 
 reportdesign/source/core/api/FixedLine.cxx                               |   
30 
 reportdesign/source/core/api/FixedText.cxx                               |   
30 
 reportdesign/source/core/api/FormatCondition.cxx                         |   
29 
 reportdesign/source/core/api/FormattedField.cxx                          |   
27 
 reportdesign/source/core/api/Function.cxx                                |   
29 
 reportdesign/source/core/api/ImageControl.cxx                            |   
30 
 reportdesign/source/core/api/ReportDefinition.cxx                        |   
26 
 reportdesign/source/core/api/ReportEngineJFree.cxx                       |   
30 
 reportdesign/source/core/api/Shape.cxx                                   |   
27 
 reportdesign/source/core/api/services.cxx                                |   
82 
 reportdesign/source/core/inc/FixedLine.hxx                               |    
6 
 reportdesign/source/core/inc/FixedText.hxx                               |    
6 
 reportdesign/source/core/inc/FormatCondition.hxx                         |    
6 
 reportdesign/source/core/inc/FormattedField.hxx                          |    
6 
 reportdesign/source/core/inc/Function.hxx                                |    
6 
 reportdesign/source/core/inc/ImageControl.hxx                            |    
6 
 reportdesign/source/core/inc/ReportEngineJFree.hxx                       |    
6 
 reportdesign/source/core/inc/Shape.hxx                                   |    
6 
 reportdesign/util/rpt.component                                          |   
29 
 sc/source/ui/view/viewfun2.cxx                                           |   
14 
 sd/qa/unit/tiledrendering/tiledrendering.cxx                             |    
4 
 sd/source/ui/view/sdwindow.cxx                                           |   
11 
 sdext/source/presenter/PresenterController.cxx                           |   
12 
 sfx2/source/dialog/infobar.cxx                                           |    
2 
 solenv/gbuild/platform/com_GCC_defs.mk                                   |    
4 
 svl/source/numbers/zforfind.cxx                                          |   
28 
 svx/inc/galbrws2.hxx                                                     |    
2 
 svx/source/form/datanavi.cxx                                             |    
7 
 svx/source/svdraw/selectioncontroller.cxx                                |    
4 
 svx/source/svdraw/svdview.cxx                                            |   
35 
 svx/source/table/svdotable.cxx                                           |    
7 
 svx/source/table/tablecontroller.cxx                                     |   
15 
 sw/inc/anchoredobject.hxx                                                |    
3 
 sw/qa/extras/layout/data/fdo43573-2-min.docx                             
|binary
 sw/qa/extras/layout/layout.cxx                                           |   
16 
 sw/qa/extras/ooxmlexport/ooxmlexport4.cxx                                |    
3 
 sw/qa/extras/ooxmlexport/ooxmlexport6.cxx                                |    
8 
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx                                 |    
3 
 sw/qa/extras/ooxmlimport/ooxmlimport2.cxx                                |   
15 
 sw/qa/extras/uiwriter/data2/tdf39721.fodt                                |   
42 
 sw/qa/extras/uiwriter/uiwriter2.cxx                                      |   
52 
 sw/source/core/access/accnotextframe.cxx                                 |    
2 
 sw/source/core/crsr/crstrvl.cxx                                          |   
18 
 sw/source/core/layout/fly.cxx                                            |   
14 
 sw/source/core/layout/flycnt.cxx                                         |    
3 
 sw/source/core/layout/layact.cxx                                         |    
5 
 sw/source/core/layout/objectformattertxtfrm.cxx                          |   
29 
 sw/source/core/layout/objectformattertxtfrm.hxx                          |    
2 
 writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx                   |   
65 
 writerfilter/qa/cppunittests/dmapper/data/tdf141540ChildRotation.docx    
|binary
 writerfilter/qa/cppunittests/dmapper/data/tdf141540GroupLinePosSize.docx 
|binary
 writerfilter/qa/cppunittests/dmapper/data/tdf141540GroupRotation.docx    
|binary
 writerfilter/source/dmapper/GraphicImport.cxx                            |  
120 
 83 files changed, 3110 insertions(+), 2149 deletions(-)

New commits:
commit 2a96be0501fe9a92af133d584e33897c5842bede
Author:     merttumer <mert.tu...@collabora.com>
AuthorDate: Wed Apr 21 12:05:07 2021 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    lok: Edit the click selected cell on table selection
    
    for LOK case, it should start editing when table is selected
    from the cell that is under the cursor instead of selecting the
    table object.
    
    Change-Id: Ibb3fa41377b76edcdcc2be7419838a151ff765fe
    Signed-off-by: merttumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114386
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114646
    Tested-by: Jenkins

diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index 71c377ff1517..64dde7691e7a 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -48,6 +48,8 @@
 #include <sal/log.hxx>
 #include <vcl/ptrstyle.hxx>
 
+#include <comphelper/lok.hxx>
+
 
 SdrViewEvent::SdrViewEvent()
 :     pHdl(nullptr),
@@ -374,7 +376,9 @@ SdrHitKind SdrView::PickAnything(const Point& rLogicPos, 
SdrViewEvent& rVEvt) co
                     // for e.g. URL links when hoovering and clicking
                     // them will not work. Tried several other changes,
                     // but this one safely keeps existing behaviour as-is.
-                    eHit = SdrHitKind::UnmarkedObject;
+                    // Except for the LOK. LOK doesn't have hoovering popup
+                    // feature.
+                    eHit = comphelper::LibreOfficeKit::isActive() ? 
SdrHitKind::TextEditObj : SdrHitKind::UnmarkedObject;
                     break;
                 default:
                     break;
commit 4e7e2aa66cac4ae3598e861d2ca2d13d5b749311
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Tue Mar 30 15:00:49 2021 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    lok: remove frame action listener when disposing
    
    In order to prevent that the frame action listener
    holds the object reference count when removed,
    ensure they are removed when disposing the object.
    
    Change-Id: If83574e31230d9c683adaf36af36485650fd2c50
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113389
    Tested-by: Jenkins
    Reviewed-by: Henry Castro <hcas...@collabora.com>

diff --git a/dbaccess/source/ui/browser/unodatbr.cxx 
b/dbaccess/source/ui/browser/unodatbr.cxx
index 2496ec8bc2b6..2d7d29f7797b 100644
--- a/dbaccess/source/ui/browser/unodatbr.cxx
+++ b/dbaccess/source/ui/browser/unodatbr.cxx
@@ -248,6 +248,11 @@ void SAL_CALL SbaTableQueryBrowser::disposing()
     // remove ourself as status listener
     implRemoveStatusListeners();
 
+    // check out from all the objects we are listening
+    // the frame
+    if (m_xCurrentFrameParent.is())
+        
m_xCurrentFrameParent->removeFrameActionListener(static_cast<css::frame::XFrameActionListener*>(this));
+
     // remove the container listener from the database context
     try
     {
@@ -259,10 +264,6 @@ void SAL_CALL SbaTableQueryBrowser::disposing()
         DBG_UNHANDLED_EXCEPTION("dbaccess");
     }
 
-    // check out from all the objects we are listening
-    // the frame
-    if (m_xCurrentFrameParent.is())
-        
m_xCurrentFrameParent->removeFrameActionListener(static_cast<css::frame::XFrameActionListener*>(this));
     SbaXDataBrowserController::disposing();
 }
 
diff --git a/extensions/source/bibliography/framectr.cxx 
b/extensions/source/bibliography/framectr.cxx
index 74f482585ade..feeca3582a43 100644
--- a/extensions/source/bibliography/framectr.cxx
+++ b/extensions/source/bibliography/framectr.cxx
@@ -221,6 +221,11 @@ void BibFrameController_Impl::dispose()
 {
     m_bDisposing = true;
     lang::EventObject aObject;
+    uno::Reference< XFrame > xFrame = getFrame();
+
+    if (xFrame.is())
+        xFrame->removeFrameActionListener( m_xImpl.get() );
+
     aObject.Source = static_cast<XController*>(this);
     m_xImpl->aLC.disposeAndClear(aObject);
     m_xDatMan.clear();
diff --git a/framework/source/fwe/helper/titlehelper.cxx 
b/framework/source/fwe/helper/titlehelper.cxx
index fba89ae42bfc..6b31e61fb8d0 100644
--- a/framework/source/fwe/helper/titlehelper.cxx
+++ b/framework/source/fwe/helper/titlehelper.cxx
@@ -243,6 +243,10 @@ void SAL_CALL TitleHelper::disposing(const 
css::lang::EventObject& aEvent)
     if ( ! xOwner.is ())
         return;
 
+    css::uno::Reference< css::frame::XFrame > xFrame(xOwner, 
css::uno::UNO_QUERY);
+    if (xFrame.is())
+        xFrame->removeFrameActionListener(this);
+
     if (xOwner != aEvent.Source)
         return;
 
diff --git a/framework/source/helper/persistentwindowstate.cxx 
b/framework/source/helper/persistentwindowstate.cxx
index 29ad01c1d0fc..04cfb7ddcbbe 100644
--- a/framework/source/helper/persistentwindowstate.cxx
+++ b/framework/source/helper/persistentwindowstate.cxx
@@ -134,6 +134,10 @@ void SAL_CALL PersistentWindowState::frameAction(const 
css::frame::FrameActionEv
 
 void SAL_CALL PersistentWindowState::disposing(const css::lang::EventObject&)
 {
+    css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), 
css::uno::UNO_QUERY);
+    if (xFrame.is())
+        xFrame->removeFrameActionListener(this);
+
     // nothing todo here - because we hold the frame as weak reference only
 }
 
diff --git a/framework/source/helper/tagwindowasmodified.cxx 
b/framework/source/helper/tagwindowasmodified.cxx
index f17594cee477..93f2ace64c99 100644
--- a/framework/source/helper/tagwindowasmodified.cxx
+++ b/framework/source/helper/tagwindowasmodified.cxx
@@ -123,6 +123,9 @@ void SAL_CALL TagWindowAsModified::disposing(const 
css::lang::EventObject& aEven
     SolarMutexGuard g;
 
     css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), 
css::uno::UNO_QUERY);
+    if (xFrame.is())
+        xFrame->addFrameActionListener(this);
+
     if (
         (xFrame.is ()           ) &&
         (aEvent.Source == xFrame)
diff --git a/framework/source/helper/titlebarupdate.cxx 
b/framework/source/helper/titlebarupdate.cxx
index eed6bed3699c..f302c12cf0ae 100644
--- a/framework/source/helper/titlebarupdate.cxx
+++ b/framework/source/helper/titlebarupdate.cxx
@@ -103,6 +103,10 @@ void SAL_CALL TitleBarUpdate::titleChanged(const 
css::frame::TitleChangedEvent&
 
 void SAL_CALL TitleBarUpdate::disposing(const css::lang::EventObject&)
 {
+    css::uno::Reference< css::frame::XFrame > xFrame(m_xFrame.get(), 
css::uno::UNO_QUERY);
+    if (xFrame.is())
+        xFrame->removeFrameActionListener(this);
+
     // nothing todo here - because we hold the frame as weak reference only
 }
 
diff --git a/framework/source/uielement/resourcemenucontroller.cxx 
b/framework/source/uielement/resourcemenucontroller.cxx
index 1094874bbcce..9537f8859736 100644
--- a/framework/source/uielement/resourcemenucontroller.cxx
+++ b/framework/source/uielement/resourcemenucontroller.cxx
@@ -317,6 +317,9 @@ void ResourceMenuController::disposing( const 
css::lang::EventObject& rEvent )
     {
         if ( m_xMenuBarManager.is() )
         {
+            if (m_xFrame.is())
+                m_xFrame->removeFrameActionListener( m_xMenuBarManager.get() );
+
             m_xMenuBarManager->dispose();
             m_xMenuBarManager.clear();
         }
@@ -340,6 +343,9 @@ void ResourceMenuController::disposing()
     m_xDispatchProvider.clear();
     if ( m_xMenuBarManager.is() )
     {
+        if (m_xFrame.is())
+            m_xFrame->removeFrameActionListener( m_xMenuBarManager.get() );
+
         m_xMenuBarManager->dispose();
         m_xMenuBarManager.clear();
     }
diff --git a/sdext/source/presenter/PresenterController.cxx 
b/sdext/source/presenter/PresenterController.cxx
index 6d414d5f66ca..612b40ab9e08 100644
--- a/sdext/source/presenter/PresenterController.cxx
+++ b/sdext/source/presenter/PresenterController.cxx
@@ -204,12 +204,6 @@ void PresenterController::disposing()
     if (mxConfigurationController.is())
         mxConfigurationController->removeConfigurationChangeListener(this);
 
-    Reference<XComponent> xWindowManagerComponent (
-        static_cast<XWeak*>(mpWindowManager.get()), UNO_QUERY);
-    mpWindowManager = nullptr;
-    if (xWindowManagerComponent.is())
-        xWindowManagerComponent->dispose();
-
     if (mxController.is())
     {
         Reference<frame::XFrame> xFrame (mxController->getFrame());
@@ -218,6 +212,12 @@ void PresenterController::disposing()
         mxController = nullptr;
     }
 
+    Reference<XComponent> xWindowManagerComponent (
+        static_cast<XWeak*>(mpWindowManager.get()), UNO_QUERY);
+    mpWindowManager = nullptr;
+    if (xWindowManagerComponent.is())
+        xWindowManagerComponent->dispose();
+
     mxComponentContext = nullptr;
     mxConfigurationController = nullptr;
     mxSlideShowController = nullptr;
diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx
index 37927fed7431..91e01f1ee9d1 100644
--- a/svx/source/form/datanavi.cxx
+++ b/svx/source/form/datanavi.cxx
@@ -1308,6 +1308,10 @@ namespace svxform
 
     DataNavigatorWindow::~DataNavigatorWindow()
     {
+        Reference< XFrameActionListener > xListener(
+            static_cast< XFrameActionListener* >( m_xDataListener.get() ), 
UNO_QUERY );
+        m_xFrame->removeFrameActionListener( xListener );
+
         SvtViewOptions aViewOpt( EViewType::TabDialog, CFGNAME_DATANAVIGATOR );
         aViewOpt.SetPageID(m_xTabCtrl->get_current_page_ident());
         aViewOpt.SetUserItem(CFGNAME_SHOWDETAILS, Any(m_bShowDetails));
@@ -1321,9 +1325,6 @@ namespace svxform
             m_aPageList[i].reset();
         m_aPageList.clear();
 
-        Reference< XFrameActionListener > xListener(
-            static_cast< XFrameActionListener* >( m_xDataListener.get() ), 
UNO_QUERY );
-        m_xFrame->removeFrameActionListener( xListener );
         RemoveBroadcaster();
         m_xDataListener.clear();
     }
commit cbbbb70e9b9655afa8a66ab5c46ec493f1e06716
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Wed Mar 31 09:44:24 2021 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    lok: "BibFrameController_Impl" prefix m_* members
    
    Change-Id: I2bead3015d306c678d81980ef14e7689ab4acc54
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113419
    Tested-by: Jenkins
    Reviewed-by: Henry Castro <hcas...@collabora.com>

diff --git a/extensions/source/bibliography/framectr.cxx 
b/extensions/source/bibliography/framectr.cxx
index 7f621eb72bea..74f482585ade 100644
--- a/extensions/source/bibliography/framectr.cxx
+++ b/extensions/source/bibliography/framectr.cxx
@@ -147,17 +147,17 @@ void BibFrameCtrl_Impl::disposing( const 
lang::EventObject& /*Source*/ )
 
 BibFrameController_Impl::BibFrameController_Impl( const uno::Reference< 
awt::XWindow > & xComponent,
                                                 BibDataManager* pDataManager)
-    :xWindow( xComponent )
+    :m_xWindow( xComponent )
     ,m_xDatMan( pDataManager )
 {
-    bDisposing=false;
-    mxImpl = new BibFrameCtrl_Impl;
-    mxImpl->pController = this;
+    m_bDisposing = false;
+    m_xImpl = new BibFrameCtrl_Impl;
+    m_xImpl->pController = this;
 }
 
 BibFrameController_Impl::~BibFrameController_Impl()
 {
-    mxImpl->pController = nullptr;
+    m_xImpl->pController = nullptr;
     m_xDatMan.clear();
 }
 
@@ -180,8 +180,8 @@ css::uno::Sequence< OUString > SAL_CALL 
BibFrameController_Impl::getSupportedSer
 
 void BibFrameController_Impl::attachFrame( const uno::Reference< XFrame > & 
xArg )
 {
-    xFrame = xArg;
-    xFrame->addFrameActionListener( mxImpl.get() );
+    m_xFrame = xArg;
+    m_xFrame->addFrameActionListener( m_xImpl.get() );
 }
 
 sal_Bool BibFrameController_Impl::attachModel( const uno::Reference< XModel > 
& /*xModel*/ )
@@ -192,9 +192,9 @@ sal_Bool BibFrameController_Impl::attachModel( const 
uno::Reference< XModel > &
 sal_Bool BibFrameController_Impl::suspend( sal_Bool bSuspend )
 {
     if ( bSuspend )
-        getFrame()->removeFrameActionListener( mxImpl.get() );
+        getFrame()->removeFrameActionListener( m_xImpl.get() );
     else
-        getFrame()->addFrameActionListener( mxImpl.get() );
+        getFrame()->addFrameActionListener( m_xImpl.get() );
     return true;
 }
 
@@ -209,7 +209,7 @@ void BibFrameController_Impl::restoreViewData( const 
uno::Any& /*Value*/ )
 
 uno::Reference< XFrame >  BibFrameController_Impl::getFrame()
 {
-    return xFrame;
+    return m_xFrame;
 }
 
 uno::Reference< XModel >  BibFrameController_Impl::getModel()
@@ -219,28 +219,28 @@ uno::Reference< XModel >  
BibFrameController_Impl::getModel()
 
 void BibFrameController_Impl::dispose()
 {
-    bDisposing = true;
+    m_bDisposing = true;
     lang::EventObject aObject;
     aObject.Source = static_cast<XController*>(this);
-    mxImpl->aLC.disposeAndClear(aObject);
+    m_xImpl->aLC.disposeAndClear(aObject);
     m_xDatMan.clear();
-    aStatusListeners.clear();
+    m_aStatusListeners.clear();
     m_xLastQueriedFocusWin.clear();
 }
 
 void BibFrameController_Impl::addEventListener( const uno::Reference< 
lang::XEventListener > & aListener )
 {
-    mxImpl->aLC.addInterface( cppu::UnoType<lang::XEventListener>::get(), 
aListener );
+    m_xImpl->aLC.addInterface( cppu::UnoType<lang::XEventListener>::get(), 
aListener );
 }
 
 void BibFrameController_Impl::removeEventListener( const uno::Reference< 
lang::XEventListener > & aListener )
 {
-    mxImpl->aLC.removeInterface( cppu::UnoType<lang::XEventListener>::get(), 
aListener );
+    m_xImpl->aLC.removeInterface( cppu::UnoType<lang::XEventListener>::get(), 
aListener );
 }
 
 uno::Reference< frame::XDispatch >  BibFrameController_Impl::queryDispatch( 
const util::URL& aURL, const OUString& /*aTarget*/, sal_Int32 /*nSearchFlags*/ )
 {
-    if ( !bDisposing )
+    if ( !m_bDisposing )
     {
         const CmdToInfoCache& rCmdCache = GetCommandToInfoCache();
         CmdToInfoCache::const_iterator pIter = rCmdCache.find( aURL.Complete );
@@ -366,11 +366,11 @@ static vcl::Window* lcl_GetFocusChild( vcl::Window const 
* pParent )
 //class XDispatch
 void BibFrameController_Impl::dispatch(const util::URL& _rURL, const 
uno::Sequence< beans::PropertyValue >& aArgs)
 {
-    if ( bDisposing )
+    if ( m_bDisposing )
         return;
 
     ::SolarMutexGuard aGuard;
-    weld::Window* pParent = Application::GetFrameWeld(xWindow);
+    weld::Window* pParent = Application::GetFrameWeld(m_xWindow);
     weld::WaitObject aWaitObject(pParent);
 
     OUString aCommand( _rURL.Path);
@@ -404,10 +404,10 @@ void BibFrameController_Impl::dispatch(const util::URL& 
_rURL, const uno::Sequen
     }
     else if(aCommand == "Bib/autoFilter")
     {
-        sal_uInt16 nCount = aStatusListeners.size();
+        sal_uInt16 nCount = m_aStatusListeners.size();
         for ( sal_uInt16 n=0; n<nCount; n++ )
         {
-            BibStatusDispatch *pObj = aStatusListeners[n].get();
+            BibStatusDispatch *pObj = m_aStatusListeners[n].get();
             if ( pObj->aURL.Path == "Bib/removeFilter" )
             {
                 FeatureStateEvent  aEvent;
@@ -440,7 +440,7 @@ void BibFrameController_Impl::dispatch(const util::URL& 
_rURL, const uno::Sequen
 
             // create the dialog object
             uno::Reference< ui::dialogs::XExecutableDialog > xDialog = 
sdb::FilterDialog::createWithQuery(xContext, m_xDatMan->getParser(),
-                       Reference<sdbc::XRowSet>(m_xDatMan->getForm(), 
uno::UNO_QUERY_THROW), xWindow);
+                       Reference<sdbc::XRowSet>(m_xDatMan->getForm(), 
uno::UNO_QUERY_THROW), m_xWindow);
             // execute it
             if ( xDialog->execute( ) )
             {
@@ -455,10 +455,10 @@ void BibFrameController_Impl::dispatch(const util::URL& 
_rURL, const uno::Sequen
             TOOLS_WARN_EXCEPTION( "extensions.biblio", 
"BibFrameController_Impl::dispatch" );
         }
 
-        sal_uInt16 nCount = aStatusListeners.size();
+        sal_uInt16 nCount = m_aStatusListeners.size();
         for ( sal_uInt16 n=0; n<nCount; n++ )
         {
-            BibStatusDispatch *pObj = aStatusListeners[n].get();
+            BibStatusDispatch *pObj = m_aStatusListeners[n].get();
             if ( pObj->aURL.Path == "Bib/removeFilter" && 
m_xDatMan->getParser().is())
             {
                 FeatureStateEvent  aEvent;
@@ -592,7 +592,8 @@ void BibFrameController_Impl::dispatch(const util::URL& 
_rURL, const uno::Sequen
 }
 IMPL_LINK_NOARG( BibFrameController_Impl, DisposeHdl, void*, void )
 {
-    xFrame->dispose();
+    if (m_xFrame.is())
+        m_xFrame->dispose();
 };
 
 void BibFrameController_Impl::addStatusListener(
@@ -601,7 +602,7 @@ void BibFrameController_Impl::addStatusListener(
 {
     BibConfig* pConfig = BibModul::GetConfig();
     // create a new Reference and insert into listener array
-    aStatusListeners.push_back( std::make_unique<BibStatusDispatch>( aURL, 
aListener ) );
+    m_aStatusListeners.push_back( std::make_unique<BibStatusDispatch>( aURL, 
aListener ) );
 
     // send first status synchronously
     FeatureStateEvent aEvent;
@@ -652,7 +653,7 @@ void BibFrameController_Impl::addStatusListener(
     }
     else if(aURL.Path == "Cut")
     {
-        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
xWindow ) );
+        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
m_xWindow ) );
         if (m_xLastQueriedFocusWin)
         {
             Reference<css::awt::XTextComponent> 
xEdit(m_xLastQueriedFocusWin->GetComponentInterface(), css::uno::UNO_QUERY);
@@ -661,7 +662,7 @@ void BibFrameController_Impl::addStatusListener(
     }
     if(aURL.Path == "Copy")
     {
-        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
xWindow ) );
+        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
m_xWindow ) );
         if (m_xLastQueriedFocusWin)
         {
             Reference<css::awt::XTextComponent> 
xEdit(m_xLastQueriedFocusWin->GetComponentInterface(), css::uno::UNO_QUERY);
@@ -671,7 +672,7 @@ void BibFrameController_Impl::addStatusListener(
     else if(aURL.Path == "Paste" )
     {
         aEvent.IsEnabled = false;
-        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
xWindow ) );
+        m_xLastQueriedFocusWin = lcl_GetFocusChild( VCLUnoHelper::GetWindow( 
m_xWindow ) );
         if (m_xLastQueriedFocusWin)
         {
             Reference<css::awt::XTextComponent> 
xEdit(m_xLastQueriedFocusWin->GetComponentInterface(), css::uno::UNO_QUERY);
@@ -734,18 +735,18 @@ void BibFrameController_Impl::removeStatusListener(
 {
     // search listener array for given listener
     // for checking equality always "cast" to XInterface
-    if ( bDisposing )
+    if ( m_bDisposing )
         return;
 
-    sal_uInt16 nCount = aStatusListeners.size();
+    sal_uInt16 nCount = m_aStatusListeners.size();
     for ( sal_uInt16 n=0; n<nCount; n++ )
     {
-        BibStatusDispatch *pObj = aStatusListeners[n].get();
+        BibStatusDispatch *pObj = m_aStatusListeners[n].get();
         bool bFlag=pObj->xListener.is();
         if (!bFlag || (pObj->xListener == aObject &&
             ( aURL.Complete.isEmpty() || pObj->aURL.Path == aURL.Path  )))
         {
-            aStatusListeners.erase( aStatusListeners.begin() + n );
+            m_aStatusListeners.erase( m_aStatusListeners.begin() + n );
             break;
         }
     }
@@ -756,14 +757,14 @@ void BibFrameController_Impl::RemoveFilter()
     OUString aQuery;
     m_xDatMan->startQueryWith(aQuery);
 
-    sal_uInt16 nCount = aStatusListeners.size();
+    sal_uInt16 nCount = m_aStatusListeners.size();
 
     bool bRemoveFilter=false;
     bool bQueryText=false;
 
     for ( sal_uInt16 n=0; n<nCount; n++ )
     {
-        BibStatusDispatch *pObj = aStatusListeners[n].get();
+        BibStatusDispatch *pObj = m_aStatusListeners[n].get();
         if ( pObj->aURL.Path == "Bib/removeFilter" )
         {
             FeatureStateEvent  aEvent;
@@ -818,13 +819,13 @@ void BibFrameController_Impl::ChangeDataSource(const 
uno::Sequence< beans::Prope
     }
 
 
-    sal_uInt16 nCount = aStatusListeners.size();
+    sal_uInt16 nCount = m_aStatusListeners.size();
 
     bool bMenuFilter=false;
     bool bQueryText=false;
     for ( sal_uInt16 n=0; n<nCount; n++ )
     {
-        BibStatusDispatch *pObj = aStatusListeners[n].get();
+        BibStatusDispatch *pObj = m_aStatusListeners[n].get();
         if (pObj->aURL.Path == "Bib/MenuFilter")
         {
             FeatureStateEvent  aEvent;
diff --git a/extensions/source/bibliography/framectr.hxx 
b/extensions/source/bibliography/framectr.hxx
index 75c336c763f0..131d59e1c2a7 100644
--- a/extensions/source/bibliography/framectr.hxx
+++ b/extensions/source/bibliography/framectr.hxx
@@ -62,13 +62,13 @@ class BibFrameController_Impl : public cppu::WeakImplHelper 
<
 >
 {
 friend class BibFrameCtrl_Impl;
-    rtl::Reference<BibFrameCtrl_Impl>                         mxImpl;
-    BibStatusDispatchArr        aStatusListeners;
-    css::uno::Reference< css::awt::XWindow >                  xWindow;
-    css::uno::Reference< css::frame::XFrame >                 xFrame;
-    bool                        bDisposing;
+    rtl::Reference<BibFrameCtrl_Impl>                         m_xImpl;
+    BibStatusDispatchArr                                      
m_aStatusListeners;
+    css::uno::Reference< css::awt::XWindow >                  m_xWindow;
+    css::uno::Reference< css::frame::XFrame >                 m_xFrame;
+    bool                                                      m_bDisposing;
     rtl::Reference<BibDataManager>                            m_xDatMan;
-    VclPtr<vcl::Window> m_xLastQueriedFocusWin;
+    VclPtr<vcl::Window>                                       
m_xLastQueriedFocusWin;
 
     DECL_LINK( DisposeHdl, void*, void );
 
commit 5069df3529fddcf8df0d23e732c15b8505f6d6df
Author:     merttumer <mert.tu...@collabora.com>
AuthorDate: Thu Apr 15 11:27:08 2021 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    Fix Row size change is not updated
    
    Row size is not taken into account when there is a change
    Only if column size/position changes, it starts updating
    
    Change-Id: I99f3aa9fe0e7f3428234062a2520ca8a61984067
    Signed-off-by: merttumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114130
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114645
    Tested-by: Jenkins

diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index 53e6133ac6de..747cc6874f8a 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -248,6 +248,7 @@ private:
     static sal_Int32 lastRowCount;
     static sal_Int32 lastColCount;
     static std::vector<sal_Int32> lastColWidths;
+    static bool rowSizeChanged;
 };
 
 SdrTableObjImpl* SdrTableObjImpl::lastLayoutTable = nullptr;
@@ -258,6 +259,7 @@ bool SdrTableObjImpl::lastLayoutFitHeight;
 WritingMode SdrTableObjImpl::lastLayoutMode;
 sal_Int32 SdrTableObjImpl::lastRowCount;
 sal_Int32 SdrTableObjImpl::lastColCount;
+bool SdrTableObjImpl::rowSizeChanged = false;
 std::vector<sal_Int32> SdrTableObjImpl::lastColWidths;
 
 SdrTableObjImpl::SdrTableObjImpl()
@@ -604,6 +606,7 @@ void SdrTableObjImpl::DragEdge( bool mbHorizontal, int 
nEdge, sal_Int32 nOffset
                 Reference< XIndexAccess > xRows( mxTable->getRows(), 
UNO_QUERY_THROW );
                 Reference< XPropertySet > xRowSet( xRows->getByIndex( 
(!nEdge)?nEdge:(nEdge-1) ), UNO_QUERY_THROW );
                 xRowSet->setPropertyValue( sSize, Any( nHeight ) );
+                rowSizeChanged = true;
             }
         }
         else
@@ -807,7 +810,8 @@ void SdrTableObjImpl::LayoutTable( tools::Rectangle& rArea, 
bool bFitWidth, bool
         || lastLayoutMode != writingMode
         || lastRowCount != getRowCount()
         || lastColCount != getColumnCount()
-        || lastColWidths != getColumnWidths() )
+        || lastColWidths != getColumnWidths()
+        || rowSizeChanged )
     {
         lastLayoutTable = this;
         lastLayoutInputRectangle = rArea;
@@ -822,6 +826,7 @@ void SdrTableObjImpl::LayoutTable( tools::Rectangle& rArea, 
bool bFitWidth, bool
         TableModelNotifyGuard aGuard( mxTable.get() );
         mpLayouter->LayoutTable( rArea, bFitWidth, bFitHeight );
         lastLayoutResultRectangle = rArea;
+        rowSizeChanged = false;
     }
     else
     {
commit f30dd43c1a110aeaae2f05e40b64263f81a6d4f0
Author:     merttumer <mert.tu...@collabora.com>
AuthorDate: Thu Apr 15 11:25:00 2021 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    Implemented CTRL + A selects all the cells
    
    When the table is selected, ctrl + a should select
    all the cells unless text editing is enabled.
    The previous behavior was deselecting the table and
    marking all the objects. However, for table it should
    select all the cells instead.
    
    Change-Id: I9fb512618a61a96ff21daa74c5a4ae9b31e3906e
    Signed-off-by: merttumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114129
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114644
    Tested-by: Jenkins

diff --git a/include/svx/sdr/table/tablecontroller.hxx 
b/include/svx/sdr/table/tablecontroller.hxx
index 3d94dcfb08b7..72ff7b981e58 100644
--- a/include/svx/sdr/table/tablecontroller.hxx
+++ b/include/svx/sdr/table/tablecontroller.hxx
@@ -57,6 +57,7 @@ public:
     SVX_DLLPRIVATE virtual bool DeleteMarked() override;
 
     SVX_DLLPRIVATE virtual void onSelectionHasChanged() override;
+    SVX_DLLPRIVATE virtual void onSelectAll() override;
 
     SVX_DLLPRIVATE virtual void GetState( SfxItemSet& rSet ) override;
     virtual void Execute( SfxRequest& rReq ) override;
diff --git a/include/svx/selectioncontroller.hxx 
b/include/svx/selectioncontroller.hxx
index c9e12c322a5d..57dec07b9fd6 100644
--- a/include/svx/selectioncontroller.hxx
+++ b/include/svx/selectioncontroller.hxx
@@ -49,6 +49,8 @@ public:
 
     virtual void onSelectionHasChanged();
 
+    virtual void onSelectAll();
+
     virtual void GetState( SfxItemSet& rSet );
     virtual void Execute( SfxRequest& rReq );
 
diff --git a/svx/source/svdraw/selectioncontroller.cxx 
b/svx/source/svdraw/selectioncontroller.cxx
index 28dda4ed27a2..5f6f51312f4e 100644
--- a/svx/source/svdraw/selectioncontroller.cxx
+++ b/svx/source/svdraw/selectioncontroller.cxx
@@ -47,6 +47,10 @@ void SelectionController::onSelectionHasChanged()
 {
 }
 
+void SelectionController::onSelectAll()
+{
+}
+
 void SelectionController::GetState( SfxItemSet& /*rSet*/ )
 {
 }
diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index 6dad758bbd33..71c377ff1517 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -30,6 +30,7 @@
 #include <svx/svdomedia.hxx>
 #include <svx/svdetc.hxx>
 
+#include <svx/sdr/table/tablecontroller.hxx>
 #include <svx/svdoutl.hxx>
 #include <svx/svdview.hxx>
 #include <editeng/flditem.hxx>
@@ -1339,7 +1340,33 @@ void SdrView::MarkAll()
         
GetTextEditOutlinerView()->SetSelection(ESelection(0,0,EE_PARA_ALL,EE_TEXTPOS_ALL));
     } else if (IsGluePointEditMode()) MarkAllGluePoints();
     else if (HasMarkablePoints()) MarkAllPoints();
-    else MarkAllObj();
+    else {
+        // check for table
+        bool bMarkAll = true;
+        const SdrMarkList& rMarkList = GetMarkedObjectList();
+        if (rMarkList.GetMarkCount() == 1)
+        {
+            const SdrObject* pObj(rMarkList.GetMark(0)->GetMarkedSdrObj());
+            SdrView* pView = this;
+            if (pObj && pView && (pObj->GetObjInventor() == 
SdrInventor::Default)
+                && (pObj->GetObjIdentifier() == OBJ_TABLE))
+            {
+                mxSelectionController.clear();
+                mxSelectionController = sdr::table::CreateTableController(
+                    *pView, static_cast<const sdr::table::SdrTableObj&>(*pObj),
+                    mxLastSelectionController);
+
+                if (mxSelectionController.is())
+                {
+                    mxLastSelectionController.clear();
+                    mxSelectionController->onSelectAll();
+                    bMarkAll = false;
+                }
+            }
+        }
+        if ( bMarkAll )
+            MarkAllObj();
+    }
 }
 
 void SdrView::UnmarkAll()
diff --git a/svx/source/table/tablecontroller.cxx 
b/svx/source/table/tablecontroller.cxx
index 43bd4c2ae7e9..4ad539380e63 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -417,6 +417,14 @@ void SvxTableController::onSelectionHasChanged()
         destroySelectionOverlay();
     }
 }
+void SvxTableController::onSelectAll()
+{
+    sdr::table::SdrTableObj* pTableObj = mxTableObj.get();
+    if ( pTableObj && !pTableObj->IsTextEditActive())
+    {
+        selectAll();
+    }
+}
 
 
 void SvxTableController::GetState( SfxItemSet& rSet )
commit e6e846a38f6433c84f113cedbbecedea44edc1fa
Author:     merttumer <mert.tu...@collabora.com>
AuthorDate: Thu Apr 15 11:21:01 2021 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:24 2021 +0200

    Fix ESC key selects all the cells of the table object
    
    Selecting the table should not necessarily mean
    selecting all the cells. If all the cells are selected
    which ESC key does the same thing, it is impossible to
    delete the table with the delete key,
    only after an input following by an ESC
    deleselects them and deleting becomes possible.
    
    Change-Id: I33f182d330f1cbc411d47b86098a4aea544a90ae
    Signed-off-by: merttumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114128
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114643
    Tested-by: Jenkins

diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx 
b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 21a67f89a4ec..3a8553ae48b6 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -1456,8 +1456,8 @@ void SdTiledRenderingTest::testTdf118354()
     Scheduler::ProcessEventsToIdle();
 
     SdrView* pView = pViewShell->GetView();
-    rtl::Reference<sdr::SelectionController> 
xSelectionController(pView->getSelectionController());
-    CPPUNIT_ASSERT(xSelectionController->hasSelectedCells());
+    auto pMarkedObj = 
dynamic_cast<sdr::table::SdrTableObj*>(pView->GetMarkedObjectByIndex(0));
+    CPPUNIT_ASSERT_EQUAL(pMarkedObj, pTableObject);
 }
 
 void SdTiledRenderingTest::testPostKeyEventInvalidation()
diff --git a/svx/source/table/tablecontroller.cxx 
b/svx/source/table/tablecontroller.cxx
index 75c49f599e02..43bd4c2ae7e9 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -406,13 +406,6 @@ void SvxTableController::onSelectionHasChanged()
         const SdrMarkList& rMarkList= mrView.GetMarkedObjectList();
         if( rMarkList.GetMarkCount() == 1 )
             bSelected = mxTableObj.get() == 
rMarkList.GetMark(0)->GetMarkedSdrObj();
-        /* fdo#46186 Selecting the table means selecting the entire cells */
-        if (!hasSelectedCells() && pTableObj)
-        {
-            maCursorFirstPos = SdrTableObj::getFirstCell();
-            maCursorLastPos = pTableObj->getLastCell();
-            mbCellSelectionMode=true;
-        }
     }
 
     if( bSelected )
commit 95ae128ec3477cb225dfe0c69b69cf1a8a51c907
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Thu May 13 22:04:56 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    tdf#117957 WMF Add support for selecting colors from palette
    
    Change-Id: I8f995dab566d9fae79d87fe13741b8ea9658b408
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112998
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>
    (cherry picked from commit e923f752a3adfe1a941dcbc2fdffc626a569d59e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115520
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/emfio/inc/mtftools.hxx b/emfio/inc/mtftools.hxx
index 22c0cef99364..eb793baca415 100644
--- a/emfio/inc/mtftools.hxx
+++ b/emfio/inc/mtftools.hxx
@@ -363,6 +363,22 @@ namespace emfio
         }
     };
 
+
+    struct WinMtfPalette final : GDIObj
+    {
+        std::vector< Color > aPaletteColors;
+
+        WinMtfPalette()
+            : aPaletteColors(std::vector< Color >{})
+        {}
+
+        WinMtfPalette(const std::vector< Color > rPaletteColors)
+            : aPaletteColors(rPaletteColors)
+        {}
+
+    };
+
+
     struct WinMtfLineStyle final : GDIObj
     {
         Color       aLineColor;
@@ -494,6 +510,7 @@ namespace emfio
         WinMtfFillStyle     maLatestFillStyle;
         WinMtfFillStyle     maFillStyle;
         WinMtfFillStyle     maNopFillStyle;
+        WinMtfPalette       maPalette;
 
         vcl::Font           maLatestFont;
         vcl::Font           maFont;
diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index fcdf2509f3a9..53be54f34c02 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -56,6 +56,7 @@ class Test : public test::BootstrapFixture, public 
XmlTestTools, public unotest:
     void TestEllipseXformIntersectClipRect();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
+    void TestPalette();
     void TestPolylinetoCloseStroke();
     void TestPolyLineWidth();
     void TestRoundRect();
@@ -83,6 +84,7 @@ public:
     CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
+    CPPUNIT_TEST(TestPalette);
     CPPUNIT_TEST(TestPolylinetoCloseStroke);
     CPPUNIT_TEST(TestPolyLineWidth);
     CPPUNIT_TEST(TestRoundRect);
@@ -460,6 +462,43 @@ void Test::TestPolylinetoCloseStroke()
                 "color", "#000000");
 }
 
+
+void Test::TestPalette()
+{
+    // WMF import with records: CREATEPALETTE, SELECTOBJECT, 
CREATEPENINDIRECT, CREATEBRUSHINDIRECT, ELLIPSE.
+    Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/wmf/data/TestPalette.wmf");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence));
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor", 2);
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]/polypolygon",
+                "path", "m2433 1216.5c0 213.540351086756-56.2099207528522 
423.318631225821-162.98009629623 608.25s-260.338534929591 
338.499728160392-445.269903703769 445.26990370377-394.709648913244 
162.98009629623-608.25 
162.98009629623-423.318631225821-56.2099207528518-608.25-162.98009629623-338.499728160392-260.338534929591-445.26990370377-445.26990370377-162.980096296231-394.709648913244-162.980096296231-608.25c-2.70117261891301E-013-213.540351086756
 56.2099207528519-423.318631225821 162.98009629623-608.25 
106.770175543378-184.931368774179 260.338534929591-338.499728160392 
445.269903703769-445.26990370377s394.709648913244-162.980096296231 
608.25-162.980096296231c213.540351086756-5.40234523782601E-013 423.318631225821 
56.2099207528518 608.25 162.98009629623s338.499728160392 260.338534929591 
445.26990370377 445.269903703769c106.770175543379 184.931368774179 
162.980096296231 394.709648913244 162.980096296231 608.25z");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[1]",
+                "color", "#ffff00");
+
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[2]/polypolygon",
+                "path", "m5079 3862.5c0 213.540351086756-56.2099207528527 
423.318631225821-162.980096296231 608.25s-260.33853492959 
338.499728160391-445.269903703769 445.269903703769-394.709648913244 
162.980096296231-608.25 
162.980096296231-423.318631225821-56.2099207528518-608.25-162.98009629623-338.499728160391-260.33853492959-445.26990370377-445.269903703769-162.980096296231-394.709648913245-162.980096296231-608.250000000001c-4.54747350886464E-013-213.540351086756
 56.2099207528518-423.318631225821 162.98009629623-608.25 
106.770175543378-184.931368774179 260.33853492959-338.499728160392 
445.269903703769-445.26990370377s394.709648913244-162.980096296231 
608.25-162.980096296231c213.540351086756-4.54747350886464E-013 423.318631225821 
56.2099207528522 608.25 162.98009629623s338.499728160392 260.33853492959 
445.26990370377 445.269903703769c106.770175543378 184.931368774178 
162.980096296231 394.709648913244 162.980096296231 608.25z");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polypolygoncolor[2]",
+                "color", "#0080ff");
+
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke", 2);
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[1]/polygon",
+                       "2408,1191 2406,1129 2402,1068 2394,1007 2383,946 
2369,886 2352,827 2332,768 2309,711 2284,655 2255,600 2224,547 2190,496 
2153,446 2114,398 2073,353 2029,309 1984,268 1936,229 1886,192 1835,158 
1782,127 1727,98 1671,73 1614,50 1555,30 1496,13 1436,-1 1375,-12 1314,-20 
1253,-24 1191,-26 1191,-26 1129,-24 1068,-20 1007,-12 946,-1 886,13 827,30 
768,50 711,73 655,98 600,127 547,158 496,192 446,229 398,268 353,309 309,353 
268,398 229,446 192,496 158,547 127,600 98,655 73,711 50,768 30,827 13,886 
-1,946 -12,1007 -20,1068 -24,1129 -26,1191 -26,1191 -24,1253 -20,1314 -12,1375 
-1,1436 13,1496 30,1555 50,1614 73,1671 98,1727 127,1782 158,1835 192,1886 
229,1936 268,1984 309,2029 353,2073 398,2114 446,2153 496,2190 547,2224 
600,2255 655,2284 711,2309 768,2332 827,2352 886,2369 946,2383 1007,2394 
1068,2402 1129,2406 1191,2408 1191,2408 1253,2406 1314,2402 1375,2394 1436,2383 
1496,2369 1555,2352 1614,2332 1671,2309 1727,2284 1782,2255 1835,2224 1886,2190 
1936,2153 1984,2114
  2029,2073 2073,2029 2114,1984 2153,1936 2190,1886 2224,1835 2255,1782 
2284,1727 2309,1671 2332,1614 2352,1555 2369,1496 2383,1436 2394,1375 2402,1314 
2406,1253");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[1]/line",
+                "color", "#ff0000");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[1]/line",
+                "width", "132");
+
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[2]/polygon",
+                       "5053,3836 5051,3774 5047,3713 5039,3652 5028,3591 
5014,3531 4997,3472 4977,3413 4954,3356 4929,3300 4900,3245 4869,3192 4835,3141 
4798,3091 4759,3043 4718,2998 4674,2954 4629,2913 4581,2874 4531,2837 4480,2803 
4427,2772 4372,2743 4316,2718 4259,2695 4200,2675 4141,2658 4081,2644 4020,2633 
3959,2625 3898,2621 3836,2619 3836,2619 3774,2621 3713,2625 3652,2633 3591,2644 
3531,2658 3472,2675 3413,2695 3356,2718 3300,2743 3245,2772 3192,2803 3141,2837 
3091,2874 3043,2913 2998,2954 2954,2998 2913,3043 2874,3091 2837,3141 2803,3192 
2772,3245 2743,3300 2718,3356 2695,3413 2675,3472 2658,3531 2644,3591 2633,3652 
2625,3713 2621,3774 2619,3836 2619,3836 2621,3898 2625,3959 2633,4020 2644,4081 
2658,4141 2675,4200 2695,4259 2718,4316 2743,4372 2772,4427 2803,4480 2837,4531 
2874,4581 2913,4629 2954,4674 2998,4718 3043,4759 3091,4798 3141,4835 3192,4869 
3245,4900 3300,4929 3356,4954 3413,4977 3472,4997 3531,5014 3591,5028 3652,5039 
3713,5047 3774,5051 3836,5053 3836,5053 389
 8,5051 3959,5047 4020,5039 4081,5028 4141,5014 4200,4997 4259,4977 4316,4954 
4372,4929 4427,4900 4480,4869 4531,4835 4581,4798 4629,4759 4674,4718 4718,4674 
4759,4629 4798,4581 4835,4531 4869,4480 4900,4427 4929,4372 4954,4316 4977,4259 
4997,4200 5014,4141 5028,4081 5039,4020 5047,3959 5051,3898");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[2]/line",
+                "color", "#ff0000");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonstroke[2]/line",
+                "width", "132");
+}
+
 void Test::TestPolyLineWidth()
 {
     // EMF import with records: CREATEPEN, ROUNDRECT.
diff --git a/emfio/qa/cppunit/wmf/data/TestPalette.wmf 
b/emfio/qa/cppunit/wmf/data/TestPalette.wmf
new file mode 100644
index 000000000000..222809df5ff9
Binary files /dev/null and b/emfio/qa/cppunit/wmf/data/TestPalette.wmf differ
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index 989970c9cb8b..14c52a6327e8 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -479,12 +479,20 @@ namespace emfio
     Color MtfTools::ReadColor()
     {
         sal_uInt32 nColor;
-
         mpInputStream->ReadUInt32( nColor );
-        Color aColor(static_cast<sal_uInt8>(nColor), 
static_cast<sal_uInt8>(nColor >> 8), static_cast<sal_uInt8>(nColor >> 16));
+        Color aColor( COL_BLACK );
+        if ( ( nColor & 0xFFFF0000 ) == 0x01000000 )
+        {
+            size_t index = nColor & 0x0000FFFF;
+            if ( index < maPalette.aPaletteColors.size() )
+                aColor = maPalette.aPaletteColors[ index ];
+            else
+                SAL_INFO( "emfio", "\t\t Palette index out of range: " << 
index );
+        }
+        else
+            aColor = Color( static_cast<sal_uInt8>( nColor ), 
static_cast<sal_uInt8>( nColor >> 8 ), static_cast<sal_uInt8>( nColor >> 16 ) );
 
         SAL_INFO("emfio", "\t\tColor: " << aColor);
-
         return aColor;
     };
 
@@ -850,12 +858,24 @@ namespace emfio
                 {
                     maFillStyle = *brush;
                     mbFillStyleSelected = true;
+                    SAL_INFO("emfio", "\t\tBrush Object, Index: " << nIndex << 
", Color: " << maFillStyle.aFillColor);
                 }
                 else if (const auto font = dynamic_cast<WinMtfFontStyle*>(
                              pGDIObj))
                 {
                     maFont = font->aFont;
+                    SAL_INFO("emfio", "\t\tFont Object, Index: " << nIndex << 
", Font: " << maFont.GetFamilyName() << " " << maFont.GetStyleName());
                 }
+                else if (const auto palette = dynamic_cast<WinMtfPalette*>(
+                             pGDIObj))
+                {
+                    maPalette = palette->aPaletteColors;
+                    SAL_INFO("emfio", "\t\tPalette Object, Index: " << nIndex 
<< ", Number of colours: " << maPalette.aPaletteColors.size() );
+                }
+            }
+            else
+            {
+                SAL_WARN("emfio", "Warning: Unable to find Object with index:" 
<< nIndex);
             }
         }
     }
@@ -1081,6 +1101,7 @@ namespace emfio
         maLatestFillStyle(),
         maFillStyle(),
         maNopFillStyle(),
+        maPalette(),
         maLatestFont(),
         maFont(),
         mnLatestTextAlign(90),
diff --git a/emfio/source/reader/wmfreader.cxx 
b/emfio/source/reader/wmfreader.cxx
index 5d97e8a3c734..7837c81b0fa0 100644
--- a/emfio/source/reader/wmfreader.cxx
+++ b/emfio/source/reader/wmfreader.cxx
@@ -675,6 +675,7 @@ namespace emfio
             break;
 
             case W_META_SELECTOBJECT:
+            case W_META_SELECTPALETTE:
             {
                 sal_Int16   nObjIndex = 0;
                 mpInputStream->ReadInt16( nObjIndex );
@@ -852,7 +853,22 @@ namespace emfio
 
             case W_META_CREATEPALETTE:
             {
-                CreateObject();
+                sal_uInt16 nStart = 0;
+                sal_uInt16 nNumberOfEntries = 0;
+                mpInputStream->ReadUInt16( nStart );
+                mpInputStream->ReadUInt16( nNumberOfEntries );
+
+                SAL_INFO("emfio", "\t\t Start 0x" << std::hex << nStart << 
std::dec << ", Number of entries: " << nNumberOfEntries);
+                sal_uInt32 nPalleteEntry;
+                std::vector< Color > aPaletteColors;
+                for (sal_uInt16 i = 0; i < nNumberOfEntries; ++i)
+                {
+                    //PALETTEENTRY: Values, Blue, Green, Red
+                    mpInputStream->ReadUInt32( nPalleteEntry );
+                    SAL_INFO("emfio", "\t\t " << i << ". Palette entry: " << 
std::setw(10) << std::showbase <<std::hex << nPalleteEntry << std::dec );
+                    
aPaletteColors.push_back(Color(static_cast<sal_uInt8>(nPalleteEntry), 
static_cast<sal_uInt8>(nPalleteEntry >> 8), 
static_cast<sal_uInt8>(nPalleteEntry >> 16)));
+                }
+                CreateObject(std::make_unique<WinMtfPalette>( aPaletteColors 
));
             }
             break;
 
@@ -1219,7 +1235,6 @@ namespace emfio
             case W_META_DRAWTEXT:
             case W_META_SETMAPPERFLAGS:
             case W_META_SETDIBTODEV:
-            case W_META_SELECTPALETTE:
             case W_META_REALIZEPALETTE:
             case W_META_ANIMATEPALETTE:
             case W_META_SETPALENTRIES:
commit 0c3042fb1d3a6e613e234309db89c397cb868c91
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu May 13 18:47:07 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    tdf#141571 Base crashed on creation of user function
    
    Revert "reportdesign/core: create instances with uno constructors"
    This reverts commit 79c1d1234bdac0d41109930529f42d39c70b0f7b.
    
    I have no idea what is causing this. Something is stomping
    on memory belonging to something else, but why?
    
    Change-Id: Ieb758e5788f07e3f477063274ccd0721e3bf7726
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115567
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit 9ca8a4e229d270fe7ec16f3aa7b5cb2e1f8a522f)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115515
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/reportdesign/Library_rpt.mk b/reportdesign/Library_rpt.mk
index 0ea86b62f0db..fb846e09ee8a 100644
--- a/reportdesign/Library_rpt.mk
+++ b/reportdesign/Library_rpt.mk
@@ -66,6 +66,7 @@ $(eval $(call gb_Library_add_exception_objects,rpt,\
     reportdesign/source/core/api/ReportEngineJFree \
     reportdesign/source/core/api/ReportVisitor \
     reportdesign/source/core/api/Section \
+    reportdesign/source/core/api/services \
     reportdesign/source/core/api/Shape \
     reportdesign/source/core/api/Tools \
     reportdesign/source/core/misc/conditionalexpression \
diff --git a/reportdesign/inc/ReportDefinition.hxx 
b/reportdesign/inc/ReportDefinition.hxx
index eede1cd61090..50973000d493 100644
--- a/reportdesign/inc/ReportDefinition.hxx
+++ b/reportdesign/inc/ReportDefinition.hxx
@@ -173,6 +173,13 @@ namespace reportdesign
                                   ,const css::uno::Reference< 
css::lang::XMultiServiceFactory > & _xFactory
                                   ,css::uno::Reference< css::drawing::XShape 
>& _xShape);
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
+
         css::uno::Reference< css::uno::XComponentContext > getContext();
 
     private:
diff --git a/reportdesign/source/core/api/FixedLine.cxx 
b/reportdesign/source/core/api/FixedLine.cxx
index 42082bfc3e95..94a8f8515201 100644
--- a/reportdesign/source/core/api/FixedLine.cxx
+++ b/reportdesign/source/core/api/FixedLine.cxx
@@ -200,14 +200,33 @@ void SAL_CALL OFixedLine::dispose()
     cppu::WeakComponentImplHelperBase::dispose();
 }
 
-OUString SAL_CALL OFixedLine::getImplementationName(  )
+OUString OFixedLine::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OFixedLine";
 }
 
+
+OUString SAL_CALL OFixedLine::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OFixedLine::getSupportedServiceNames_Static(  )
+{
+    uno::Sequence< OUString > aServices { SERVICE_FIXEDLINE };
+
+    return aServices;
+}
+
+uno::Reference< uno::XInterface > OFixedLine::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OFixedLine(xContext));
+}
+
+
 uno::Sequence< OUString > SAL_CALL OFixedLine::getSupportedServiceNames(  )
 {
-    return { SERVICE_FIXEDLINE };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OFixedLine::supportsService(const OUString& ServiceName)
@@ -543,11 +562,4 @@ void SAL_CALL OFixedLine::setPrintRepeatedValues( sal_Bool 
/*_printrepeatedvalue
 } // namespace reportdesign
 
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OFixedLine_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OFixedLine(context));
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/FixedText.cxx 
b/reportdesign/source/core/api/FixedText.cxx
index 589d68946406..5beaa5481667 100644
--- a/reportdesign/source/core/api/FixedText.cxx
+++ b/reportdesign/source/core/api/FixedText.cxx
@@ -88,14 +88,33 @@ void SAL_CALL OFixedText::dispose()
     uno::Reference< report::XFixedText> xHoldAlive = this;
 }
 
-OUString SAL_CALL OFixedText::getImplementationName(  )
+OUString OFixedText::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OFixedText";
 }
 
+
+OUString SAL_CALL OFixedText::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OFixedText::getSupportedServiceNames_Static(  )
+{
+    uno::Sequence< OUString > aServices { SERVICE_FIXEDTEXT };
+
+    return aServices;
+}
+
+uno::Reference< uno::XInterface > OFixedText::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OFixedText(xContext));
+}
+
+
 uno::Sequence< OUString > SAL_CALL OFixedText::getSupportedServiceNames(  )
 {
-    return { SERVICE_FIXEDTEXT };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OFixedText::supportsService(const OUString& ServiceName)
@@ -300,12 +319,5 @@ OUString SAL_CALL OFixedText::getShapeType(  )
 
 } // namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OFixedText_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OFixedText(context));
-}
-
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/FormatCondition.cxx 
b/reportdesign/source/core/api/FormatCondition.cxx
index a515b76d24d9..04558f710ed9 100644
--- a/reportdesign/source/core/api/FormatCondition.cxx
+++ b/reportdesign/source/core/api/FormatCondition.cxx
@@ -27,6 +27,12 @@ namespace reportdesign
 
     using namespace com::sun::star;
 
+uno::Reference< uno::XInterface > OFormatCondition::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OFormatCondition(xContext));
+}
+
+
 OFormatCondition::OFormatCondition(uno::Reference< uno::XComponentContext > 
const & _xContext)
 :FormatConditionBase(m_aMutex)
 ,FormatConditionPropertySet(_xContext,IMPLEMENTS_PROPERTY_SET,uno::Sequence< 
OUString >())
@@ -46,14 +52,27 @@ void SAL_CALL OFormatCondition::dispose()
     cppu::WeakComponentImplHelperBase::dispose();
 }
 
-OUString SAL_CALL OFormatCondition::getImplementationName(  )
+OUString OFormatCondition::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OFormatCondition";
 }
 
+
+OUString SAL_CALL OFormatCondition::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OFormatCondition::getSupportedServiceNames_Static(  )
+{
+    uno::Sequence< OUString > aServices { SERVICE_FORMATCONDITION };
+
+    return aServices;
+}
+
 uno::Sequence< OUString > SAL_CALL OFormatCondition::getSupportedServiceNames( 
 )
 {
-    return { SERVICE_FORMATCONDITION };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OFormatCondition::supportsService(const OUString& 
ServiceName)
@@ -124,11 +143,5 @@ 
REPORTCONTROLFORMAT_IMPL(OFormatCondition,m_aFormatProperties)
 
 } // namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OFormatCondition_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OFormatCondition(context));
-}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/FormattedField.cxx 
b/reportdesign/source/core/api/FormattedField.cxx
index 81553f9d7672..9414e87e6424 100644
--- a/reportdesign/source/core/api/FormattedField.cxx
+++ b/reportdesign/source/core/api/FormattedField.cxx
@@ -35,6 +35,11 @@ namespace reportdesign
     using namespace com::sun::star;
     using namespace comphelper;
 
+uno::Reference< uno::XInterface > OFormattedField::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OFormattedField(xContext));
+}
+
 static uno::Sequence< OUString > lcl_getFormattedFieldOptionals()
 {
     OUString pProps[] = { 
OUString(PROPERTY_MASTERFIELDS),OUString(PROPERTY_DETAILFIELDS) };
@@ -92,16 +97,27 @@ void SAL_CALL OFormattedField::dispose()
     m_xFormatsSupplier.clear();
 }
 
-OUString SAL_CALL OFormattedField::getImplementationName(  )
+OUString OFormattedField::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OFormattedField";
 }
 
-uno::Sequence< OUString > SAL_CALL OFormattedField::getSupportedServiceNames(  
)
+
+OUString SAL_CALL OFormattedField::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OFormattedField::getSupportedServiceNames_Static(  )
 {
     return { SERVICE_FORMATTEDFIELD, 
"com.sun.star.awt.UnoControlFormattedFieldModel" };
 }
 
+uno::Sequence< OUString > SAL_CALL OFormattedField::getSupportedServiceNames(  
)
+{
+    return getSupportedServiceNames_Static();
+}
+
 sal_Bool SAL_CALL OFormattedField::supportsService(const OUString& ServiceName)
 {
     return cppu::supportsService(this, ServiceName);
@@ -341,12 +357,5 @@ OUString SAL_CALL OFormattedField::getShapeType(  )
 
 } // namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OFormattedField_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OFormattedField(context));
-}
-
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/Function.cxx 
b/reportdesign/source/core/api/Function.cxx
index 61844eaad3bd..55150a992bf3 100644
--- a/reportdesign/source/core/api/Function.cxx
+++ b/reportdesign/source/core/api/Function.cxx
@@ -25,6 +25,11 @@ namespace reportdesign
 
     using namespace com::sun::star;
 
+uno::Reference< uno::XInterface > OFunction::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OFunction(xContext));
+}
+
 
 OFunction::OFunction(uno::Reference< uno::XComponentContext > const & 
_xContext)
 :FunctionBase(m_aMutex)
@@ -47,14 +52,27 @@ void SAL_CALL OFunction::dispose()
     cppu::WeakComponentImplHelperBase::dispose();
 }
 
-OUString SAL_CALL OFunction::getImplementationName(  )
+OUString OFunction::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OFunction";
 }
 
+
+OUString SAL_CALL OFunction::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OFunction::getSupportedServiceNames_Static(  )
+{
+    uno::Sequence< OUString > aServices { SERVICE_FUNCTION };
+
+    return aServices;
+}
+
 uno::Sequence< OUString > SAL_CALL OFunction::getSupportedServiceNames(  )
 {
-    return { SERVICE_FUNCTION };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OFunction::supportsService(const OUString& ServiceName)
@@ -179,12 +197,5 @@ void SAL_CALL OFunction::setParent( const uno::Reference< 
uno::XInterface >& Par
 
 } // namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OFunction_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OFunction(context));
-}
-
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/ImageControl.cxx 
b/reportdesign/source/core/api/ImageControl.cxx
index 1d08baa1aa6a..7c72b84fb50e 100644
--- a/reportdesign/source/core/api/ImageControl.cxx
+++ b/reportdesign/source/core/api/ImageControl.cxx
@@ -161,14 +161,33 @@ void SAL_CALL OImageControl::dispose()
     cppu::WeakComponentImplHelperBase::dispose();
 }
 
-OUString SAL_CALL OImageControl::getImplementationName(  )
+OUString OImageControl::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OImageControl";
 }
 
+
+OUString SAL_CALL OImageControl::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OImageControl::getSupportedServiceNames_Static(  )
+{
+    uno::Sequence< OUString > aServices { SERVICE_IMAGECONTROL };
+
+    return aServices;
+}
+
+uno::Reference< uno::XInterface > OImageControl::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OImageControl(xContext));
+}
+
+
 uno::Sequence< OUString > SAL_CALL OImageControl::getSupportedServiceNames(  )
 {
-    return { SERVICE_IMAGECONTROL };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OImageControl::supportsService(const OUString& ServiceName)
@@ -459,12 +478,5 @@ void SAL_CALL OImageControl::setPreserveIRI( sal_Bool 
_preserveiri )
 
 } // namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OImageControl_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OImageControl(context));
-}
-
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/ReportDefinition.cxx 
b/reportdesign/source/core/api/ReportDefinition.cxx
index 4ae9e44be52b..f999de3ecfcd 100644
--- a/reportdesign/source/core/api/ReportDefinition.cxx
+++ b/reportdesign/source/core/api/ReportDefinition.cxx
@@ -673,11 +673,23 @@ void SAL_CALL OReportDefinition::disposing()
 }
 
 
-OUString SAL_CALL OReportDefinition::getImplementationName(  )
+OUString OReportDefinition::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OReportDefinition";
 }
 
+OUString SAL_CALL OReportDefinition::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OReportDefinition::getSupportedServiceNames_Static(  
)
+{
+    uno::Sequence< OUString > aServices { SERVICE_REPORTDEFINITION };
+
+    return aServices;
+}
+
 uno::Sequence< OUString > SAL_CALL 
OReportDefinition::getSupportedServiceNames(  )
 {
     // first collect the services which are supported by our aggregate
@@ -720,6 +732,11 @@ uno::Sequence< uno::Type > SAL_CALL 
OReportDefinition::getTypes(  )
     return ReportDefinitionBase::getTypes();
 }
 
+uno::Reference< uno::XInterface > OReportDefinition::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OReportDefinition(xContext));
+}
+
 // XReportDefinition
 OUString SAL_CALL OReportDefinition::getCaption()
 {
@@ -2655,11 +2672,4 @@ uno::Reference< document::XUndoManager > SAL_CALL 
OReportDefinition::getUndoMana
 
 }// namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OReportDefinition_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OReportDefinition(context));
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/ReportEngineJFree.cxx 
b/reportdesign/source/core/api/ReportEngineJFree.cxx
index d8ead8f8eb88..ec92f26af23e 100644
--- a/reportdesign/source/core/api/ReportEngineJFree.cxx
+++ b/reportdesign/source/core/api/ReportEngineJFree.cxx
@@ -73,14 +73,33 @@ void SAL_CALL OReportEngineJFree::dispose()
     m_xActiveConnection.clear();
 }
 
-OUString SAL_CALL OReportEngineJFree::getImplementationName(  )
+OUString OReportEngineJFree::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.OReportEngineJFree";
 }
 
+
+OUString SAL_CALL OReportEngineJFree::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OReportEngineJFree::getSupportedServiceNames_Static( 
 )
+{
+    uno::Sequence< OUString > aServices { "com.sun.star.report.ReportEngine" };
+
+    return aServices;
+}
+
+uno::Reference< uno::XInterface > OReportEngineJFree::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OReportEngineJFree(xContext));
+}
+
+
 uno::Sequence< OUString > SAL_CALL 
OReportEngineJFree::getSupportedServiceNames(  )
 {
-    return { "com.sun.star.report.ReportEngine" };
+    return getSupportedServiceNames_Static();
 }
 
 sal_Bool SAL_CALL OReportEngineJFree::supportsService(const OUString& 
ServiceName)
@@ -360,11 +379,4 @@ void SAL_CALL OReportEngineJFree::setMaxRows( ::sal_Int32 
MaxRows )
 } // namespace reportdesign
 
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OReportEngineJFree_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OReportEngineJFree(context));
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/Shape.cxx 
b/reportdesign/source/core/api/Shape.cxx
index 077031c5c9aa..daafbd47ff0f 100644
--- a/reportdesign/source/core/api/Shape.cxx
+++ b/reportdesign/source/core/api/Shape.cxx
@@ -107,17 +107,33 @@ void SAL_CALL OShape::dispose()
     cppu::WeakComponentImplHelperBase::dispose();
 }
 
+uno::Reference< uno::XInterface > OShape::create(uno::Reference< 
uno::XComponentContext > const & xContext)
+{
+    return *(new OShape(xContext));
+}
 
-OUString SAL_CALL OShape::getImplementationName(  )
+
+OUString OShape::getImplementationName_Static(  )
 {
     return "com.sun.star.comp.report.Shape";
 }
 
+
+OUString SAL_CALL OShape::getImplementationName(  )
+{
+    return getImplementationName_Static();
+}
+
+uno::Sequence< OUString > OShape::getSupportedServiceNames_Static(  )
+{
+    return { SERVICE_SHAPE };
+}
+
 uno::Sequence< OUString > SAL_CALL OShape::getSupportedServiceNames(  )
 {
     if(m_sServiceName.isEmpty())
     {
-        return { SERVICE_SHAPE };
+        return getSupportedServiceNames_Static();
     }
     else
     {
@@ -482,12 +498,5 @@ void SAL_CALL OShape::setCustomShapeGeometry( const 
uno::Sequence< beans::Proper
 
 }// namespace reportdesign
 
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-reportdesign_OShape_get_implementation(
-    css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> 
const&)
-{
-    return cppu::acquire(new reportdesign::OShape(context));
-}
-
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/api/services.cxx 
b/reportdesign/source/core/api/services.cxx
new file mode 100644
index 000000000000..de07c51e8c22
--- /dev/null
+++ b/reportdesign/source/core/api/services.cxx
@@ -0,0 +1,82 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#include <sal/types.h>
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/implementationentry.hxx>
+#include <ReportDefinition.hxx>
+#include <FormattedField.hxx>
+#include <FixedText.hxx>
+#include <ImageControl.hxx>
+#include <FormatCondition.hxx>
+#include <ReportEngineJFree.hxx>
+#include <Function.hxx>
+#include <Shape.hxx>
+#include <FixedLine.hxx>
+
+/********************************************************************************************/
+
+using namespace ::reportdesign;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::registry;
+
+// registry functions
+namespace
+{
+cppu::ImplementationEntry const entries[]
+    = { { &OReportDefinition::create, 
&OReportDefinition::getImplementationName_Static,
+          &OReportDefinition::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OFormattedField::create, 
&OFormattedField::getImplementationName_Static,
+          &OFormattedField::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OFixedText::create, &OFixedText::getImplementationName_Static,
+          &OFixedText::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OImageControl::create, &OImageControl::getImplementationName_Static,
+          &OImageControl::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OFormatCondition::create, 
&OFormatCondition::getImplementationName_Static,
+          &OFormatCondition::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OReportEngineJFree::create, 
&OReportEngineJFree::getImplementationName_Static,
+          &OReportEngineJFree::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { &OFunction::create, &OFunction::getImplementationName_Static,
+          &OFunction::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory, nullptr,
+          0 },
+        { &OShape::create, &OShape::getImplementationName_Static,
+          &OShape::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory, nullptr,
+          0 },
+        { &OFixedLine::create, &OFixedLine::getImplementationName_Static,
+          &OFixedLine::getSupportedServiceNames_Static, 
&cppu::createSingleComponentFactory,
+          nullptr, 0 },
+        { nullptr, nullptr, nullptr, nullptr, nullptr, 0 } };
+}
+
+extern "C" {
+SAL_DLLPUBLIC_EXPORT void* rpt_component_getFactory(char const* implName, 
void* serviceManager,
+                                                    void* registryKey)
+{
+    return cppu::component_getFactoryHelper(implName, serviceManager, 
registryKey, entries);
+}
+
+} // extern "C"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/core/inc/FixedLine.hxx 
b/reportdesign/source/core/inc/FixedLine.hxx
index f3f77a63704d..5d726a85ed97 100644
--- a/reportdesign/source/core/inc/FixedLine.hxx
+++ b/reportdesign/source/core/inc/FixedLine.hxx
@@ -83,6 +83,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/FixedText.hxx 
b/reportdesign/source/core/inc/FixedText.hxx
index 396a0d145be2..03126ab30e5f 100644
--- a/reportdesign/source/core/inc/FixedText.hxx
+++ b/reportdesign/source/core/inc/FixedText.hxx
@@ -111,6 +111,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/FormatCondition.hxx 
b/reportdesign/source/core/inc/FormatCondition.hxx
index be1506f25ca1..409b1198f7ef 100644
--- a/reportdesign/source/core/inc/FormatCondition.hxx
+++ b/reportdesign/source/core/inc/FormatCondition.hxx
@@ -107,6 +107,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/FormattedField.hxx 
b/reportdesign/source/core/inc/FormattedField.hxx
index 6606c48108e4..040b6af2dfbb 100644
--- a/reportdesign/source/core/inc/FormattedField.hxx
+++ b/reportdesign/source/core/inc/FormattedField.hxx
@@ -114,6 +114,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/Function.hxx 
b/reportdesign/source/core/inc/Function.hxx
index 3a5be94effe4..bf067c8068be 100644
--- a/reportdesign/source/core/inc/Function.hxx
+++ b/reportdesign/source/core/inc/Function.hxx
@@ -86,6 +86,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/ImageControl.hxx 
b/reportdesign/source/core/inc/ImageControl.hxx
index 00a218515036..63ed5468efc6 100644
--- a/reportdesign/source/core/inc/ImageControl.hxx
+++ b/reportdesign/source/core/inc/ImageControl.hxx
@@ -89,6 +89,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/source/core/inc/ReportEngineJFree.hxx 
b/reportdesign/source/core/inc/ReportEngineJFree.hxx
index 9816b551c44a..951dc93ce168 100644
--- a/reportdesign/source/core/inc/ReportEngineJFree.hxx
+++ b/reportdesign/source/core/inc/ReportEngineJFree.hxx
@@ -79,6 +79,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
     private:
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
diff --git a/reportdesign/source/core/inc/Shape.hxx 
b/reportdesign/source/core/inc/Shape.hxx
index 758d48ddf1c9..b7c9e6d882f9 100644
--- a/reportdesign/source/core/inc/Shape.hxx
+++ b/reportdesign/source/core/inc/Shape.hxx
@@ -121,6 +121,12 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) override;
         virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames(  ) override;
 
+        /// @throws css::uno::RuntimeException
+        static css::uno::Sequence< OUString > 
getSupportedServiceNames_Static();
+        /// @throws css::uno::RuntimeException
+        static OUString getImplementationName_Static();
+        static css::uno::Reference< css::uno::XInterface >
+            create(css::uno::Reference< css::uno::XComponentContext > const & 
xContext);
         // css::beans::XPropertySet
         virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
         virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
diff --git a/reportdesign/util/rpt.component b/reportdesign/util/rpt.component
index a44b941216e7..7b3be6603471 100644
--- a/reportdesign/util/rpt.component
+++ b/reportdesign/util/rpt.component
@@ -18,41 +18,32 @@
  -->
 
 <component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
-    xmlns="http://openoffice.org/2010/uno-components";>
-  <implementation name="com.sun.star.comp.report.OFixedLine"
-    constructor="reportdesign_OFixedLine_get_implementation">
+    prefix="rpt" xmlns="http://openoffice.org/2010/uno-components";>
+  <implementation name="com.sun.star.comp.report.OFixedLine">
     <service name="com.sun.star.report.FixedLine"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OFixedText"
-    constructor="reportdesign_OFixedText_get_implementation">
+  <implementation name="com.sun.star.comp.report.OFixedText">
     <service name="com.sun.star.report.FixedText"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OFormatCondition"
-    constructor="reportdesign_OFormatCondition_get_implementation">
+  <implementation name="com.sun.star.comp.report.OFormatCondition">
     <service name="com.sun.star.report.FormatCondition"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OFormattedField"
-    constructor="reportdesign_OFormattedField_get_implementation">
+  <implementation name="com.sun.star.comp.report.OFormattedField">
     <service name="com.sun.star.report.FormattedField"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OFunction"
-    constructor="reportdesign_OFunction_get_implementation">
+  <implementation name="com.sun.star.comp.report.OFunction">
     <service name="com.sun.star.report.Function"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OImageControl"
-    constructor="reportdesign_OImageControl_get_implementation">
+  <implementation name="com.sun.star.comp.report.OImageControl">
     <service name="com.sun.star.report.ImageControl"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OReportDefinition"
-    constructor="reportdesign_OReportDefinition_get_implementation">
+  <implementation name="com.sun.star.comp.report.OReportDefinition">
     <service name="com.sun.star.report.ReportDefinition"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.OReportEngineJFree"
-    constructor="reportdesign_OReportEngineJFree_get_implementation">
+  <implementation name="com.sun.star.comp.report.OReportEngineJFree">
     <service name="com.sun.star.report.ReportEngine"/>
   </implementation>
-  <implementation name="com.sun.star.comp.report.Shape"
-    constructor="reportdesign_OShape_get_implementation">
+  <implementation name="com.sun.star.comp.report.Shape">
     <service name="com.sun.star.report.Shape"/>
   </implementation>
 </component>
commit 5d0d380cfe4146ccc7abc283138021a6c40f0abf
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Thu May 13 20:11:19 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    tdf#142014 Fix displaying strokes when line width is 0
    
    Change-Id: I80e05ff2f24f5da2f5c124c0ee1b302a1c8226ea
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115570
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>
    (cherry picked from commit 699295ca7cab3a4f4e801a14496f202c05d18899)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115514
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 4629005984ed..fcdf2509f3a9 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -56,6 +56,7 @@ class Test : public test::BootstrapFixture, public 
XmlTestTools, public unotest:
     void TestEllipseXformIntersectClipRect();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
+    void TestPolylinetoCloseStroke();
     void TestPolyLineWidth();
     void TestRoundRect();
     void TestCreatePen();
@@ -82,6 +83,7 @@ public:
     CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
+    CPPUNIT_TEST(TestPolylinetoCloseStroke);
     CPPUNIT_TEST(TestPolyLineWidth);
     CPPUNIT_TEST(TestRoundRect);
     CPPUNIT_TEST(TestCreatePen);
@@ -438,6 +440,26 @@ void Test::TestFillRegion()
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
 }
 
+void Test::TestPolylinetoCloseStroke()
+{
+    // EMF import with records: BEGINPATH, ARC, ENDPATH, STROKEPATH, 
EXTCREATEPEN.
+    Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence));
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polygonhairline", 
2);
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/polygonhairline[1]/polygon",
+                       "1080,150 810,230 570,340 370,490 290,570 170,750 
130,840 100,980 100,1080 140,1270 160,1320 210,1410 400,1620 500,1690");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polygonhairline[1]",
+                "color", "#000000");
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/polygonhairline[2]/polygon",
+                       "1760,1120 1500,1180 1350,1240 1230,1310 1210,1330 
1120,1440 1110,1460 1100,1510 1100,1580 1140,1670 1170,1710 1190,1730");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polygonhairline[2]",
+                "color", "#000000");
+}
+
 void Test::TestPolyLineWidth()
 {
     // EMF import with records: CREATEPEN, ROUNDRECT.
diff --git a/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf 
b/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf
new file mode 100644
index 000000000000..e89e92272943
Binary files /dev/null and 
b/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf differ
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index bdae896a0e4e..989970c9cb8b 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -1305,11 +1305,15 @@ namespace emfio
                 mpGDIMetaFile->AddAction( new MetaPopAction() );
         }
         // tdf#142014 By default the stroke is made with hairline. If width is 
bigger, we need to use PolyLineAction
-        if ( bStroke && ( maLineStyle.aLineInfo.GetWidth() || ( 
maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) ) )
+        if ( bStroke )
         {
-            sal_uInt16 i, nCount = maPathObj.Count();
-            for ( i = 0; i < nCount; i++ )
-                mpGDIMetaFile->AddAction( new MetaPolyLineAction( maPathObj[ i 
], maLineStyle.aLineInfo ) );
+            // bFill is drawing hairstyle line. So we need to to draw it only 
when the width is different than 0
+            if ( !bFill || maLineStyle.aLineInfo.GetWidth() || ( 
maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) )
+            {
+                sal_uInt16 i, nCount = maPathObj.Count();
+                for ( i = 0; i < nCount; i++ )
+                    mpGDIMetaFile->AddAction( new MetaPolyLineAction( 
maPathObj[ i ], maLineStyle.aLineInfo ) );
+            }
         }
         ClearPath();
     }
commit 134d0e196e3924004561368f0bc7cf938ded67df
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Wed May 12 19:03:59 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    tdf#112603 tdf#142014 tdf#142139 WMF/EMF Fix line width
    
    Previosly line width was always 1, and changing width do not affect
    line.
    
    Change-Id: I462096b915e053fa089e85860f124466b650558a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115497
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>
    (cherry picked from commit b5ece3fbc7f878846298fd9196e5a30ba50e0dc2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115512
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 52fab033941a..4629005984ed 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -56,6 +56,7 @@ class Test : public test::BootstrapFixture, public 
XmlTestTools, public unotest:
     void TestEllipseXformIntersectClipRect();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
+    void TestPolyLineWidth();
     void TestRoundRect();
     void TestCreatePen();
     void TestPdfInEmf();
@@ -81,6 +82,7 @@ public:
     CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
+    CPPUNIT_TEST(TestPolyLineWidth);
     CPPUNIT_TEST(TestRoundRect);
     CPPUNIT_TEST(TestCreatePen);
     CPPUNIT_TEST(TestPdfInEmf);
@@ -436,6 +438,28 @@ void Test::TestFillRegion()
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
 }
 
+void Test::TestPolyLineWidth()
+{
+    // EMF import with records: CREATEPEN, ROUNDRECT.
+    Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence));
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polypolygoncolor/polypolygon",
+                "path", "m530 529 1236-176-707 352z");
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polypolygoncolor",
+                "color", "#ffff00");
+
+    assertXPathContent(pDocument, 
"/primitive2D/metafile/transform/polygonstroke/polygon",
+                       "530,529 530,529 1766,353 1059,705");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polygonstroke/line",
+                "color", "#000000");
+    assertXPath(pDocument, 
"/primitive2D/metafile/transform/polygonstroke/line",
+                "width", "71");
+}
+
 void Test::TestRoundRect()
 {
     // EMF import with records: CREATEPEN, ROUNDRECT.
diff --git a/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf 
b/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf
new file mode 100644
index 000000000000..792694fa8c99
Binary files /dev/null and b/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf 
differ
diff --git a/emfio/source/reader/mtftools.cxx b/emfio/source/reader/mtftools.cxx
index d54e0ff763ae..bdae896a0e4e 100644
--- a/emfio/source/reader/mtftools.cxx
+++ b/emfio/source/reader/mtftools.cxx
@@ -1304,7 +1304,8 @@ namespace emfio
             if ( !bStroke )
                 mpGDIMetaFile->AddAction( new MetaPopAction() );
         }
-        else
+        // tdf#142014 By default the stroke is made with hairline. If width is 
bigger, we need to use PolyLineAction
+        if ( bStroke && ( maLineStyle.aLineInfo.GetWidth() || ( 
maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) ) )
         {
             sal_uInt16 i, nCount = maPathObj.Count();
             for ( i = 0; i < nCount; i++ )
@@ -1390,6 +1391,13 @@ namespace emfio
         UpdateLineStyle();
         UpdateFillStyle();
         mpGDIMetaFile->AddAction( new MetaRoundRectAction( ImplMap( rRect ), 
std::abs( ImplMap( rSize ).Width() ), std::abs( ImplMap( rSize ).Height() ) ) );
+        // tdf#142139 Wrong line width during WMF import
+        if ( maLineStyle.aLineInfo.GetWidth() || ( 
maLineStyle.aLineInfo.GetStyle() == LineStyle::Dash ) )
+        {
+            tools::Polygon aRoundRectPoly( rRect, rSize.Width(), 
rSize.Height() );
+            aRoundRectPoly.Optimize( PolyOptimizeFlags::EDGES );
+            mpGDIMetaFile->AddAction( new MetaPolyLineAction( ImplMap( 
aRoundRectPoly ), maLineStyle.aLineInfo ) );
+        }
     }
 
     void MtfTools::DrawEllipse( const tools::Rectangle& rRect )
commit b87b4d5af52b574ad840d19172643fd336e2b3e3
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed May 12 13:23:22 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    fix some VirtualDevice leaks
    
    Change-Id: I645543fa27ca8b75b36ed7798f0af7b81fd09f49
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115488
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/controller/dialogs/DataBrowser.cxx 
b/chart2/source/controller/dialogs/DataBrowser.cxx
index eabbdd42ace0..a075e5dc30af 100644
--- a/chart2/source/controller/dialogs/DataBrowser.cxx
+++ b/chart2/source/controller/dialogs/DataBrowser.cxx
@@ -302,7 +302,7 @@ void SeriesHeader::SetPos()
     aSize.setWidth(m_nWidth);
     m_spColorBar->set_size_request(aSize.Width(), aSize.Height());
 
-    auto xVirDev(m_spColorBar->create_virtual_device());
+    ScopedVclPtr<VirtualDevice> xVirDev(m_spColorBar->create_virtual_device());
     xVirDev->SetOutputSizePixel(aSize);
     xVirDev->SetFillColor(m_aColor);
     xVirDev->SetLineColor(m_aColor);
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx
index e8b176763c56..ca5a2eb5ec89 100644
--- a/sfx2/source/dialog/infobar.cxx
+++ b/sfx2/source/dialog/infobar.cxx
@@ -103,7 +103,7 @@ void SfxInfoBarWindow::SetCloseButtonImage()
     Size aSize = Image(StockImage::Yes, CLOSEDOC).GetSizePixel();
     aSize = Size(aSize.Width() * 1.5, aSize.Height() * 1.5);
 
-    VclPtr<VirtualDevice> xDevice(m_xCloseBtn->create_virtual_device());
+    ScopedVclPtr<VirtualDevice> xDevice(m_xCloseBtn->create_virtual_device());
     xDevice->SetOutputSizePixel(aSize);
 
     Point aBtnPos(0, 0);
diff --git a/svx/inc/galbrws2.hxx b/svx/inc/galbrws2.hxx
index bbf13cff5c3f..90d7c4a562cf 100644
--- a/svx/inc/galbrws2.hxx
+++ b/svx/inc/galbrws2.hxx
@@ -85,7 +85,7 @@ private:
     std::unique_ptr<weld::ToggleButton> mxIconButton;
     std::unique_ptr<weld::ToggleButton> mxListButton;
     std::unique_ptr<weld::Label> mxInfoBar;
-    VclPtr<VirtualDevice> mxDev;
+    ScopedVclPtr<VirtualDevice> mxDev;
     Size maPreviewSize;
     rtl::Reference<GalleryTransferable> m_xHelper;
     sal_uInt32 mnCurActionPos;
commit 690e841b4b1d0d6394f42670bc6293984ba689bc
Author:     Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
AuthorDate: Sun May 9 01:30:40 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    tdf#141307: adapt null-check
    
    - if we check pNd for nullptr, we need to expect it to be nullptr
    - in that case we shouldnt use the pointer before the null check
    
    Change-Id: Ia9d11abe32fac10f36fdbfcefeadd51891f1834e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115264
    Tested-by: Jenkins
    Reviewed-by: Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
    (cherry picked from commit b0ae5aaaafd236663f7e81af06a567ade8a2a745)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115287
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/core/access/accnotextframe.cxx 
b/sw/source/core/access/accnotextframe.cxx
index 3dfed9ea3303..d8f37887b4a4 100644
--- a/sw/source/core/access/accnotextframe.cxx
+++ b/sw/source/core/access/accnotextframe.cxx
@@ -63,11 +63,11 @@ SwAccessibleNoTextFrame::SwAccessibleNoTextFrame(
     msDesc()
 {
     const SwNoTextNode* pNd = GetNoTextNode();
-    StartListening(const_cast<SwNoTextNode*>(pNd)->GetNotifier());
     // #i73249#
     // consider new attributes Title and Description
     if( pNd )
     {
+        StartListening(const_cast<SwNoTextNode*>(pNd)->GetNotifier());
         msTitle = pNd->GetTitle();
 
         msDesc = pNd->GetDescription();
commit 7e0665231813cc155f714ed1f39120ae7efea26e
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Mon May 10 16:51:21 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:23 2021 +0200

    Resolves: tdf#142186 Accept 123.45 fractional input on weird formats like 
0"."
    
    ... or 0"."0 where the literal "." is also the decimal separator
    but can only occur in the integer part.
    
    Change-Id: I95093fdddf7759346f2869ee322222de3d130e55
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115338
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit 3561978410579c5222889eb7dce68f917b550334)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115277
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index eff5d48d9755..edf75a004244 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -3510,7 +3510,12 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const 
OUString& rString,        /
         }
         else if ( bDidMatch )
         {
-            return false;
+            // Accept a plain fractional number like 123.45 as there may be a
+            // decimal separator also present as literal like in a 0"."0 weirdo
+            // format.
+            if (nDecPos != 2 || nNumericsCnt != 2)
+                return false;
+            eScannedType = SvNumFormatType::NUMBER;
         }
         else
         {
@@ -3756,10 +3761,12 @@ bool ImpSvNumberInputScan::IsNumberFormat( const 
OUString& rString,         // s
             case SvNumFormatType::NUMBER:
                 if (nDecPos == 1)               // .05
                 {
-                    // matched MidStrings function like group separators
+                    // Matched MidStrings function like group separators, but
+                    // there can't be an integer part numeric input, so
+                    // effectively 0 thousands groups.
                     if ( nMatchedAllStrings )
                     {
-                        nThousand = nNumericsCnt - 1;
+                        nThousand = 0;
                     }
                     else if ( nNumericsCnt != 1 )
                     {
@@ -3768,10 +3775,21 @@ bool ImpSvNumberInputScan::IsNumberFormat( const 
OUString& rString,         // s
                 }
                 else if (nDecPos == 2)          // 1.05
                 {
-                    // matched MidStrings function like group separators
+                    // Matched MidStrings function like group separators, but
+                    // let a decimal separator override a literal separator
+                    // string; like 0"." with input 123.45
                     if ( nMatchedAllStrings )
                     {
-                        nThousand = nNumericsCnt - 1;
+                        if (nNumericsCnt == 2)
+                            nThousand = 0;
+                        else
+                        {
+                            // Assume that if there was a decimal separator
+                            // matching also a literal string then it was the
+                            // last. We could find the last possible match to
+                            // support literals in fractions, but really..
+                            nThousand = nNumericsCnt - 1;
+                        }
                     }
                     else if ( nNumericsCnt != nThousand+2 )
                     {
commit faa87bbfd05a3ff57b48b91999b350c66f621e02
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Tue May 11 17:24:20 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun May 16 23:47:22 2021 +0200

    tdf#141982 tdf#142139 Add rotation and line width support to ROUNDRECT
    
    With this commit the ROUNDRECT is able to change line width and
    transformation (including rotation) is supported.
    
    Change-Id: Ic303a74adf0fd0dd452353f250a13140603d492e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115429
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>
    (cherry picked from commit f11ed681df15728abe6a0b6b7b1612f190aa1707)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115282
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 8dc864fb657e..52fab033941a 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -56,6 +56,7 @@ class Test : public test::BootstrapFixture, public 
XmlTestTools, public unotest:
     void TestEllipseXformIntersectClipRect();
     void TestDrawPolyLine16WithClip();
     void TestFillRegion();
+    void TestRoundRect();
     void TestCreatePen();
     void TestPdfInEmf();
 
@@ -80,6 +81,7 @@ public:
     CPPUNIT_TEST(TestEllipseXformIntersectClipRect);
     CPPUNIT_TEST(TestDrawPolyLine16WithClip);
     CPPUNIT_TEST(TestFillRegion);
+    CPPUNIT_TEST(TestRoundRect);
     CPPUNIT_TEST(TestCreatePen);
     CPPUNIT_TEST(TestPdfInEmf);
     CPPUNIT_TEST_SUITE_END();
@@ -414,7 +416,7 @@ void Test::TestDrawPolyLine16WithClip()
 
 void Test::TestFillRegion()
 {
-    // Check import of EMF image with records: CREATEBRUSHINDIRECT, FILLRGN. 
The SETICMMODE is also used.
+    // EMF import with records: CREATEBRUSHINDIRECT, FILLRGN. The SETICMMODE 
is also used.
     Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/emf/data/TestFillRegion.emf");
     CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
     drawinglayer::Primitive2dXmlDump dumper;
@@ -434,6 +436,38 @@ void Test::TestFillRegion()
     assertXPath(pDocument, 
"/primitive2D/metafile/transform/mask/polygonhairline[1]", "color", "#000000");
 }
 
+void Test::TestRoundRect()
+{
+    // EMF import with records: CREATEPEN, ROUNDRECT.
+    Primitive2DSequence aSequence = 
parseEmf(u"/emfio/qa/cppunit/emf/data/TestRoundRect.emf");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence));
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, "/primitive2D/metafile/transform/polypolygoncolor", 
2);

... etc. - the rest is truncated
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to