[Libreoffice-commits] core.git: compilerplugins/clang include/basic include/comphelper include/connectivity include/drawinglayer include/editeng include/filter include/oox include/registry include/sfx2 include/sot include/svl include/svtools include/svx include/toolkit include/vbahelper include/vcl vcl/inc vcl/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Sat Jun 19 12:11:49 UTC 2021


 compilerplugins/clang/finalclasses.cxx                    |    4 +-
 compilerplugins/clang/finalclasses.py                     |    2 -
 include/basic/basmgr.hxx                                  |    4 --
 include/basic/sbmeth.hxx                                  |    2 -
 include/basic/sbmod.hxx                                   |    2 -
 include/basic/sbstar.hxx                                  |    7 ---
 include/basic/sbx.hxx                                     |    3 -
 include/comphelper/SelectionMultiplex.hxx                 |    4 +-
 include/comphelper/accessiblewrapper.hxx                  |    8 +---
 include/comphelper/configurationlistener.hxx              |    5 +-
 include/comphelper/containermultiplexer.hxx               |    2 -
 include/comphelper/propmultiplex.hxx                      |    4 +-
 include/connectivity/PColumn.hxx                          |    6 +--
 include/connectivity/dbcharset.hxx                        |    1 
 include/connectivity/sqlscan.hxx                          |    2 -
 include/drawinglayer/primitive2d/Primitive2DContainer.hxx |    2 -
 include/editeng/colritem.hxx                              |    2 -
 include/editeng/unotext.hxx                               |    4 +-
 include/filter/msfilter/mstoolbar.hxx                     |    4 +-
 include/oox/ole/axbinaryreader.hxx                        |   12 +++---
 include/oox/ole/axbinarywriter.hxx                        |    6 +--
 include/registry/registry.hxx                             |   12 +++---
 include/sfx2/bindings.hxx                                 |    2 -
 include/sfx2/linkmgr.hxx                                  |    2 -
 include/sfx2/objsh.hxx                                    |    1 
 include/sfx2/sidebar/SidebarController.hxx                |    2 -
 include/sfx2/viewfrm.hxx                                  |    6 ---
 include/sfx2/zoomitem.hxx                                 |    2 -
 include/sot/stg.hxx                                       |    6 +--
 include/sot/storage.hxx                                   |    3 -
 include/svl/itemset.hxx                                   |    4 +-
 include/svtools/brwbox.hxx                                |    4 +-
 include/svtools/editbrowsebox.hxx                         |   19 ++++-----
 include/svx/EnhancedCustomShape2d.hxx                     |    2 -
 include/svx/bmpmask.hxx                                   |    2 -
 include/svx/float3d.hxx                                   |    6 +--
 include/svx/fmsrcimp.hxx                                  |    4 +-
 include/svx/fmtools.hxx                                   |    2 -
 include/svx/gallerybinaryengine.hxx                       |    2 -
 include/svx/gallerybinaryengineentry.hxx                  |    2 -
 include/svx/gallerybinarystoragelocations.hxx             |    2 -
 include/svx/galtheme.hxx                                  |    2 -
 include/svx/graphctl.hxx                                  |    4 --
 include/svx/hlnkitem.hxx                                  |    2 -
 include/svx/imapdlg.hxx                                   |    2 -
 include/svx/nbdtmg.hxx                                    |    4 +-
 include/svx/rubydialog.hxx                                |    2 -
 include/svx/scene3d.hxx                                   |    5 +-
 include/svx/sdasitm.hxx                                   |    2 -
 include/svx/sdgcpitm.hxx                                  |    2 -
 include/svx/sdggaitm.hxx                                  |    2 -
 include/svx/sdgluitm.hxx                                  |    4 +-
 include/svx/sdgmoitm.hxx                                  |    2 -
 include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx      |    5 +-
 include/svx/sdtaditm.hxx                                  |    2 -
 include/svx/sdtaitm.hxx                                   |    4 +-
 include/svx/sdtakitm.hxx                                  |    2 -
 include/svx/sdtfsitm.hxx                                  |    2 -
 include/svx/srchdlg.hxx                                   |    2 -
 include/svx/svdhdl.hxx                                    |    4 --
 include/svx/svdlayer.hxx                                  |    2 -
 include/svx/svdoedge.hxx                                  |    5 +-
 include/svx/svdograf.hxx                                  |    3 -
 include/svx/svdomeas.hxx                                  |    5 --
 include/svx/svdpage.hxx                                   |    2 -
 include/svx/svx3ditems.hxx                                |   22 +++++------
 include/svx/sxcecitm.hxx                                  |    8 ++--
 include/svx/sxcllitm.hxx                                  |    4 +-
 include/svx/sxctitm.hxx                                   |    2 -
 include/svx/sxekitm.hxx                                   |    2 -
 include/svx/sxelditm.hxx                                  |    2 -
 include/svx/sxenditm.hxx                                  |   12 +++---
 include/svx/sxmbritm.hxx                                  |    2 -
 include/svx/sxmtfitm.hxx                                  |    6 +--
 include/svx/sxmtpitm.hxx                                  |    4 +-
 include/svx/sxmtritm.hxx                                  |    2 -
 include/svx/sxmuitm.hxx                                   |    2 -
 include/svx/unoshape.hxx                                  |    2 -
 include/svx/xbtmpit.hxx                                   |    2 -
 include/svx/xflftrit.hxx                                  |    2 -
 include/svx/xflhtit.hxx                                   |    2 -
 include/svx/xlndsit.hxx                                   |    2 -
 include/svx/xlnedcit.hxx                                  |    2 -
 include/svx/xlnstcit.hxx                                  |    2 -
 include/svx/xtable.hxx                                    |   24 +++---------
 include/toolkit/awt/vclxdevice.hxx                        |    2 -
 include/vbahelper/vbacollectionimpl.hxx                   |    2 -
 include/vcl/BitmapBasicMorphologyFilter.hxx               |    4 +-
 include/vcl/BitmapFilterStackBlur.hxx                     |    2 -
 include/vcl/alpha.hxx                                     |    2 -
 include/vcl/filter/pdfdocument.hxx                        |   28 +++++++-------
 include/vcl/fontcharmap.hxx                               |    2 -
 include/vcl/layout.hxx                                    |    2 -
 include/vcl/menu.hxx                                      |    8 +---
 include/vcl/pdfextoutdevdata.hxx                          |    2 -
 include/vcl/tabpage.hxx                                   |    2 -
 include/vcl/toolkit/field.hxx                             |    6 +--
 include/vcl/toolkit/group.hxx                             |    2 -
 include/vcl/toolkit/ivctrl.hxx                            |    4 --
 include/vcl/toolkit/svlbitm.hxx                           |    2 -
 include/vcl/transfer.hxx                                  |    6 +--
 include/vcl/uitest/formattedfielduiobject.hxx             |    4 +-
 include/vcl/uitest/metricfielduiobject.hxx                |    4 +-
 include/vcl/xtextedt.hxx                                  |    2 -
 vcl/inc/wizdlg.hxx                                        |    4 --
 vcl/source/control/roadmapwizard.cxx                      |   19 +--------
 vcl/source/control/wizardmachine.cxx                      |    8 ----
 107 files changed, 197 insertions(+), 268 deletions(-)

New commits:
commit e3077168072452fb8f1c0a8afb2992877cb96d1c
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Jun 17 09:49:37 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Sat Jun 19 14:08:50 2021 +0200

    loplugin:finalclasses
    
    improve the plugin to detect more cases.
    
    I only apply the new final changes to classes in /include here.
    
    Which reveals that
        RoadmapWizard::getPageController( TabPage* _pCurrentPage )
    will always return nullptr
    
    Also needed to sprinkle some
       SAL_DLLPUBLIC_TEMPLATE
    around to workaround Visual Studio linking problems.
    
    Change-Id: Iadb7d46a9e0e73dabce562375ca013c0fea6690c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117365
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/compilerplugins/clang/finalclasses.cxx b/compilerplugins/clang/finalclasses.cxx
index 4271a0a76f1b..ff7b34925630 100644
--- a/compilerplugins/clang/finalclasses.cxx
+++ b/compilerplugins/clang/finalclasses.cxx
@@ -22,7 +22,7 @@ or
 
 In the case of (a), those members/fields can be made private.
 In the case of (b), making the class final means the compiler can devirtualise
-some method class.
+some method calls
 
 The process goes something like this:
   $ make check
@@ -86,7 +86,6 @@ bool FinalClasses::VisitCXXRecordDecl(const CXXRecordDecl* decl)
 {
     if (ignoreLocation(decl))
         return true;
-    decl = decl->getCanonicalDecl();
     if (!decl->hasDefinition())
         return true;
 
@@ -114,6 +113,7 @@ bool FinalClasses::VisitCXXRecordDecl(const CXXRecordDecl* decl)
         if ( i->isVirtual() )
             bFoundVirtual = true;
     }
+
     if (!bFoundProtected)
     {
         for (auto it = decl->field_begin(); it != decl->field_end(); ++it) {
diff --git a/compilerplugins/clang/finalclasses.py b/compilerplugins/clang/finalclasses.py
index dfaa402f9513..05a1d0c43c8c 100755
--- a/compilerplugins/clang/finalclasses.py
+++ b/compilerplugins/clang/finalclasses.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 
 import re
 import sys
diff --git a/include/basic/basmgr.hxx b/include/basic/basmgr.hxx
index b439baed85fa..55f582ae6496 100644
--- a/include/basic/basmgr.hxx
+++ b/include/basic/basmgr.hxx
@@ -104,7 +104,7 @@ struct BasicManagerImpl;
 
 #define LIB_NOTFOUND    0xFFFF
 
-class BASIC_DLLPUBLIC BasicManager : public SfxBroadcaster
+class BASIC_DLLPUBLIC BasicManager final : public SfxBroadcaster
 {
     friend class LibraryContainer_Impl;
     friend class StarBasicAccess_Impl;
@@ -121,8 +121,6 @@ private:
     std::unique_ptr<BasicManagerImpl>   mpImpl;
 
     BASIC_DLLPRIVATE void Init();
-
-protected:
     bool            ImpLoadLibrary( BasicLibInfo* pLibInfo, SotStorage* pCurStorage );
     void            ImpCreateStdLib( StarBASIC* pParentFromStdLib );
     void            ImpMgrNotLoaded(  const OUString& rStorageName  );
diff --git a/include/basic/sbmeth.hxx b/include/basic/sbmeth.hxx
index 5fa65b79b37c..fefd84aed1ea 100644
--- a/include/basic/sbmeth.hxx
+++ b/include/basic/sbmeth.hxx
@@ -67,7 +67,7 @@ public:
 
 typedef tools::SvRef<SbMethod> SbMethodRef;
 
-class SbIfaceMapperMethod : public SbMethod
+class SbIfaceMapperMethod final : public SbMethod
 {
     friend class SbiRuntime;
 
diff --git a/include/basic/sbmod.hxx b/include/basic/sbmod.hxx
index 3a0ebaa0a091..3f4d3e602407 100644
--- a/include/basic/sbmod.hxx
+++ b/include/basic/sbmod.hxx
@@ -139,7 +139,7 @@ typedef tools::SvRef<SbModule> SbModuleRef;
 typedef std::vector<SbModuleRef> SbModules;
 
 // Object class for instances of class modules
-class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbClassModuleObject : public SbModule
+class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbClassModuleObject final : public SbModule
 {
     SbModule*   mpClassModule;
     bool        mbInitializeEventDone;
diff --git a/include/basic/sbstar.hxx b/include/basic/sbstar.hxx
index 9c3d02421af9..08040a4d5510 100644
--- a/include/basic/sbstar.hxx
+++ b/include/basic/sbstar.hxx
@@ -34,7 +34,7 @@ namespace com::sun::star::script { struct ModuleInfo; }
 
 class SbMethod;
 
-class BASIC_DLLPUBLIC StarBASIC : public SbxObject
+class BASIC_DLLPUBLIC StarBASIC final : public SbxObject
 {
     friend class SbiScanner;
     friend class SbiExpression; // Access to RTL
@@ -58,17 +58,12 @@ class BASIC_DLLPUBLIC StarBASIC : public SbxObject
     SbxObjectRef pVBAGlobals;
 
     BASIC_DLLPRIVATE void implClearDependingVarsOnDelete( StarBASIC* pDeletedBasic );
-
-protected:
     bool                                CError( ErrCode, const OUString&, sal_Int32, sal_Int32, sal_Int32 );
-private:
     BASIC_DLLPRIVATE bool               RTError( ErrCode, const OUString& rMsg, sal_Int32, sal_Int32, sal_Int32 );
     BASIC_DLLPRIVATE BasicDebugFlags    BreakPoint( sal_Int32 nLine, sal_Int32 nCol1, sal_Int32 nCol2 );
     BASIC_DLLPRIVATE BasicDebugFlags    StepPoint( sal_Int32 nLine, sal_Int32 nCol1, sal_Int32 nCol2 );
     virtual bool LoadData( SvStream&, sal_uInt16 ) override;
     virtual bool StoreData( SvStream& ) const override;
-
-protected:
     bool             ErrorHdl();
     BasicDebugFlags  BreakHdl();
     virtual ~StarBASIC() override;
diff --git a/include/basic/sbx.hxx b/include/basic/sbx.hxx
index c0d3daa3a78f..999ba3c3127d 100644
--- a/include/basic/sbx.hxx
+++ b/include/basic/sbx.hxx
@@ -48,7 +48,7 @@ struct SbxParamInfo
 
 typedef std::vector<std::unique_ptr<SbxParamInfo>> SbxParams;
 
-class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbxInfo : public SvRefBase
+class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbxInfo final : public SvRefBase
 {
     friend class SbxVariable;
     friend class SbMethod;
@@ -61,7 +61,6 @@ class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbxInfo : public SvRefBase
     SbxInfo(SbxInfo const&) = delete;
     void operator=(SbxInfo const&) = delete;
 
-protected:
     void LoadData( SvStream&, sal_uInt16 );
     void StoreData( SvStream& ) const;
     virtual ~SbxInfo() override;
diff --git a/include/comphelper/SelectionMultiplex.hxx b/include/comphelper/SelectionMultiplex.hxx
index 46b892c37525..00ba7f955b09 100644
--- a/include/comphelper/SelectionMultiplex.hxx
+++ b/include/comphelper/SelectionMultiplex.hxx
@@ -55,7 +55,7 @@ namespace comphelper
     //= OSelectionChangeMultiplexer
 
     /// multiplexer for selection changes
-    class COMPHELPER_DLLPUBLIC OSelectionChangeMultiplexer  :public cppu::WeakImplHelper< css::view::XSelectionChangeListener>
+    class COMPHELPER_DLLPUBLIC OSelectionChangeMultiplexer final : public cppu::WeakImplHelper< css::view::XSelectionChangeListener>
     {
         friend class OSelectionChangeListener;
         css::uno::Reference< css::view::XSelectionSupplier>  m_xSet;
@@ -64,7 +64,7 @@ namespace comphelper
 
         OSelectionChangeMultiplexer(const OSelectionChangeMultiplexer&) = delete;
         OSelectionChangeMultiplexer& operator=(const OSelectionChangeMultiplexer&) = delete;
-    protected:
+
         virtual ~OSelectionChangeMultiplexer() override;
     public:
         OSelectionChangeMultiplexer(OSelectionChangeListener* _pListener, const  css::uno::Reference< css::view::XSelectionSupplier>& _rxSet);
diff --git a/include/comphelper/accessiblewrapper.hxx b/include/comphelper/accessiblewrapper.hxx
index ea9a0af0209b..2423f2ffc2a2 100644
--- a/include/comphelper/accessiblewrapper.hxx
+++ b/include/comphelper/accessiblewrapper.hxx
@@ -324,9 +324,8 @@ namespace comphelper
                                   >   OWrappedAccessibleChildrenManager_Base;
     /** manages wrapping XAccessible's to XAccessible's
     */
-    class UNLESS_MERGELIBS(COMPHELPER_DLLPUBLIC) OWrappedAccessibleChildrenManager : public OWrappedAccessibleChildrenManager_Base
+    class UNLESS_MERGELIBS(COMPHELPER_DLLPUBLIC) OWrappedAccessibleChildrenManager final : public OWrappedAccessibleChildrenManager_Base
     {
-    protected:
         css::uno::Reference< css::uno::XComponentContext >
                                 m_xContext;
         css::uno::WeakReference< css::accessibility::XAccessible >
@@ -381,17 +380,14 @@ namespace comphelper
                     css::accessibility::AccessibleEventObject& _rTranslatedEvent
         );
 
-    protected:
+    private:
         // XEventListener
         virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
 
-    protected:
         void    implTranslateChildEventValue( const css::uno::Any& _rInValue, css::uno::Any& _rOutValue );
 
-    protected:
         virtual ~OWrappedAccessibleChildrenManager( ) override;
 
-    private:
         OWrappedAccessibleChildrenManager( const OWrappedAccessibleChildrenManager& ) = delete;
         OWrappedAccessibleChildrenManager& operator=( const OWrappedAccessibleChildrenManager& ) = delete;
     };
diff --git a/include/comphelper/configurationlistener.hxx b/include/comphelper/configurationlistener.hxx
index bc7994a12c3a..55342514c2ba 100644
--- a/include/comphelper/configurationlistener.hxx
+++ b/include/comphelper/configurationlistener.hxx
@@ -59,8 +59,9 @@ public:
     uno_type get() const { return maValue; }
 };
 
-class COMPHELPER_DLLPUBLIC ConfigurationListener :
-        public cppu::WeakImplHelper< css::beans::XPropertyChangeListener >
+// workaround for incremental linking bugs in MSVC2019
+class SAL_DLLPUBLIC_TEMPLATE ConfigurationListener_Base : public cppu::WeakImplHelper< css::beans::XPropertyChangeListener > {};
+class COMPHELPER_DLLPUBLIC ConfigurationListener final : public ConfigurationListener_Base
 {
     css::uno::Reference< css::beans::XPropertySet > mxConfig;
     std::vector< ConfigurationListenerPropertyBase * > maListeners;
diff --git a/include/comphelper/containermultiplexer.hxx b/include/comphelper/containermultiplexer.hxx
index b1c4f9dadb5f..5b40b62ae515 100644
--- a/include/comphelper/containermultiplexer.hxx
+++ b/include/comphelper/containermultiplexer.hxx
@@ -69,7 +69,7 @@ namespace comphelper
     // workaround for incremental linking bugs in MSVC2015
     class SAL_DLLPUBLIC_TEMPLATE OContainerListenerAdapter_Base : public cppu::WeakImplHelper< css::container::XContainerListener > {};
 
-    class COMPHELPER_DLLPUBLIC OContainerListenerAdapter : public OContainerListenerAdapter_Base
+    class COMPHELPER_DLLPUBLIC OContainerListenerAdapter final : public OContainerListenerAdapter_Base
     {
         friend class OContainerListener;
 
diff --git a/include/comphelper/propmultiplex.hxx b/include/comphelper/propmultiplex.hxx
index 38a1ee73056a..41d456d43dfb 100644
--- a/include/comphelper/propmultiplex.hxx
+++ b/include/comphelper/propmultiplex.hxx
@@ -72,7 +72,9 @@ namespace comphelper
     //= OPropertyChangeMultiplexer
 
     /// multiplexer for property changes
-    class COMPHELPER_DLLPUBLIC OPropertyChangeMultiplexer   :public cppu::WeakImplHelper< css::beans::XPropertyChangeListener>
+    // workaround for incremental linking bugs in MSVC2019
+    class SAL_DLLPUBLIC_TEMPLATE OPropertyChangeMultiplexer_Base : public cppu::WeakImplHelper< css::beans::XPropertyChangeListener > {};
+    class COMPHELPER_DLLPUBLIC OPropertyChangeMultiplexer final : public OPropertyChangeMultiplexer_Base
     {
         friend class OPropertyChangeListener;
         std::vector< OUString >                         m_aProperties;
diff --git a/include/connectivity/PColumn.hxx b/include/connectivity/PColumn.hxx
index 8cb089324a79..46ceaa1bb099 100644
--- a/include/connectivity/PColumn.hxx
+++ b/include/connectivity/PColumn.hxx
@@ -40,7 +40,7 @@ namespace connectivity::parse
         typedef sdbcx::OColumn OParseColumn_BASE;
         typedef ::comphelper::OPropertyArrayUsageHelper<OParseColumn> OParseColumn_PROP;
 
-        class OOO_DLLPUBLIC_DBTOOLS OParseColumn :
+        class OOO_DLLPUBLIC_DBTOOLS OParseColumn final :
             public OParseColumn_BASE, public OParseColumn_PROP
         {
             OUString    m_aRealName;
@@ -50,7 +50,6 @@ namespace connectivity::parse
             bool        m_bAggregateFunction;
             bool        m_bIsSearchable;
 
-        protected:
             virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
             virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
 
@@ -112,12 +111,11 @@ namespace connectivity::parse
         typedef sdbcx::OColumn OOrderColumn_BASE;
         typedef ::comphelper::OPropertyArrayUsageHelper<OOrderColumn> OOrderColumn_PROP;
 
-        class OOrderColumn :
+        class OOrderColumn final :
             public OOrderColumn_BASE, public OOrderColumn_PROP
         {
             const   bool        m_bAscending;
 
-        protected:
             virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
             virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
 
diff --git a/include/connectivity/dbcharset.hxx b/include/connectivity/dbcharset.hxx
index 79e8c8ec48cf..3ee993243d25 100644
--- a/include/connectivity/dbcharset.hxx
+++ b/include/connectivity/dbcharset.hxx
@@ -121,7 +121,6 @@ namespace dbtools
 
 //      friend sal_Int32 operator-(const CharsetIterator& lhs, const CharsetIterator& rhs);
 
-    protected:
         const OCharsetMap*                      m_pContainer;
         OCharsetMap::TextEncBag::const_iterator m_aPos;
 
diff --git a/include/connectivity/sqlscan.hxx b/include/connectivity/sqlscan.hxx
index be6d4178f0a8..fe463f50606b 100644
--- a/include/connectivity/sqlscan.hxx
+++ b/include/connectivity/sqlscan.hxx
@@ -39,7 +39,7 @@ namespace connectivity
 
     public:
         OSQLScanner();
-        virtual ~OSQLScanner();
+        ~OSQLScanner();
 
         sal_Int32 SQLyygetc();
         void SQLyyerror(char const *fmt);
diff --git a/include/drawinglayer/primitive2d/Primitive2DContainer.hxx b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx
index cca3a0a91485..c62f960bd8d0 100644
--- a/include/drawinglayer/primitive2d/Primitive2DContainer.hxx
+++ b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx
@@ -34,7 +34,7 @@ class ViewInformation2D;
 
 namespace drawinglayer::primitive2d
 {
-class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer
+class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer final
     : public std::deque<Primitive2DReference>,
       public Primitive2DDecompositionVisitor
 {
diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx
index 630648adea19..afb1d9d15c18 100644
--- a/include/editeng/colritem.hxx
+++ b/include/editeng/colritem.hxx
@@ -27,7 +27,7 @@
 
 /** SvxColorItem item describes a color.
 */
-class EDITENG_DLLPUBLIC SvxColorItem : public SfxPoolItem
+class EDITENG_DLLPUBLIC SvxColorItem final : public SfxPoolItem
 {
 private:
     Color mColor;
diff --git a/include/editeng/unotext.hxx b/include/editeng/unotext.hxx
index 8a029b72a1b1..0c09b4361edc 100644
--- a/include/editeng/unotext.hxx
+++ b/include/editeng/unotext.hxx
@@ -579,7 +579,7 @@ public:
 };
 
 
-class SvxUnoTextContentEnumeration : public ::cppu::WeakAggImplHelper1< css::container::XEnumeration >
+class SvxUnoTextContentEnumeration final : public ::cppu::WeakAggImplHelper1< css::container::XEnumeration >
 {
 private:
     css::uno::Reference< css::text::XText > mxParentText;
@@ -597,7 +597,7 @@ public:
 };
 
 
-class SvxUnoTextRangeEnumeration : public ::cppu::WeakAggImplHelper1< css::container::XEnumeration >
+class SvxUnoTextRangeEnumeration final : public ::cppu::WeakAggImplHelper1< css::container::XEnumeration >
 {
 private:
     std::unique_ptr<SvxEditSource>      mpEditSource;
diff --git a/include/filter/msfilter/mstoolbar.hxx b/include/filter/msfilter/mstoolbar.hxx
index dacc21c3180b..7cceb145897d 100644
--- a/include/filter/msfilter/mstoolbar.hxx
+++ b/include/filter/msfilter/mstoolbar.hxx
@@ -207,7 +207,7 @@ public:
     bool Read(SvStream &rS) override;
 };
 
-class TBCBSpecific :  public TBBase
+class TBCBSpecific final : public TBBase
 {
     sal_uInt8 bFlags;
     std::shared_ptr< TBCBitMap > icon; // optional
@@ -245,7 +245,7 @@ public:
 0x16 (ActiveX control)             controlSpecificInfo MUST NOT exist
 
 */
-class MSFILTER_DLLPUBLIC TBCHeader : public TBBase
+class MSFILTER_DLLPUBLIC TBCHeader final : public TBBase
 {
     sal_Int8 bSignature;
     sal_Int8 bVersion;
diff --git a/include/oox/ole/axbinaryreader.hxx b/include/oox/ole/axbinaryreader.hxx
index 43024556bdff..eb185f235d49 100644
--- a/include/oox/ole/axbinaryreader.hxx
+++ b/include/oox/ole/axbinaryreader.hxx
@@ -168,7 +168,7 @@ private:
     };
 
     /** Complex property for a 32-bit value pair, e.g. point or size. */
-    struct PairProperty : public ComplexProperty
+    struct PairProperty final : public ComplexProperty
     {
         AxPairData&         mrPairData;
 
@@ -178,7 +178,7 @@ private:
     };
 
     /** Complex property for a string value. */
-    struct StringProperty : public ComplexProperty
+    struct StringProperty final : public ComplexProperty
     {
         OUString&    mrValue;
         sal_uInt32          mnSize;
@@ -189,7 +189,7 @@ private:
     };
 
     /** Complex property for an array of strings. */
-    struct ArrayStringProperty : public ComplexProperty
+    struct ArrayStringProperty final : public ComplexProperty
     {
         AxArrayString&      mrArray;
         sal_uInt32          mnSize;
@@ -199,7 +199,7 @@ private:
     };
 
     /** Complex property for a GUID value. */
-    struct GuidProperty : public ComplexProperty
+    struct GuidProperty final : public ComplexProperty
     {
         OUString&    mrGuid;
 
@@ -209,7 +209,7 @@ private:
     };
 
     /** Stream property for a font structure. */
-    struct FontProperty : public ComplexProperty
+    struct FontProperty final : public ComplexProperty
     {
         AxFontData&         mrFontData;
 
@@ -219,7 +219,7 @@ private:
     };
 
     /** Stream property for a picture or mouse icon. */
-    struct PictureProperty : public ComplexProperty
+    struct PictureProperty final : public ComplexProperty
     {
         StreamDataSequence& mrPicData;
 
diff --git a/include/oox/ole/axbinarywriter.hxx b/include/oox/ole/axbinarywriter.hxx
index 89bb4eb9a60c..eb370473aecb 100644
--- a/include/oox/ole/axbinarywriter.hxx
+++ b/include/oox/ole/axbinarywriter.hxx
@@ -116,7 +116,7 @@ private:
     };
 
     /** Complex property for a 32-bit value pair, e.g. point or size. */
-    struct PairProperty : public ComplexProperty
+    struct PairProperty final : public ComplexProperty
     {
         AxPairData&         mrPairData;
 
@@ -126,7 +126,7 @@ private:
     };
 
     /** Complex property for a string value. */
-    struct StringProperty : public ComplexProperty
+    struct StringProperty final : public ComplexProperty
     {
         OUString&    mrValue;
         sal_uInt32          mnSize;
@@ -137,7 +137,7 @@ private:
     };
 
     /** Stream property for a picture or mouse icon. */
-    struct PictureProperty : public ComplexProperty
+    struct PictureProperty final : public ComplexProperty
     {
         virtual bool        writeProperty( AxAlignedOutputStream& rOutStrm ) override;
     };
diff --git a/include/registry/registry.hxx b/include/registry/registry.hxx
index 3c81c41e077f..3190b13ca66c 100644
--- a/include/registry/registry.hxx
+++ b/include/registry/registry.hxx
@@ -208,7 +208,8 @@ public:
     inline sal_uInt32 getLength() const;
 
     friend class RegistryKey;
-protected:
+
+private:
     /** sets the data of the key array.
 
         @param registry specifies the registry files where the keys are located.
@@ -216,7 +217,7 @@ protected:
         @param length specifies the length of the array specified by phKeys.
      */
     inline void setKeyHandles(Registry const & registry, RegKeyHandle* phKeys, sal_uInt32 length);
-private:
+
     /// stores the number of open subkeys, the number of elements.
     sal_uInt32      m_length;
     /// stores an array of open subkeys.
@@ -246,7 +247,8 @@ public:
     inline sal_uInt32 getLength() const;
 
     friend class RegistryKey;
-protected:
+
+private:
     /** sets the data of the array.
 
         @param registry specifies the registry files where the keys are located.
@@ -254,7 +256,7 @@ protected:
         @param length specifies the length of the array specified by pKeyNames.
      */
     inline void setKeyNames(Registry const & registry, rtl_uString** pKeyNames, sal_uInt32 length);
-private:
+
     /// stores the number of key names, the number of elements.
     sal_uInt32      m_length;
     /// stores an array of key names.
@@ -557,7 +559,7 @@ public:
     inline RegistryKey(Registry const & registry,
                        RegKeyHandle hKey);
 
-protected:
+private:
     /** sets the internal registry on which this key should work.
      */
     inline void setRegistry(Registry const & registry);
diff --git a/include/sfx2/bindings.hxx b/include/sfx2/bindings.hxx
index 3eb756ebb18d..f4f44bd1af7a 100644
--- a/include/sfx2/bindings.hxx
+++ b/include/sfx2/bindings.hxx
@@ -67,7 +67,7 @@ template<> struct typed_flags<SfxCallMode>: is_typed_flags<SfxCallMode, 0x0F>
 
 }
 
-class SFX2_DLLPUBLIC SfxBindings: public SfxBroadcaster
+class SFX2_DLLPUBLIC SfxBindings final : public SfxBroadcaster
 
 /*  [Description]
 
diff --git a/include/sfx2/linkmgr.hxx b/include/sfx2/linkmgr.hxx
index b952e992092b..e4f58a996480 100644
--- a/include/sfx2/linkmgr.hxx
+++ b/include/sfx2/linkmgr.hxx
@@ -61,7 +61,7 @@ class SFX2_DLLPUBLIC LinkManager
     SvLinkSources aServerTbl;
 
     SfxObjectShell *pPersist; // LinkMgr must be release before SfxObjectShell
-protected:
+
     bool        InsertLink( SvBaseLink* pLink, SvBaseLinkObjectType nObjType, SfxLinkUpdateMode nUpdateType,
                             const OUString* pName );
 public:
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index dfdd240a4413..725f72b1c9f6 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -814,7 +814,6 @@ typedef tools::SvRef<SfxObjectShell> SfxObjectShellRef;
 
 class SfxObjectShellLock
 {
-protected:
     SfxObjectShell * pObj;
 public:
     SfxObjectShellLock() { pObj = nullptr; }
diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx
index 48d595722717..133c1f5806c6 100644
--- a/include/sfx2/sidebar/SidebarController.hxx
+++ b/include/sfx2/sidebar/SidebarController.hxx
@@ -59,7 +59,7 @@ namespace sfx2::sidebar {
 class DeckDescriptor;
 class SidebarDockingWindow;
 
-class SFX2_DLLPUBLIC SidebarController
+class SFX2_DLLPUBLIC SidebarController final
     : private ::cppu::BaseMutex,
       public SidebarControllerInterfaceBase
 {
diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index 4585b722e487..7dd7f0e8553a 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -46,7 +46,7 @@ class SfxInfoBarWindow;
 enum class InfobarType;
 class CommandPopupHandler;
 
-class SFX2_DLLPUBLIC SfxViewFrame: public SfxShell, public SfxListener
+class SFX2_DLLPUBLIC SfxViewFrame final : public SfxShell, public SfxListener
 {
     std::unique_ptr<struct SfxViewFrame_Impl>   m_pImpl;
 
@@ -59,12 +59,8 @@ class SFX2_DLLPUBLIC SfxViewFrame: public SfxShell, public SfxListener
 
     std::unique_ptr<CommandPopupHandler> m_pCommandPopupHandler;
 
-private:
     SAL_DLLPRIVATE void Construct_Impl( SfxObjectShell *pObjSh );
-
-protected:
     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
-
     DECL_LINK(GetInvolvedHandler, weld::Button&, void);
     DECL_LINK(DonationHandler, weld::Button&, void);
     DECL_LINK(WhatsNewHandler, weld::Button&, void);
diff --git a/include/sfx2/zoomitem.hxx b/include/sfx2/zoomitem.hxx
index 32285cb704cd..4e7703dfdf92 100644
--- a/include/sfx2/zoomitem.hxx
+++ b/include/sfx2/zoomitem.hxx
@@ -52,7 +52,7 @@ namespace o3tl
     template<> struct typed_flags<SvxZoomEnableFlags> : is_typed_flags<SvxZoomEnableFlags, 0x701f> {};
 }
 
-class SFX2_DLLPUBLIC SvxZoomItem: public SfxUInt16Item
+class SFX2_DLLPUBLIC SvxZoomItem final : public SfxUInt16Item
 {
     SvxZoomEnableFlags      nValueSet;  // allowed values (see #defines below)
     SvxZoomType             eType;
diff --git a/include/sot/stg.hxx b/include/sot/stg.hxx
index ce4d28efbd79..1cd16ac32e89 100644
--- a/include/sot/stg.hxx
+++ b/include/sot/stg.hxx
@@ -201,13 +201,12 @@ public:
 };
 
 class UCBStorageStream_Impl;
-class UCBStorageStream : public BaseStorageStream
+class UCBStorageStream final : public BaseStorageStream
 {
 friend class UCBStorage;
 
     UCBStorageStream_Impl*
             pImp;
-protected:
                                 virtual ~UCBStorageStream() override;
 public:
                                 UCBStorageStream( const OUString& rName, StreamMode nMode, bool bDirect, bool bRepair, css::uno::Reference< css::ucb::XProgressHandler > const & xProgress );
@@ -237,11 +236,10 @@ namespace ucbhelper
 
 class UCBStorage_Impl;
 struct UCBStorageElement_Impl;
-class SOT_DLLPUBLIC UCBStorage : public BaseStorage
+class SOT_DLLPUBLIC UCBStorage final : public BaseStorage
 {
     UCBStorage_Impl*            pImp;
 
-protected:
                                 virtual ~UCBStorage() override;
 public:
     static bool                 IsStorageFile( SvStream* );
diff --git a/include/sot/storage.hxx b/include/sot/storage.hxx
index 41b57506946c..dd44b020694a 100644
--- a/include/sot/storage.hxx
+++ b/include/sot/storage.hxx
@@ -70,7 +70,7 @@ public:
 };
 
 class  BaseStorage;
-class SOT_DLLPUBLIC SotStorage : virtual public SotObject
+class SOT_DLLPUBLIC SotStorage final : virtual public SotObject
 {
 friend class SotStorageStream;
 
@@ -83,7 +83,6 @@ friend class SotStorageStream;
     OString m_aKey; // aKey.Len != 0  -> encryption
     sal_Int32 m_nVersion;
 
-protected:
     virtual ~SotStorage() override;
     void CreateStorage(bool bUCBStorage, StreamMode);
 public:
diff --git a/include/svl/itemset.hxx b/include/svl/itemset.hxx
index e8bc88a13263..7c85e7534f59 100644
--- a/include/svl/itemset.hxx
+++ b/include/svl/itemset.hxx
@@ -259,7 +259,7 @@ inline void SfxItemSet::SetParent( const SfxItemSet* pNew )
     m_pParent = pNew;
 }
 
-class SVL_DLLPUBLIC SfxAllItemSet: public SfxItemSet
+class SVL_DLLPUBLIC SfxAllItemSet final : public SfxItemSet
 
 //  Handles all Ranges. Ranges are automatically modified by putting items.
 
@@ -271,7 +271,7 @@ public:
 
     virtual std::unique_ptr<SfxItemSet> Clone( bool bItems = true, SfxItemPool *pToPool = nullptr ) const override;
     virtual SfxItemSet CloneAsValue( bool bItems = true, SfxItemPool *pToPool = nullptr ) const override;
-protected:
+private:
     virtual const SfxPoolItem*  PutImpl( const SfxPoolItem&, sal_uInt16 nWhich, bool bPassingOwnership ) override;
 };
 
diff --git a/include/svtools/brwbox.hxx b/include/svtools/brwbox.hxx
index 004e939a7fbc..bcebf9a15053 100644
--- a/include/svtools/brwbox.hxx
+++ b/include/svtools/brwbox.hxx
@@ -140,7 +140,7 @@ class BrowseBox;
 class ScrollBarBox;
 class BrowserMouseEvent;
 
-class BrowserDataWin
+class BrowserDataWin final
             :public Control
             ,public DragSourceHelper
             ,public DropTargetHelper
@@ -214,7 +214,7 @@ public:
     void            Invalidate( const tools::Rectangle& rRect, InvalidateFlags nFlags = InvalidateFlags::NONE ) override;
     using Control::Invalidate;
 
-protected:
+private:
     void            StartRowDividerDrag( const Point& _rStartPos );
     bool            ImplRowDividerHitTest( const BrowserMouseEvent& _rEvent );
 };
diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx
index 0a9067d73733..be1ad5f96594 100644
--- a/include/svtools/editbrowsebox.hxx
+++ b/include/svtools/editbrowsebox.hxx
@@ -231,7 +231,7 @@ namespace svt
         std::unique_ptr<weld::Entry> m_xWidget;
     };
 
-    class SVT_DLLPUBLIC EntryImplementation : public IEditImplementation
+    class SVT_DLLPUBLIC EntryImplementation final : public IEditImplementation
     {
         EditControlBase& m_rEdit;
         int m_nMaxTextLen;
@@ -377,7 +377,7 @@ namespace svt
         virtual bool ProcessKey(const KeyEvent& rKEvt) override;
     };
 
-    class SVT_DLLPUBLIC MultiLineEditImplementation : public IEditImplementation
+    class SVT_DLLPUBLIC MultiLineEditImplementation final : public IEditImplementation
     {
         MultiLineTextCell& m_rEdit;
         int m_nMaxTextLen;
@@ -627,7 +627,7 @@ namespace svt
     };
 
     //= ComboBoxCellController
-    class SVT_DLLPUBLIC ComboBoxCellController : public CellController
+    class SVT_DLLPUBLIC ComboBoxCellController final : public CellController
     {
     public:
 
@@ -637,9 +637,8 @@ namespace svt
         virtual bool IsValueChangedFromSaved() const override;
         virtual void SaveValue() override;
 
-    protected:
-        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
     private:
+        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
         DECL_LINK(ModifyHdl, LinkParamNone*, void);
     };
 
@@ -725,31 +724,31 @@ namespace svt
         void InitFormattedControlBase();
     };
 
-    class SVT_DLLPUBLIC FormattedControl : public FormattedControlBase
+    class SVT_DLLPUBLIC FormattedControl final : public FormattedControlBase
     {
     public:
         FormattedControl(BrowserDataWin* pParent, bool bSpinVariant);
     };
 
-    class SVT_DLLPUBLIC DoubleNumericControl : public FormattedControlBase
+    class SVT_DLLPUBLIC DoubleNumericControl final : public FormattedControlBase
     {
     public:
         DoubleNumericControl(BrowserDataWin* pParent, bool bSpinVariant);
     };
 
-    class SVT_DLLPUBLIC LongCurrencyControl : public FormattedControlBase
+    class SVT_DLLPUBLIC LongCurrencyControl final : public FormattedControlBase
     {
     public:
         LongCurrencyControl(BrowserDataWin* pParent, bool bSpinVariant);
     };
 
-    class SVT_DLLPUBLIC TimeControl : public FormattedControlBase
+    class SVT_DLLPUBLIC TimeControl final : public FormattedControlBase
     {
     public:
         TimeControl(BrowserDataWin* pParent, bool bSpinVariant);
     };
 
-    class SVT_DLLPUBLIC DateControl : public FormattedControlBase
+    class SVT_DLLPUBLIC DateControl final : public FormattedControlBase
     {
     public:
         DateControl(BrowserDataWin* pParent, bool bDropDown);
diff --git a/include/svx/EnhancedCustomShape2d.hxx b/include/svx/EnhancedCustomShape2d.hxx
index ba0d4a6314bf..18ce21437bcc 100644
--- a/include/svx/EnhancedCustomShape2d.hxx
+++ b/include/svx/EnhancedCustomShape2d.hxx
@@ -76,7 +76,7 @@ namespace o3tl
 // escher, but we are using it internally in to differentiate
 // between X_RANGE and Y_RANGE
 
-class SVXCORE_DLLPUBLIC EnhancedCustomShape2d : public SfxItemSet
+class SVXCORE_DLLPUBLIC EnhancedCustomShape2d final : public SfxItemSet
 {
         SdrObjCustomShape&          mrSdrObjCustomShape;
         MSO_SPT                     eSpType;
diff --git a/include/svx/bmpmask.hxx b/include/svx/bmpmask.hxx
index 78dbbbea83b8..1500b8d3bd64 100644
--- a/include/svx/bmpmask.hxx
+++ b/include/svx/bmpmask.hxx
@@ -84,7 +84,7 @@ class MaskSet;
 class BmpColorWindow;
 class ColorListBox;
 
-class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxBmpMask : public SfxDockingWindow
+class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxBmpMask final : public SfxDockingWindow
 {
     friend class MaskData;
     friend class MaskSet;
diff --git a/include/svx/float3d.hxx b/include/svx/float3d.hxx
index fbc74e6e31a6..fd8ae56509cf 100644
--- a/include/svx/float3d.hxx
+++ b/include/svx/float3d.hxx
@@ -256,9 +256,8 @@ public:
 |*
 \************************************************************************/
 
-class Svx3DCtrlItem : public SfxControllerItem
+class Svx3DCtrlItem final : public SfxControllerItem
 {
- protected:
     virtual void StateChangedAtToolBoxControl( sal_uInt16 nSId, SfxItemState eState,
                                 const SfxPoolItem* pState ) override;
 
@@ -273,11 +272,10 @@ class Svx3DCtrlItem : public SfxControllerItem
 |*
 \************************************************************************/
 
-class SvxConvertTo3DItem : public SfxControllerItem
+class SvxConvertTo3DItem final : public SfxControllerItem
 {
     bool                        bState;
 
-protected:
     virtual void StateChangedAtToolBoxControl(sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState) override;
 
 public:
diff --git a/include/svx/fmsrcimp.hxx b/include/svx/fmsrcimp.hxx
index a9b311fe522a..68cd77b17fe2 100644
--- a/include/svx/fmsrcimp.hxx
+++ b/include/svx/fmsrcimp.hxx
@@ -69,7 +69,9 @@ struct FmSearchProgress
  * class FmRecordCountListener - utility class for FmSearchEngine, listens at a certain cursor and provides
  *                               the differences in RecordCount
  */
-class SAL_WARN_UNUSED FmRecordCountListener final : public cppu::WeakImplHelper< css::beans::XPropertyChangeListener >
+// workaround for incremental linking bugs in MSVC2019
+class SAL_DLLPUBLIC_TEMPLATE FmRecordCountListener_Base : public cppu::WeakImplHelper< css::beans::XPropertyChangeListener > {};
+class SAL_WARN_UNUSED FmRecordCountListener final : public FmRecordCountListener_Base
 {
 // attribute
     Link<sal_Int32,void>     m_lnkWhoWantsToKnow;
diff --git a/include/svx/fmtools.hxx b/include/svx/fmtools.hxx
index e8c0c7dbe4fd..1ead9069b4f0 100644
--- a/include/svx/fmtools.hxx
+++ b/include/svx/fmtools.hxx
@@ -144,7 +144,7 @@ protected:
     void setAdapter(FmXDisposeMultiplexer* pAdapter);
 };
 
-class SAL_WARN_UNUSED FmXDisposeMultiplexer : public cppu::WeakImplHelper< css::lang::XEventListener >
+class SAL_WARN_UNUSED FmXDisposeMultiplexer final : public cppu::WeakImplHelper< css::lang::XEventListener >
 {
     css::uno::Reference< css::lang::XComponent>       m_xObject;
     FmXDisposeListener* m_pListener;
diff --git a/include/svx/gallerybinaryengine.hxx b/include/svx/gallerybinaryengine.hxx
index 11747c5ee2ea..5e89b5dd756d 100644
--- a/include/svx/gallerybinaryengine.hxx
+++ b/include/svx/gallerybinaryengine.hxx
@@ -44,7 +44,7 @@ class FmFormModel;
 class GalleryTheme;
 class GalleryThemeEntry;
 
-class SVXCORE_DLLPUBLIC GalleryBinaryEngine : public GalleryFileStorage
+class SVXCORE_DLLPUBLIC GalleryBinaryEngine final : public GalleryFileStorage
 {
 private:
     tools::SvRef<SotStorage> m_aSvDrawStorageRef;
diff --git a/include/svx/gallerybinaryengineentry.hxx b/include/svx/gallerybinaryengineentry.hxx
index 042119ae7be2..48a27113ace1 100644
--- a/include/svx/gallerybinaryengineentry.hxx
+++ b/include/svx/gallerybinaryengineentry.hxx
@@ -29,7 +29,7 @@ class GalleryBinaryStorageLocations;
 class GalleryObjectCollection;
 class GalleryBinaryEngine;
 
-class GalleryBinaryEngineEntry : public GalleryFileStorageEntry
+class GalleryBinaryEngineEntry final : public GalleryFileStorageEntry
 {
 private:
     std::unique_ptr<GalleryBinaryStorageLocations> mpGalleryStorageLocations;
diff --git a/include/svx/gallerybinarystoragelocations.hxx b/include/svx/gallerybinarystoragelocations.hxx
index aefe1fcad3eb..6876c64a2a17 100644
--- a/include/svx/gallerybinarystoragelocations.hxx
+++ b/include/svx/gallerybinarystoragelocations.hxx
@@ -23,7 +23,7 @@
 #include <svx/svxdllapi.h>
 #include <svx/gallerystoragelocations.hxx>
 
-class SVXCORE_DLLPUBLIC GalleryBinaryStorageLocations : public GalleryStorageLocations
+class SVXCORE_DLLPUBLIC GalleryBinaryStorageLocations final : public GalleryStorageLocations
 {
 private:
     INetURLObject maThmURL;
diff --git a/include/svx/galtheme.hxx b/include/svx/galtheme.hxx
index 0630262c040c..585293be0ae2 100644
--- a/include/svx/galtheme.hxx
+++ b/include/svx/galtheme.hxx
@@ -47,7 +47,7 @@ namespace unogallery
     class GalleryItem;
 }
 
-class SVXCORE_DLLPUBLIC GalleryTheme : public SfxBroadcaster
+class SVXCORE_DLLPUBLIC GalleryTheme final : public SfxBroadcaster
 {
     friend class Gallery;
     friend class GalleryThemeCacheEntry;
diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx
index 11a5854eebd3..517addf8f843 100644
--- a/include/svx/graphctl.hxx
+++ b/include/svx/graphctl.hxx
@@ -128,12 +128,10 @@ public:
     virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
 };
 
-class GraphCtrlView : public SdrView
+class GraphCtrlView final : public SdrView
 {
     GraphCtrl& rGraphCtrl;
 
-protected:
-
     virtual void MarkListHasChanged() override
     {
         SdrView::MarkListHasChanged();
diff --git a/include/svx/hlnkitem.hxx b/include/svx/hlnkitem.hxx
index 08eded81b517..5d6ac5689401 100644
--- a/include/svx/hlnkitem.hxx
+++ b/include/svx/hlnkitem.hxx
@@ -45,7 +45,7 @@ enum SvxLinkInsertMode
     HLINK_HTMLMODE = 0x0080
 };
 
-class SVX_DLLPUBLIC SvxHyperlinkItem : public SfxPoolItem
+class SVX_DLLPUBLIC SvxHyperlinkItem final : public SfxPoolItem
 {
     OUString sName;
     OUString sURL;
diff --git a/include/svx/imapdlg.hxx b/include/svx/imapdlg.hxx
index 3032018de9df..3c6ea8f62010 100644
--- a/include/svx/imapdlg.hxx
+++ b/include/svx/imapdlg.hxx
@@ -81,7 +81,7 @@ class IMapOwnData;
 class IMapWindow;
 class GraphCtrl;
 
-class SVX_DLLPUBLIC SvxIMapDlg : public SfxModelessDialogController
+class SVX_DLLPUBLIC SvxIMapDlg final : public SfxModelessDialogController
 {
     friend class IMapOwnData;
     friend class IMapWindow;
diff --git a/include/svx/nbdtmg.hxx b/include/svx/nbdtmg.hxx
index 7892a085ff5e..7d397687ab37 100644
--- a/include/svx/nbdtmg.hxx
+++ b/include/svx/nbdtmg.hxx
@@ -168,7 +168,7 @@ class BulletsTypeMgr final : public NBOTypeMgrBase
 };
 
 
-class NumberingTypeMgr: public NBOTypeMgrBase
+class NumberingTypeMgr final : public NBOTypeMgrBase
 {
     private:
         NumberingTypeMgr(const NumberingTypeMgr&) = delete;
@@ -187,7 +187,7 @@ class NumberingTypeMgr: public NBOTypeMgrBase
         static NumberingTypeMgr& GetInstance();
 };
 
-class OutlineTypeMgr: public NBOTypeMgrBase
+class OutlineTypeMgr final : public NBOTypeMgrBase
 {
     private:
         OutlineTypeMgr(const OutlineTypeMgr&) = delete;
diff --git a/include/svx/rubydialog.hxx b/include/svx/rubydialog.hxx
index 5bdd4c9e66d7..12593c73ffc6 100644
--- a/include/svx/rubydialog.hxx
+++ b/include/svx/rubydialog.hxx
@@ -52,7 +52,7 @@ public:
 
 class SvxRubyData_Impl;
 
-class SvxRubyDialog : public SfxModelessDialogController
+class SvxRubyDialog final : public SfxModelessDialogController
 {
     friend class RubyPreview;
 
diff --git a/include/svx/scene3d.hxx b/include/svx/scene3d.hxx
index 4c8b1b14a7e2..d2d91f3c3e9c 100644
--- a/include/svx/scene3d.hxx
+++ b/include/svx/scene3d.hxx
@@ -54,9 +54,8 @@ class Imp3DDepthRemapper;
 |*
 \************************************************************************/
 
-class SVXCORE_DLLPUBLIC E3dScene : public E3dObject, public SdrObjList
+class SVXCORE_DLLPUBLIC E3dScene final : public E3dObject, public SdrObjList
 {
-protected:
     virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
     virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
 
@@ -184,7 +183,7 @@ public:
     virtual SdrObjList* GetSubList() const override;
     virtual void SetTransformChanged() override;
 
-protected:
+private:
     virtual basegfx::B3DRange RecalcBoundVolume() const override;
 };
 
diff --git a/include/svx/sdasitm.hxx b/include/svx/sdasitm.hxx
index e8db1996a9c8..c02076bfb923 100644
--- a/include/svx/sdasitm.hxx
+++ b/include/svx/sdasitm.hxx
@@ -30,7 +30,7 @@
 
 namespace com::sun::star::uno { class Any; }
 
-class SVXCORE_DLLPUBLIC SdrCustomShapeGeometryItem : public SfxPoolItem
+class SVXCORE_DLLPUBLIC SdrCustomShapeGeometryItem final : public SfxPoolItem
 {
 public:
     typedef std::pair < const OUString, const OUString > PropertyPair;
diff --git a/include/svx/sdgcpitm.hxx b/include/svx/sdgcpitm.hxx
index 1f309ea728f8..a9712a15608d 100644
--- a/include/svx/sdgcpitm.hxx
+++ b/include/svx/sdgcpitm.hxx
@@ -28,7 +28,7 @@
 // SdrGrafCropItem -
 
 
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) SdrGrafCropItem : public SvxGrfCrop
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) SdrGrafCropItem final : public SvxGrfCrop
 {
 public:
 
diff --git a/include/svx/sdggaitm.hxx b/include/svx/sdggaitm.hxx
index 5a81962e8792..345082fca6b9 100644
--- a/include/svx/sdggaitm.hxx
+++ b/include/svx/sdggaitm.hxx
@@ -28,7 +28,7 @@
 // SdrGrafGamma100Item -
 
 
-class SVXCORE_DLLPUBLIC SdrGrafGamma100Item : public SfxUInt32Item
+class SVXCORE_DLLPUBLIC SdrGrafGamma100Item final : public SfxUInt32Item
 {
 public:
 
diff --git a/include/svx/sdgluitm.hxx b/include/svx/sdgluitm.hxx
index 886b3cf22344..4ef5e69e9e45 100644
--- a/include/svx/sdgluitm.hxx
+++ b/include/svx/sdgluitm.hxx
@@ -28,7 +28,7 @@
 // SdrGrafLuminanceItem -
 
 
-class SVXCORE_DLLPUBLIC SdrGrafLuminanceItem : public SdrSignedPercentItem
+class SVXCORE_DLLPUBLIC SdrGrafLuminanceItem final : public SdrSignedPercentItem
 {
 public:
 
@@ -43,7 +43,7 @@ public:
 // SdrGrafContrastItem -
 
 
-class SVXCORE_DLLPUBLIC SdrGrafContrastItem : public SdrSignedPercentItem
+class SVXCORE_DLLPUBLIC SdrGrafContrastItem final : public SdrSignedPercentItem
 {
 public:
 
diff --git a/include/svx/sdgmoitm.hxx b/include/svx/sdgmoitm.hxx
index 9d1fbc8daf47..fa205b6db2e7 100644
--- a/include/svx/sdgmoitm.hxx
+++ b/include/svx/sdgmoitm.hxx
@@ -32,7 +32,7 @@ protected:
         SfxEnumItem(SDRATTR_GRAFMODE, eMode) {}
 };
 
-class SVXCORE_DLLPUBLIC SdrGrafModeItem : public SdrGrafModeItem_Base
+class SVXCORE_DLLPUBLIC SdrGrafModeItem final : public SdrGrafModeItem_Base
 {
 public:
                             SdrGrafModeItem( GraphicDrawMode eMode = GraphicDrawMode::Standard ) : SdrGrafModeItem_Base( eMode ) {}
diff --git a/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
index 44e9e435afbe..95c2eda21b8f 100644
--- a/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
+++ b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx
@@ -32,7 +32,7 @@ class MediaItem;
 
 namespace sdr::contact
 {
-class SVXCORE_DLLPUBLIC ViewContactOfSdrMediaObj : public ViewContactOfSdrObj
+class SVXCORE_DLLPUBLIC ViewContactOfSdrMediaObj final : public ViewContactOfSdrObj
 {
     friend class ViewObjectContactOfSdrMediaObj;
 
@@ -53,7 +53,7 @@ public:
     void updateMediaItem(::avmedia::MediaItem& rItem) const;
     void executeMediaItem(const ::avmedia::MediaItem& rItem);
 
-protected:
+private:
     // Create an Object-Specific ViewObjectContact, set ViewContact and
     // ObjectContact. Always needs to return something.
     virtual ViewObjectContact&
@@ -62,7 +62,6 @@ protected:
     // get notified if some properties have changed
     void mediaPropertiesChanged(const ::avmedia::MediaItem& rNewState);
 
-protected:
     // This method is responsible for creating the graphical visualisation data
     // ONLY based on model data
     virtual drawinglayer::primitive2d::Primitive2DContainer
diff --git a/include/svx/sdtaditm.hxx b/include/svx/sdtaditm.hxx
index 1208dd7724c4..79ae6bc011be 100644
--- a/include/svx/sdtaditm.hxx
+++ b/include/svx/sdtaditm.hxx
@@ -31,7 +31,7 @@ enum class SdrTextAniDirection
     Left, Right, Up, Down
 };
 
-class SVXCORE_DLLPUBLIC SdrTextAniDirectionItem: public SfxEnumItem<SdrTextAniDirection> {
+class SVXCORE_DLLPUBLIC SdrTextAniDirectionItem final : public SfxEnumItem<SdrTextAniDirection> {
 public:
     SdrTextAniDirectionItem(SdrTextAniDirection eDir=SdrTextAniDirection::Left): SfxEnumItem(SDRATTR_TEXT_ANIDIRECTION, eDir) {}
     virtual SdrTextAniDirectionItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sdtaitm.hxx b/include/svx/sdtaitm.hxx
index d977f83bec4e..69b909da5bd3 100644
--- a/include/svx/sdtaitm.hxx
+++ b/include/svx/sdtaitm.hxx
@@ -32,7 +32,7 @@ enum SdrTextVertAdjust {SDRTEXTVERTADJUST_TOP,      // aligned to top (normally
                         SDRTEXTVERTADJUST_BLOCK    // support vertical full with supported now
                         /*,SDRTEXTVERTADJUST_STRETCH*/}; // also stretch letters in their height (ni)
 
-class SVXCORE_DLLPUBLIC SdrTextVertAdjustItem: public SfxEnumItem<SdrTextVertAdjust> {
+class SVXCORE_DLLPUBLIC SdrTextVertAdjustItem final : public SfxEnumItem<SdrTextVertAdjust> {
 public:
     SdrTextVertAdjustItem(SdrTextVertAdjust eAdj=SDRTEXTVERTADJUST_TOP): SfxEnumItem(SDRATTR_TEXT_VERTADJUST, eAdj) {}
     SdrTextVertAdjustItem(SdrTextVertAdjust eAdj, sal_uInt16 nWhich): SfxEnumItem(nWhich, eAdj) {}
@@ -56,7 +56,7 @@ enum SdrTextHorzAdjust {SDRTEXTHORZADJUST_LEFT,     // left adjusted
                         SDRTEXTHORZADJUST_BLOCK    // use the whole text frame width
                         /*,SDRTEXTHORZADJUST_STRETCH*/}; // FitToSize in X direction (ni).
 
-class SVXCORE_DLLPUBLIC SdrTextHorzAdjustItem: public SfxEnumItem<SdrTextHorzAdjust> {
+class SVXCORE_DLLPUBLIC SdrTextHorzAdjustItem final : public SfxEnumItem<SdrTextHorzAdjust> {
 public:
     SdrTextHorzAdjustItem(SdrTextHorzAdjust eAdj=SDRTEXTHORZADJUST_BLOCK): SfxEnumItem(SDRATTR_TEXT_HORZADJUST, eAdj) {}
     virtual SdrTextHorzAdjustItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sdtakitm.hxx b/include/svx/sdtakitm.hxx
index f2dca7833118..0d86e517bb84 100644
--- a/include/svx/sdtakitm.hxx
+++ b/include/svx/sdtakitm.hxx
@@ -76,7 +76,7 @@ enum class SdrTextAniKind {
 //   of the text depends on the anchor of the drawing object.  This
 //   corresponds to the position of the text in normal Paint (without scrolling).
 
-class SVXCORE_DLLPUBLIC SdrTextAniKindItem: public SfxEnumItem<SdrTextAniKind> {
+class SVXCORE_DLLPUBLIC SdrTextAniKindItem final : public SfxEnumItem<SdrTextAniKind> {
 public:
     SdrTextAniKindItem(SdrTextAniKind eKind=SdrTextAniKind::NONE): SfxEnumItem(SDRATTR_TEXT_ANIKIND, eKind) {}
     virtual SdrTextAniKindItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sdtfsitm.hxx b/include/svx/sdtfsitm.hxx
index c446bc1fbca6..d98e431dab68 100644
--- a/include/svx/sdtfsitm.hxx
+++ b/include/svx/sdtfsitm.hxx
@@ -30,7 +30,7 @@
 // TextMaxFrameWidth is reached).
 
 
-class SVXCORE_DLLPUBLIC SdrTextFitToSizeTypeItem
+class SVXCORE_DLLPUBLIC SdrTextFitToSizeTypeItem final
     : public SfxEnumItem<css::drawing::TextFitToSizeType>
 {
 public:
diff --git a/include/svx/srchdlg.hxx b/include/svx/srchdlg.hxx
index cdbefe91ae58..71c956dcd69a 100644
--- a/include/svx/srchdlg.hxx
+++ b/include/svx/srchdlg.hxx
@@ -106,7 +106,7 @@ public:
 
  */
 
-class SVX_DLLPUBLIC SvxSearchDialog : public SfxModelessDialogController
+class SVX_DLLPUBLIC SvxSearchDialog final : public SfxModelessDialogController
 {
 friend class SvxSearchController;
 friend class SvxSearchDialogWrapper;
diff --git a/include/svx/svdhdl.hxx b/include/svx/svdhdl.hxx
index 707c1ddc5a48..461937c05969 100644
--- a/include/svx/svdhdl.hxx
+++ b/include/svx/svdhdl.hxx
@@ -382,7 +382,7 @@ public:
 };
 
 
-class ImpEdgeHdl: public SdrHdl
+class ImpEdgeHdl final : public SdrHdl
 {
     SdrEdgeLineCode eLineCode;
 
@@ -427,7 +427,6 @@ public:
 
 class SVXCORE_DLLPUBLIC SdrHdlList
 {
-protected:
     size_t                      mnFocusIndex;
     SdrMarkView*                pView;
     std::deque<std::unique_ptr<SdrHdl>> maList;
@@ -437,7 +436,6 @@ protected:
     bool                        bDistortShear : 1;
     bool                        bMoveOutside : 1;      // move handles outwards (for TextEdit)
 
-private:
     SVX_DLLPRIVATE SdrHdlList(const SdrHdlList&) = delete;
     SVX_DLLPRIVATE void operator=(const SdrHdlList&) = delete;
 
diff --git a/include/svx/svdlayer.hxx b/include/svx/svdlayer.hxx
index cc9e0d4bf91b..2e35c831afee 100644
--- a/include/svx/svdlayer.hxx
+++ b/include/svx/svdlayer.hxx
@@ -104,12 +104,10 @@ friend class SdrView;
 friend class SdrModel;
 friend class SdrPage;
 
-protected:
     std::vector<std::unique_ptr<SdrLayer>> maLayers;
     SdrLayerAdmin* pParent; // The page's admin knows the doc's admin
     SdrModel* pModel; // For broadcasting
     OUString maControlLayerName;
-protected:
     // Find a LayerID which is not in use yet. If all have been used up,
     // we return 0.
     // If you want to play safe, check GetLayerCount()<SDRLAYER_MAXCOUNT
diff --git a/include/svx/svdoedge.hxx b/include/svx/svdoedge.hxx
index 3389fd19c151..838595e70273 100644
--- a/include/svx/svdoedge.hxx
+++ b/include/svx/svdoedge.hxx
@@ -124,7 +124,7 @@ public:
 
 
 /// Utility class SdrEdgeObj
-class SVXCORE_DLLPUBLIC SdrEdgeObj : public SdrTextObj
+class SVXCORE_DLLPUBLIC SdrEdgeObj final : public SdrTextObj
 {
 private:
     // to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo()
@@ -133,7 +133,6 @@ private:
     friend class                SdrCreateView;
     friend class                ImpEdgeHdl;
 
-protected:
     virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
     virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
 
@@ -167,7 +166,7 @@ public:
     void SetSuppressDefaultConnect(bool bNew) { mbSuppressDefaultConnect = bNew; }
     bool GetSuppressDefaultConnect() const { return mbSuppressDefaultConnect; }
 
-protected:
+private:
     virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
 
     static XPolygon ImpCalcObjToCenter(const Point& rStPt, tools::Long nEscAngle, const tools::Rectangle& rRect, const Point& rCenter);
diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx
index 0903f448b251..bf7e329d5442 100644
--- a/include/svx/svdograf.hxx
+++ b/include/svx/svdograf.hxx
@@ -73,7 +73,7 @@ class SdrGraphicLink;
 /**
  * This class represents an embedded or linked bitmap graphic object.
  */
-class SVXCORE_DLLPUBLIC SdrGrafObj : public SdrRectObj
+class SVXCORE_DLLPUBLIC SdrGrafObj final : public SdrRectObj
 {
 private:
     // to allow sdr::properties::GraphicProperties access to SetXPolyDirty()
@@ -118,7 +118,6 @@ private:
     void onGraphicChanged();
     GDIMetaFile             GetMetaFile(GraphicType &rGraphicType) const;
 
-protected:
     // protected destructor
     virtual ~SdrGrafObj() override;
 
diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx
index e3ca9abc3449..83277c5e9831 100644
--- a/include/svx/svdomeas.hxx
+++ b/include/svx/svdomeas.hxx
@@ -42,15 +42,13 @@ public:
     virtual ~SdrMeasureObjGeoData() override;
 };
 
-class SVXCORE_DLLPUBLIC SdrMeasureObj : public SdrTextObj
+class SVXCORE_DLLPUBLIC SdrMeasureObj final : public SdrTextObj
 {
 private:
     // to allow sdr::properties::MeasureProperties access to SetTextDirty()
     friend class sdr::properties::MeasureProperties;
-
     friend class                SdrMeasureField;
 
-protected:
     virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
     virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
 
@@ -58,7 +56,6 @@ protected:
     Point                       aPt2;
     bool                        bTextDirty;
 
-protected:
     void ImpTakeAttr(ImpMeasureRec& rRec) const;
     OUString TakeRepresentation(SdrMeasureFieldKind eMeasureFieldKind) const;
     void ImpCalcGeometrics(const ImpMeasureRec& rRec, ImpMeasurePoly& rPol) const;
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index 9837a422572b..d5552a7c72a4 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -306,7 +306,7 @@ public:
 };
 
 // class SdrPageProperties
-class SVXCORE_DLLPUBLIC SdrPageProperties : public SfxListener, public svl::StyleSheetUser
+class SVXCORE_DLLPUBLIC SdrPageProperties final : public SfxListener, public svl::StyleSheetUser
 {
 private:
     // data
diff --git a/include/svx/svx3ditems.hxx b/include/svx/svx3ditems.hxx
index 46609570155a..7cb5eae6e399 100644
--- a/include/svx/svx3ditems.hxx
+++ b/include/svx/svx3ditems.hxx
@@ -61,13 +61,13 @@ inline SfxBoolItem makeSvx3DDoubleSidedItem(bool bVal) {
 
 // #i28528#
 // Added extra Item (Bool) for chart2 to be able to show reduced line geometry
-class Svx3DReducedLineGeometryItem : public SfxBoolItem {
+class Svx3DReducedLineGeometryItem final : public SfxBoolItem {
 public:
     Svx3DReducedLineGeometryItem(bool bVal = false);
     Svx3DReducedLineGeometryItem* Clone(SfxItemPool * = nullptr) const override;
 };
 
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DNormalsKindItem : public SfxUInt16Item {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DNormalsKindItem final : public SfxUInt16Item {
 public:
     Svx3DNormalsKindItem(sal_uInt16 nVal = 0);
 
@@ -81,7 +81,7 @@ inline SfxBoolItem makeSvx3DNormalsInvertItem(bool bVal) {
     return SfxBoolItem(SDRATTR_3DOBJ_NORMALS_INVERT, bVal);
 }
 
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DTextureProjectionXItem : public SfxUInt16Item {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DTextureProjectionXItem final : public SfxUInt16Item {
 public:
     Svx3DTextureProjectionXItem(sal_uInt16 nVal = 0);
 
@@ -91,7 +91,7 @@ public:
     SVX_DLLPRIVATE virtual Svx3DTextureProjectionXItem* Clone(SfxItemPool* pPool = nullptr) const override;
 };
 
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DTextureProjectionYItem : public SfxUInt16Item {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DTextureProjectionYItem final : public SfxUInt16Item {
 public:
     Svx3DTextureProjectionYItem(sal_uInt16 nVal = 0);
 
@@ -142,7 +142,7 @@ inline SfxBoolItem makeSvx3DTextureFilterItem(bool bVal) {
 }
 
 // Svx3D _3DSCENE_ Items
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DPerspectiveItem : public SfxUInt16Item {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DPerspectiveItem final : public SfxUInt16Item {
 public:
     Svx3DPerspectiveItem(ProjectionType nVal = ProjectionType::Perspective);
 
@@ -268,7 +268,7 @@ inline SfxUInt16Item makeSvx3DShadowSlantItem(sal_uInt16 nVal) {
     return SfxUInt16Item(SDRATTR_3DSCENE_SHADOW_SLANT, nVal);
 }
 
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DShadeModeItem : public SfxUInt16Item {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DShadeModeItem final : public SfxUInt16Item {
 public:
     Svx3DShadeModeItem(sal_uInt16 nVal = 2);
 
@@ -280,35 +280,35 @@ public:
 
 
 // #107245# Item to replace bExtrudeSmoothed and bLatheSmoothed
-class Svx3DSmoothNormalsItem : public SfxBoolItem {
+class Svx3DSmoothNormalsItem final : public SfxBoolItem {
 public:
     Svx3DSmoothNormalsItem(bool bVal = true);
     Svx3DSmoothNormalsItem* Clone(SfxItemPool * = nullptr) const override;
 };
 
 // #107245# Item to replace bExtrudeSmoothFrontBack and bLatheSmoothFrontBack
-class Svx3DSmoothLidsItem : public SfxBoolItem {
+class Svx3DSmoothLidsItem final : public SfxBoolItem {
 public:
     Svx3DSmoothLidsItem(bool bVal = false);
     Svx3DSmoothLidsItem* Clone(SfxItemPool * = nullptr) const override;
 };
 
 // #107245# Item to replace bExtrudeCharacterMode and bLatheCharacterMode
-class Svx3DCharacterModeItem : public SfxBoolItem {
+class Svx3DCharacterModeItem final : public SfxBoolItem {
 public:
     Svx3DCharacterModeItem(bool bVal = false);
     Svx3DCharacterModeItem* Clone(SfxItemPool * = nullptr) const override;
 };
 
 // #107245# Item to replace bExtrudeCloseFront and bLatheCloseFront
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DCloseFrontItem : public SfxBoolItem {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DCloseFrontItem final : public SfxBoolItem {
 public:
     Svx3DCloseFrontItem(bool bVal = true);
     Svx3DCloseFrontItem* Clone(SfxItemPool * = nullptr) const override;
 };
 
 // #107245# Item to replace bExtrudeCloseBack and bLatheCloseBack
-class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DCloseBackItem : public SfxBoolItem {
+class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) Svx3DCloseBackItem final : public SfxBoolItem {
 public:
     Svx3DCloseBackItem(bool bVal = true);
     Svx3DCloseBackItem* Clone(SfxItemPool * = nullptr) const override;
diff --git a/include/svx/sxcecitm.hxx b/include/svx/sxcecitm.hxx
index cb36eb75d1da..dae0a918d889 100644
--- a/include/svx/sxcecitm.hxx
+++ b/include/svx/sxcecitm.hxx
@@ -30,7 +30,7 @@ enum class SdrCaptionEscDir { Horizontal, Vertical, BestFit };
 
 // class SdrCaptionEscDirItem
 
-class SVXCORE_DLLPUBLIC SdrCaptionEscDirItem: public SfxEnumItem<SdrCaptionEscDir> {
+class SVXCORE_DLLPUBLIC SdrCaptionEscDirItem final : public SfxEnumItem<SdrCaptionEscDir> {
 public:
     SdrCaptionEscDirItem(SdrCaptionEscDir eDir=SdrCaptionEscDir::Horizontal): SfxEnumItem(SDRATTR_CAPTIONESCDIR, eDir) {}
     virtual SdrCaptionEscDirItem* Clone(SfxItemPool* pPool=nullptr) const override;
@@ -46,7 +46,7 @@ public:
 // sal_True = line escape position is relative
 // sal_False = line escape position is absolute
 
-class SVXCORE_DLLPUBLIC SdrCaptionEscIsRelItem: public SdrYesNoItem {
+class SVXCORE_DLLPUBLIC SdrCaptionEscIsRelItem final : public SdrYesNoItem {
 public:
     SdrCaptionEscIsRelItem(bool bRel=true): SdrYesNoItem(SDRATTR_CAPTIONESCISREL,bRel) {}
     virtual ~SdrCaptionEscIsRelItem() override;
@@ -65,7 +65,7 @@ public:
 // 10000 = 100.00% = right resp. down
 // only when SdrCaptionEscIsRelItem=TRUE
 
-class SVXCORE_DLLPUBLIC SdrCaptionEscRelItem: public SfxInt32Item {
+class SVXCORE_DLLPUBLIC SdrCaptionEscRelItem final : public SfxInt32Item {
 public:
     SdrCaptionEscRelItem(tools::Long nEscRel=5000): SfxInt32Item(SDRATTR_CAPTIONESCREL,nEscRel) {}
     virtual ~SdrCaptionEscRelItem() override;
@@ -84,7 +84,7 @@ public:
 // >0 = in direction right resp. down
 // only when SdrCaptionEscIsRelItem=FALSE
 
-class SdrCaptionEscAbsItem: public SdrMetricItem {
+class SdrCaptionEscAbsItem final : public SdrMetricItem {
 public:
     SdrCaptionEscAbsItem(tools::Long nEscAbs=0): SdrMetricItem(SDRATTR_CAPTIONESCABS,nEscAbs) {}
     virtual SdrCaptionEscAbsItem* Clone(SfxItemPool*) const override
diff --git a/include/svx/sxcllitm.hxx b/include/svx/sxcllitm.hxx
index f73838f4eba0..8ac03f0eaf84 100644
--- a/include/svx/sxcllitm.hxx
+++ b/include/svx/sxcllitm.hxx
@@ -28,7 +28,7 @@
  * Only for Type3 and Type4
  * Only relevant, if SdrCaptionFitLineLenItem = false
  */
-class SVXCORE_DLLPUBLIC SdrCaptionLineLenItem: public SdrMetricItem {
+class SVXCORE_DLLPUBLIC SdrCaptionLineLenItem final : public SdrMetricItem {
 public:
     SdrCaptionLineLenItem(tools::Long nLineLen=0): SdrMetricItem(SDRATTR_CAPTIONLINELEN,nLineLen) {}
     virtual ~SdrCaptionLineLenItem() override;
@@ -44,7 +44,7 @@ public:
  * The length of the first caption line is either automatically
  * calculated or the default setting is used (SdrCaptionLineLenItem)
  */
-class SVXCORE_DLLPUBLIC SdrCaptionFitLineLenItem: public SdrYesNoItem {
+class SVXCORE_DLLPUBLIC SdrCaptionFitLineLenItem final : public SdrYesNoItem {
 public:
     SdrCaptionFitLineLenItem(bool bBestFit=true): SdrYesNoItem(SDRATTR_CAPTIONFITLINELEN,bBestFit) {}
     virtual ~SdrCaptionFitLineLenItem() override;
diff --git a/include/svx/sxctitm.hxx b/include/svx/sxctitm.hxx
index 6c2b728a2735..3d46f54cb0bd 100644
--- a/include/svx/sxctitm.hxx
+++ b/include/svx/sxctitm.hxx
@@ -27,7 +27,7 @@ enum class SdrCaptionType { Type1, Type2, Type3, Type4 };
 
 
 
-class SVXCORE_DLLPUBLIC SdrCaptionTypeItem: public SfxEnumItem<SdrCaptionType> {
+class SVXCORE_DLLPUBLIC SdrCaptionTypeItem final : public SfxEnumItem<SdrCaptionType> {
 public:
     SdrCaptionTypeItem(SdrCaptionType eStyle=SdrCaptionType::Type3): SfxEnumItem(SDRATTR_CAPTIONTYPE, eStyle) {}
     virtual SdrCaptionTypeItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sxekitm.hxx b/include/svx/sxekitm.hxx
index 36a9b72d5083..fd54d38bbbe2 100644
--- a/include/svx/sxekitm.hxx
+++ b/include/svx/sxekitm.hxx
@@ -28,7 +28,7 @@ enum class SdrEdgeKind
     OrthoLines, ThreeLines, OneLine, Bezier, Arc
 };
 
-class SVXCORE_DLLPUBLIC SdrEdgeKindItem: public SfxEnumItem<SdrEdgeKind> {
+class SVXCORE_DLLPUBLIC SdrEdgeKindItem final : public SfxEnumItem<SdrEdgeKind> {
 public:
     SdrEdgeKindItem(SdrEdgeKind eStyle=SdrEdgeKind::OrthoLines): SfxEnumItem(SDRATTR_EDGEKIND, eStyle) {}
     virtual SdrEdgeKindItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sxelditm.hxx b/include/svx/sxelditm.hxx
index 81cae31f3f5a..c957070ce271 100644
--- a/include/svx/sxelditm.hxx
+++ b/include/svx/sxelditm.hxx
@@ -22,7 +22,7 @@
 #include <svx/svddef.hxx>
 #include <svx/sdmetitm.hxx>
 
-class SdrEdgeLineDeltaCountItem : public SfxUInt16Item
+class SdrEdgeLineDeltaCountItem final : public SfxUInt16Item
 {
 public:
     SdrEdgeLineDeltaCountItem(sal_uInt16 nVal = 0)
diff --git a/include/svx/sxenditm.hxx b/include/svx/sxenditm.hxx
index 82ff4b7c348e..de7accd9b2b6 100644
--- a/include/svx/sxenditm.hxx
+++ b/include/svx/sxenditm.hxx
@@ -23,7 +23,7 @@
 #include <svx/sdmetitm.hxx>
 #include <svx/svxdllapi.h>
 
-class SVXCORE_DLLPUBLIC SdrEdgeNode1HorzDistItem: public SdrMetricItem {
+class SVXCORE_DLLPUBLIC SdrEdgeNode1HorzDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode1HorzDistItem(tools::Long nVal): SdrMetricItem(SDRATTR_EDGENODE1HORZDIST,nVal)  {}
     virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
@@ -31,7 +31,7 @@ public:
     virtual SdrEdgeNode1HorzDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
 };
 
-class SVXCORE_DLLPUBLIC SdrEdgeNode1VertDistItem: public SdrMetricItem {
+class SVXCORE_DLLPUBLIC SdrEdgeNode1VertDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode1VertDistItem(tools::Long nVal): SdrMetricItem(SDRATTR_EDGENODE1VERTDIST,nVal)  {}
     virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
@@ -39,7 +39,7 @@ public:
     virtual SdrEdgeNode1VertDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
 };
 
-class SVXCORE_DLLPUBLIC SdrEdgeNode2HorzDistItem: public SdrMetricItem {
+class SVXCORE_DLLPUBLIC SdrEdgeNode2HorzDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode2HorzDistItem(tools::Long nVal): SdrMetricItem(SDRATTR_EDGENODE2HORZDIST,nVal)  {}
     virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
@@ -47,7 +47,7 @@ public:
     virtual SdrEdgeNode2HorzDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
 };
 
-class SVXCORE_DLLPUBLIC SdrEdgeNode2VertDistItem: public SdrMetricItem {
+class SVXCORE_DLLPUBLIC SdrEdgeNode2VertDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode2VertDistItem(tools::Long nVal): SdrMetricItem(SDRATTR_EDGENODE2VERTDIST,nVal)  {}
     virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
@@ -55,13 +55,13 @@ public:
     virtual SdrEdgeNode2VertDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
 };
 
-class SdrEdgeNode1GlueDistItem: public SdrMetricItem {
+class SdrEdgeNode1GlueDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode1GlueDistItem(tools::Long nVal=0): SdrMetricItem(SDRATTR_EDGENODE1GLUEDIST,nVal)  {}
     virtual SdrEdgeNode1GlueDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
 };
 
-class SdrEdgeNode2GlueDistItem: public SdrMetricItem {
+class SdrEdgeNode2GlueDistItem final : public SdrMetricItem {
 public:
     SdrEdgeNode2GlueDistItem(tools::Long nVal=0): SdrMetricItem(SDRATTR_EDGENODE2GLUEDIST,nVal)  {}
     virtual SdrEdgeNode2GlueDistItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/sxmbritm.hxx b/include/svx/sxmbritm.hxx
index c26d2b25f217..022656aaa142 100644
--- a/include/svx/sxmbritm.hxx
+++ b/include/svx/sxmbritm.hxx
@@ -29,7 +29,7 @@
 // TextUpsideDown, but easily operated)
 // can also be dragged by dragging the measure line item
 // (SdrMeasureLineDistItem) over the reference edge
-class SVXCORE_DLLPUBLIC SdrMeasureBelowRefEdgeItem: public SdrYesNoItem {
+class SVXCORE_DLLPUBLIC SdrMeasureBelowRefEdgeItem final : public SdrYesNoItem {
 public:
     SdrMeasureBelowRefEdgeItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASUREBELOWREFEDGE,bOn) {}
     virtual ~SdrMeasureBelowRefEdgeItem() override;
diff --git a/include/svx/sxmtfitm.hxx b/include/svx/sxmtfitm.hxx
index 2e89ebebd127..11de732865a7 100644
--- a/include/svx/sxmtfitm.hxx
+++ b/include/svx/sxmtfitm.hxx
@@ -27,7 +27,7 @@
 // Nail text down to a fix angle.
 // The text angle is independent of the dimension line.
 // Abrogate TextUpsideDown, TextRota90 and TextAutoAngle. (n.i.)
-class SdrMeasureTextIsFixedAngleItem: public SdrYesNoItem {
+class SdrMeasureTextIsFixedAngleItem final : public SdrYesNoItem {
 public:
     SdrMeasureTextIsFixedAngleItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURETEXTISFIXEDANGLE,bOn) {}
     virtual ~SdrMeasureTextIsFixedAngleItem() override;
@@ -40,7 +40,7 @@ public:
 };
 
 //Angle of the text in 1/100deg. 0=horizontal; read from left to right. (n.i.)
-class SdrMeasureTextFixedAngleItem: public SdrAngleItem {
+class SdrMeasureTextFixedAngleItem final : public SdrAngleItem {
 public:
     SdrMeasureTextFixedAngleItem(Degree100 nVal=0_deg100): SdrAngleItem(SDRATTR_MEASURETEXTFIXEDANGLE,nVal)  {}
     virtual ~SdrMeasureTextFixedAngleItem() override;
@@ -53,7 +53,7 @@ public:
 };
 
 // The decimal places used for the measure value
-class SVXCORE_DLLPUBLIC SdrMeasureDecimalPlacesItem: public SfxInt16Item {
+class SVXCORE_DLLPUBLIC SdrMeasureDecimalPlacesItem final : public SfxInt16Item {
 public:
     SdrMeasureDecimalPlacesItem(sal_Int16 nVal=2): SfxInt16Item(SDRATTR_MEASUREDECIMALPLACES,nVal)  {}
     virtual ~SdrMeasureDecimalPlacesItem() override;
diff --git a/include/svx/sxmtpitm.hxx b/include/svx/sxmtpitm.hxx
index 3a751b419749..2445909e2fd4 100644
--- a/include/svx/sxmtpitm.hxx
+++ b/include/svx/sxmtpitm.hxx
@@ -25,7 +25,7 @@
 #include <com/sun/star/drawing/MeasureTextHorzPos.hpp>
 #include <com/sun/star/drawing/MeasureTextVertPos.hpp>
 
-class SVXCORE_DLLPUBLIC SdrMeasureTextHPosItem: public SfxEnumItem<css::drawing::MeasureTextHorzPos> {
+class SVXCORE_DLLPUBLIC SdrMeasureTextHPosItem final : public SfxEnumItem<css::drawing::MeasureTextHorzPos> {
 public:
     SdrMeasureTextHPosItem(css::drawing::MeasureTextHorzPos ePos = css::drawing::MeasureTextHorzPos::MeasureTextHorzPos_AUTO)
         : SfxEnumItem(SDRATTR_MEASURETEXTHPOS, ePos)
@@ -41,7 +41,7 @@ public:
     virtual bool GetPresentation(SfxItemPresentation ePres, MapUnit eCoreMetric, MapUnit ePresMetric, OUString& rText, const IntlWrapper&) const override;
 };
 
-class SVXCORE_DLLPUBLIC SdrMeasureTextVPosItem: public SfxEnumItem<css::drawing::MeasureTextVertPos> {
+class SVXCORE_DLLPUBLIC SdrMeasureTextVPosItem final : public SfxEnumItem<css::drawing::MeasureTextVertPos> {
 public:
     SdrMeasureTextVPosItem(css::drawing::MeasureTextVertPos ePos = css::drawing::MeasureTextVertPos_AUTO)
         : SfxEnumItem(SDRATTR_MEASURETEXTVPOS, ePos)
diff --git a/include/svx/sxmtritm.hxx b/include/svx/sxmtritm.hxx
index e208d2790d29..184a59f39307 100644
--- a/include/svx/sxmtritm.hxx
+++ b/include/svx/sxmtritm.hxx
@@ -23,7 +23,7 @@
 #include <svx/sdynitm.hxx>
 
 // text across the dimension line (90deg counter-clockwise rotation)
-class SVXCORE_DLLPUBLIC SdrMeasureTextRota90Item: public SdrYesNoItem {
+class SVXCORE_DLLPUBLIC SdrMeasureTextRota90Item final : public SdrYesNoItem {
 public:
     SdrMeasureTextRota90Item(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURETEXTROTA90,bOn) {}
     virtual ~SdrMeasureTextRota90Item() override;
diff --git a/include/svx/sxmuitm.hxx b/include/svx/sxmuitm.hxx
index e350e9677774..ab0ad8a3cd35 100644
--- a/include/svx/sxmuitm.hxx
+++ b/include/svx/sxmuitm.hxx
@@ -26,7 +26,7 @@
 
 // specification of the unit if measurement. The numerical quantity value is converted in this unity.
 // (based on the facts of the MapUnit of the model). This unity is displayed if necessary.
-class SVXCORE_DLLPUBLIC SdrMeasureUnitItem: public SfxEnumItem<FieldUnit> {
+class SVXCORE_DLLPUBLIC SdrMeasureUnitItem final : public SfxEnumItem<FieldUnit> {
 public:
     SdrMeasureUnitItem(FieldUnit eUnit=FieldUnit::NONE): SfxEnumItem(SDRATTR_MEASUREUNIT, eUnit) {}
     virtual SdrMeasureUnitItem* Clone(SfxItemPool* pPool=nullptr) const override;
diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx
index 75c152e76744..2dc2f5c59843 100644
--- a/include/svx/unoshape.hxx
+++ b/include/svx/unoshape.hxx
@@ -479,7 +479,7 @@ public:
 /***********************************************************************
 *                                                                      *
 ***********************************************************************/
-class SvxShapeConnector : public css::drawing::XConnectorShape,
+class SvxShapeConnector final : public css::drawing::XConnectorShape,
                           public SvxShapeText
 {
 public:
diff --git a/include/svx/xbtmpit.hxx b/include/svx/xbtmpit.hxx
index bfc67952ce97..0882081fb7ca 100644
--- a/include/svx/xbtmpit.hxx
+++ b/include/svx/xbtmpit.hxx
@@ -28,7 +28,7 @@
 class SdrModel;
 
 
-class SVXCORE_DLLPUBLIC XFillBitmapItem : public NameOrIndex
+class SVXCORE_DLLPUBLIC XFillBitmapItem final : public NameOrIndex
 {
 private:
     GraphicObject   maGraphicObject;
diff --git a/include/svx/xflftrit.hxx b/include/svx/xflftrit.hxx
index e33b57e0f4ee..bd8a54a240ce 100644
--- a/include/svx/xflftrit.hxx
+++ b/include/svx/xflftrit.hxx
@@ -27,7 +27,7 @@
 
 
 
-class SVXCORE_DLLPUBLIC XFillFloatTransparenceItem : public XFillGradientItem
+class SVXCORE_DLLPUBLIC XFillFloatTransparenceItem final : public XFillGradientItem
 {
 private:
 
diff --git a/include/svx/xflhtit.hxx b/include/svx/xflhtit.hxx
index 1ef7d4e11d55..9eb8805415aa 100644
--- a/include/svx/xflhtit.hxx
+++ b/include/svx/xflhtit.hxx
@@ -29,7 +29,7 @@ class SdrModel;
 
 
 
-class SVXCORE_DLLPUBLIC XFillHatchItem : public NameOrIndex
+class SVXCORE_DLLPUBLIC XFillHatchItem final : public NameOrIndex
 {
     XHatch  aHatch;
 
diff --git a/include/svx/xlndsit.hxx b/include/svx/xlndsit.hxx
index c9ec5d711de5..04b40d41fab2 100644
--- a/include/svx/xlndsit.hxx
+++ b/include/svx/xlndsit.hxx
@@ -30,7 +30,7 @@ class SdrModel;
 
 
 
-class SVXCORE_DLLPUBLIC XLineDashItem : public NameOrIndex
+class SVXCORE_DLLPUBLIC XLineDashItem final : public NameOrIndex
 {
     XDash   aDash;
 
diff --git a/include/svx/xlnedcit.hxx b/include/svx/xlnedcit.hxx
index 6cb8cf402efc..fde707675f6a 100644
--- a/include/svx/xlnedcit.hxx
+++ b/include/svx/xlnedcit.hxx
@@ -25,7 +25,7 @@
 
 
 
-class SVXCORE_DLLPUBLIC XLineEndCenterItem : public SfxBoolItem
+class SVXCORE_DLLPUBLIC XLineEndCenterItem final : public SfxBoolItem
 {
 public:
                             XLineEndCenterItem(bool bEndCenter = false);
diff --git a/include/svx/xlnstcit.hxx b/include/svx/xlnstcit.hxx
index bde8c597d8b0..a48307cab525 100644
--- a/include/svx/xlnstcit.hxx
+++ b/include/svx/xlnstcit.hxx
@@ -25,7 +25,7 @@
 
 
 
-class SVXCORE_DLLPUBLIC XLineStartCenterItem : public SfxBoolItem
+class SVXCORE_DLLPUBLIC XLineStartCenterItem final : public SfxBoolItem
 {
 public:
                             XLineStartCenterItem(bool bStartCenter = false);
diff --git a/include/svx/xtable.hxx b/include/svx/xtable.hxx
index a4e192a0704a..c56c6d092688 100644
--- a/include/svx/xtable.hxx
+++ b/include/svx/xtable.hxx
@@ -234,9 +234,8 @@ public:
         rtl::Reference<XPropertyList> const & plist);
 };
 
-class SVXCORE_DLLPUBLIC XColorList : public XPropertyList
+class SVXCORE_DLLPUBLIC XColorList final : public XPropertyList
 {
-protected:
     virtual BitmapEx  CreateBitmapForUI(tools::Long nIndex) override;
 
 public:
@@ -253,9 +252,8 @@ public:
     static XColorListRef GetStdColorList(); // returns a singleton
 };
 
-class SVXCORE_DLLPUBLIC XLineEndList : public XPropertyList
+class SVXCORE_DLLPUBLIC XLineEndList final : public XPropertyList
 {
-protected:
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 
 public:
@@ -268,14 +266,13 @@ public:
     virtual bool Create() override;
 };
 
-class SVXCORE_DLLPUBLIC XDashList : public XPropertyList
+class SVXCORE_DLLPUBLIC XDashList final : public XPropertyList
 {
 private:
     BitmapEx            maBitmapSolidLine;
     OUString            maStringSolidLine;
     OUString            maStringNoLine;
 
-protected:
     static BitmapEx ImpCreateBitmapForXDash(const XDash* pDash);
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 
@@ -300,11 +297,10 @@ public:
     OUString const & GetStringForUiNoLine() const;
 };
 
-class SVXCORE_DLLPUBLIC XHatchList : public XPropertyList
+class SVXCORE_DLLPUBLIC XHatchList final : public XPropertyList
 {
 private:
     BitmapEx CreateBitmap(tools::Long nIndex, const Size& rSize) const;
-protected:
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 public:
     XHatchList(const OUString& rPath, const OUString& rReferer);
@@ -318,12 +314,10 @@ public:
     virtual bool Create() override;
 };
 
-class SVXCORE_DLLPUBLIC XGradientList : public XPropertyList
+class SVXCORE_DLLPUBLIC XGradientList final : public XPropertyList
 {
 private:
     BitmapEx CreateBitmap(tools::Long nIndex, const Size& rSize) const;
-
-protected:
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 
 public:
@@ -338,12 +332,10 @@ public:
     virtual bool Create() override;
 };
 
-class SVXCORE_DLLPUBLIC XBitmapList : public XPropertyList
+class SVXCORE_DLLPUBLIC XBitmapList final : public XPropertyList
 {
 private:
     BitmapEx CreateBitmap( tools::Long nIndex, const Size& rSize ) const;
-
-protected:
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 
 public:
@@ -357,12 +349,10 @@ public:
     virtual bool Create() override;
 };
 
-class SVXCORE_DLLPUBLIC XPatternList : public XPropertyList
+class SVXCORE_DLLPUBLIC XPatternList final : public XPropertyList
 {
 private:
     BitmapEx CreateBitmap( tools::Long nIndex, const Size& rSize ) const;
-
-protected:
     virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
 
 public:
diff --git a/include/toolkit/awt/vclxdevice.hxx b/include/toolkit/awt/vclxdevice.hxx
index 6db587343f15..c24b79be110c 100644
--- a/include/toolkit/awt/vclxdevice.hxx
+++ b/include/toolkit/awt/vclxdevice.hxx
@@ -74,7 +74,7 @@ public:
 
 
 
-class VCLXVirtualDevice : public VCLXDevice
+class VCLXVirtualDevice final : public VCLXDevice
 {
 public:
                     virtual ~VCLXVirtualDevice() override;
diff --git a/include/vbahelper/vbacollectionimpl.hxx b/include/vbahelper/vbacollectionimpl.hxx
index 9bb537e84f17..c6a0b85aee75 100644
--- a/include/vbahelper/vbacollectionimpl.hxx
+++ b/include/vbahelper/vbacollectionimpl.hxx
@@ -152,7 +152,7 @@ public:
 typedef std::vector< css::uno::Reference< OneIfc > >  XNamedVec;
 private:
 
-    class XNamedEnumerationHelper : public EnumerationHelper_BASE
+    class XNamedEnumerationHelper final : public EnumerationHelper_BASE
     {
         XNamedVec mXNamedVec;
         typename XNamedVec::iterator mIt;
diff --git a/include/vcl/BitmapBasicMorphologyFilter.hxx b/include/vcl/BitmapBasicMorphologyFilter.hxx
index c7999dc28819..055e1e14e637 100644
--- a/include/vcl/BitmapBasicMorphologyFilter.hxx
+++ b/include/vcl/BitmapBasicMorphologyFilter.hxx
@@ -40,7 +40,7 @@ private:
     bool m_bUseValueOutside = false;
 };
 
-class BitmapErodeFilter : public BitmapBasicMorphologyFilter
+class BitmapErodeFilter final : public BitmapBasicMorphologyFilter
 {
 public:
     BitmapErodeFilter(sal_Int32 nRadius)
@@ -53,7 +53,7 @@ public:
     }
 };
 
-class BitmapDilateFilter : public BitmapBasicMorphologyFilter
+class BitmapDilateFilter final : public BitmapBasicMorphologyFilter
 {
 public:
     BitmapDilateFilter(sal_Int32 nRadius)
diff --git a/include/vcl/BitmapFilterStackBlur.hxx b/include/vcl/BitmapFilterStackBlur.hxx
index 8ac6a47e968e..2fdb78b0b1af 100644
--- a/include/vcl/BitmapFilterStackBlur.hxx
+++ b/include/vcl/BitmapFilterStackBlur.hxx
@@ -15,7 +15,7 @@
 #include <vcl/bitmapex.hxx>
 #include <vcl/BitmapFilter.hxx>
 
-class VCL_DLLPUBLIC BitmapFilterStackBlur : public BitmapFilter
+class VCL_DLLPUBLIC BitmapFilterStackBlur final : public BitmapFilter
 {
     sal_Int32 mnRadius;
 
diff --git a/include/vcl/alpha.hxx b/include/vcl/alpha.hxx
index 07d4997ee5a0..1078ce06fe8e 100644
--- a/include/vcl/alpha.hxx
+++ b/include/vcl/alpha.hxx
@@ -29,7 +29,7 @@
 
 class BitmapEx;
 
-class VCL_DLLPUBLIC AlphaMask : public Bitmap
+class VCL_DLLPUBLIC AlphaMask final : public Bitmap
 {
 public:
 
diff --git a/include/vcl/filter/pdfdocument.hxx b/include/vcl/filter/pdfdocument.hxx
index 26866544bf60..073225b589b0 100644
--- a/include/vcl/filter/pdfdocument.hxx
+++ b/include/vcl/filter/pdfdocument.hxx
@@ -138,7 +138,7 @@ public:
 };
 
 /// Array object: a list.
-class VCL_DLLPUBLIC PDFArrayElement : public PDFElement
+class VCL_DLLPUBLIC PDFArrayElement final : public PDFElement
 {
     std::vector<PDFElement*> m_aElements;
     /// The object that contains this array.
@@ -164,7 +164,7 @@ public:
 };
 
 /// Reference object: something with a unique ID.
-class VCL_DLLPUBLIC PDFReferenceElement : public PDFElement
+class VCL_DLLPUBLIC PDFReferenceElement final : public PDFElement
 {
     PDFDocument& m_rDoc;
     int m_fObjectValue;
@@ -197,7 +197,7 @@ public:
 };
 
 /// Stream object: a byte array with a known length.
-class VCL_DLLPUBLIC PDFStreamElement : public PDFElement
+class VCL_DLLPUBLIC PDFStreamElement final : public PDFElement
 {
     size_t m_nLength;
     sal_uInt64 m_nOffset;
@@ -241,7 +241,7 @@ public:
 };
 
 /// Dictionary object: a set key-value pairs.
-class VCL_DLLPUBLIC PDFDictionaryElement : public PDFElement
+class VCL_DLLPUBLIC PDFDictionaryElement final : public PDFElement
 {
     /// Key-value pairs when the dictionary is a nested value.
     std::map<OString, PDFElement*> m_aItems;
@@ -376,7 +376,7 @@ public:
 };
 
 /// Numbering object: an integer or a real.
-class VCL_DLLPUBLIC PDFNumberElement : public PDFElement
+class VCL_DLLPUBLIC PDFNumberElement final : public PDFElement
 {
     /// Input file start location.
     sal_uInt64 m_nOffset = 0;
@@ -397,7 +397,7 @@ public:
 };
 
 /// A one-liner comment.
-class VCL_DLLPUBLIC PDFCommentElement : public PDFElement
+class VCL_DLLPUBLIC PDFCommentElement final : public PDFElement
 {
     PDFDocument& m_rDoc;
     OString m_aComment;
@@ -409,7 +409,7 @@ public:
 };
 
 /// End of a dictionary: '>>'.
-class VCL_DLLPUBLIC PDFEndDictionaryElement : public PDFElement
+class VCL_DLLPUBLIC PDFEndDictionaryElement final : public PDFElement
 {
     /// Offset before the '>>' token.
     sal_uInt64 m_nLocation = 0;
@@ -423,7 +423,7 @@ public:
 };
 
 /// End of a stream: 'endstream' keyword.
-class VCL_DLLPUBLIC PDFEndStreamElement : public PDFElement
+class VCL_DLLPUBLIC PDFEndStreamElement final : public PDFElement
 {
 public:
     bool Read(SvStream& rStream) override;
@@ -432,7 +432,7 @@ public:
 };
 
 /// End of an object: 'endobj' keyword.
-class VCL_DLLPUBLIC PDFEndObjectElement : public PDFElement
+class VCL_DLLPUBLIC PDFEndObjectElement final : public PDFElement
 {
 public:
     bool Read(SvStream& rStream) override;
@@ -441,7 +441,7 @@ public:
 };
 
 /// End of an array: ']'.
-class VCL_DLLPUBLIC PDFEndArrayElement : public PDFElement
+class VCL_DLLPUBLIC PDFEndArrayElement final : public PDFElement
 {
     /// Location before the ']' token.
     sal_uInt64 m_nOffset = 0;
@@ -455,7 +455,7 @@ public:
 };
 
 /// Boolean object: a 'true' or a 'false'.
-class VCL_DLLPUBLIC PDFBooleanElement : public PDFElement
+class VCL_DLLPUBLIC PDFBooleanElement final : public PDFElement
 {
     bool m_aValue;
 
@@ -474,7 +474,7 @@ public:
 };
 
 /// Null object: the 'null' singleton.
-class VCL_DLLPUBLIC PDFNullElement : public PDFElement
+class VCL_DLLPUBLIC PDFNullElement final : public PDFElement
 {
 public:
     bool Read(SvStream& rStream) override;
@@ -489,7 +489,7 @@ public:
  * elements remember their source offset / length, and based on that it's
  * possible to modify the input file.
  */
-class VCL_DLLPUBLIC PDFDocument : public PDFObjectContainer
+class VCL_DLLPUBLIC PDFDocument final : public PDFObjectContainer
 {
     /// This vector owns all elements.
     std::vector<std::unique_ptr<PDFElement>> m_aElements;
@@ -597,7 +597,7 @@ public:
 };
 
 /// The trailer singleton is at the end of the doc.
-class VCL_DLLPUBLIC PDFTrailerElement : public PDFElement
+class VCL_DLLPUBLIC PDFTrailerElement final : public PDFElement
 {
     PDFDocument& m_rDoc;
     PDFDictionaryElement* m_pDictionaryElement;
diff --git a/include/vcl/fontcharmap.hxx b/include/vcl/fontcharmap.hxx
index cdd18fcd633e..ade1da6e715c 100644
--- a/include/vcl/fontcharmap.hxx
+++ b/include/vcl/fontcharmap.hxx
@@ -32,7 +32,7 @@ class OutputDevice;
 typedef tools::SvRef<ImplFontCharMap> ImplFontCharMapRef;
 typedef tools::SvRef<FontCharMap> FontCharMapRef;
 
-class VCL_DLLPUBLIC FontCharMap : public SvRefBase
+class VCL_DLLPUBLIC FontCharMap final : public SvRefBase
 {
 public:
     /** A new FontCharMap is created based on a "default" map, which includes
diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx
index ec4722b48849..eb07ba5b33c4 100644
--- a/include/vcl/layout.hxx
+++ b/include/vcl/layout.hxx
@@ -538,7 +538,7 @@ private:
     //Any Commands an EventBoxHelper receives are forwarded to its parent
     //The VclEventBox ensures that m_aEventBoxHelper is the
     //first child and is transparent, but covers the rest of the children
-    class EventBoxHelper : public vcl::Window
+    class EventBoxHelper final : public vcl::Window
     {
     public:
         EventBoxHelper(vcl::Window* pParent)
diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index 7bc136d680f7..faf002d9a4d7 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -410,7 +410,7 @@ public:
     const OUString& get_id() const { return maID; }
 };
 
-class VCL_DLLPUBLIC MenuBar : public Menu
+class VCL_DLLPUBLIC MenuBar final : public Menu
 {
     Link<void*,void> maCloseHdl;
     bool mbCloseBtnVisible : 1;
@@ -429,8 +429,6 @@ class VCL_DLLPUBLIC MenuBar : public Menu
     SAL_DLLPRIVATE bool ImplHandleKeyEvent(const KeyEvent& rKEvent);
     SAL_DLLPRIVATE bool ImplHandleCmdEvent(const CommandEvent& rCEvent);
 
-protected:
-
     /// Return the MenuBarWindow.
     MenuBarWindow* getMenuBarWindow();
 
@@ -500,7 +498,7 @@ inline MenuBar& MenuBar::operator=( const MenuBar& rMenu )
     return *this;
 }
 
-class VCL_DLLPUBLIC PopupMenu : public Menu
+class VCL_DLLPUBLIC PopupMenu final : public Menu
 {
     friend class Menu;
     friend class MenuFloatingWindow;
@@ -509,8 +507,6 @@ class VCL_DLLPUBLIC PopupMenu : public Menu
 
 private:
     SAL_DLLPRIVATE MenuFloatingWindow * ImplGetFloatingWindow() const;
-
-protected:
     SAL_DLLPRIVATE sal_uInt16 ImplExecute( const VclPtr<vcl::Window>& pW, const tools::Rectangle& rRect, FloatWinPopupFlags nPopupModeFlags, Menu* pSFrom, bool bPreSelectFirst );
     SAL_DLLPRIVATE void ImplFlushPendingSelect();
     SAL_DLLPRIVATE tools::Long ImplCalcHeight( sal_uInt16 nEntries ) const;
diff --git a/include/vcl/pdfextoutdevdata.hxx b/include/vcl/pdfextoutdevdata.hxx
index ea5466b8610f..05bfde12d2d4 100644
--- a/include/vcl/pdfextoutdevdata.hxx
+++ b/include/vcl/pdfextoutdevdata.hxx
@@ -66,7 +66,7 @@ struct PDFExtOutDevBookmarkEntry
 */
 struct PageSyncData;
 struct GlobalSyncData;
-class VCL_DLLPUBLIC PDFExtOutDevData : public ExtOutDevData
+class VCL_DLLPUBLIC PDFExtOutDevData final : public ExtOutDevData
 {
 
     const OutputDevice&         mrOutDev;
diff --git a/include/vcl/tabpage.hxx b/include/vcl/tabpage.hxx
index 45d1c1220d60..a807165ffeeb 100644
--- a/include/vcl/tabpage.hxx
+++ b/include/vcl/tabpage.hxx
@@ -26,7 +26,7 @@
 
 class ScrollBar;
 
-class VCL_DLLPUBLIC TabPage
+class VCL_DLLPUBLIC TabPage final
     : public vcl::Window
     , public vcl::IContext
 {
diff --git a/include/vcl/toolkit/field.hxx b/include/vcl/toolkit/field.hxx
index e30d16e55edc..bf677aec692a 100644
--- a/include/vcl/toolkit/field.hxx
+++ b/include/vcl/toolkit/field.hxx
@@ -199,7 +199,7 @@ private:
     OUString                maCustomUnitText;
 };
 
-class VCL_DLLPUBLIC MetricField : public SpinField, public MetricFormatter
+class VCL_DLLPUBLIC MetricField final : public SpinField, public MetricFormatter
 {
 public:
     explicit                MetricField( vcl::Window* pParent, WinBits nWinStyle );
@@ -231,7 +231,7 @@ public:
     virtual FactoryFunction GetUITestFactory() const override;
 };
 
-class VCL_DLLPUBLIC MetricBox : public ComboBox, public MetricFormatter
+class VCL_DLLPUBLIC MetricBox final : public ComboBox, public MetricFormatter
 {
 public:
     explicit                MetricBox( vcl::Window* pParent, WinBits nWinStyle );
@@ -499,7 +499,7 @@ public:
     virtual void            dispose() override;
 };
 
-class UNLESS_MERGELIBS(VCL_DLLPUBLIC) NumericBox : public ComboBox, public NumericFormatter
+class UNLESS_MERGELIBS(VCL_DLLPUBLIC) NumericBox final : public ComboBox, public NumericFormatter
 {
     SAL_DLLPRIVATE void     ImplNumericReformat( const OUString& rStr, sal_Int64& rValue, OUString& rOutStr );
 public:
diff --git a/include/vcl/toolkit/group.hxx b/include/vcl/toolkit/group.hxx
index b6d7da71ee93..d6088b884cd1 100644
--- a/include/vcl/toolkit/group.hxx
+++ b/include/vcl/toolkit/group.hxx
@@ -27,7 +27,7 @@
 #include <vcl/dllapi.h>
 #include <vcl/ctrl.hxx>
 
-class UNLESS_MERGELIBS(VCL_DLLPUBLIC) GroupBox : public Control
+class UNLESS_MERGELIBS(VCL_DLLPUBLIC) GroupBox final : public Control
 {
 private:
     using Control::ImplInitSettings;
diff --git a/include/vcl/toolkit/ivctrl.hxx b/include/vcl/toolkit/ivctrl.hxx
index b572448e006f..502d16d09917 100644
--- a/include/vcl/toolkit/ivctrl.hxx
+++ b/include/vcl/toolkit/ivctrl.hxx
@@ -174,15 +174,13 @@ public:
 
 class MnemonicGenerator;
 
-class VCL_DLLPUBLIC SvtIconChoiceCtrl : public Control
+class VCL_DLLPUBLIC SvtIconChoiceCtrl final : public Control
 {
     friend class SvxIconChoiceCtrl_Impl;
 
     Link<SvtIconChoiceCtrl*,void>  _aClickIconHdl;
     std::unique_ptr<SvxIconChoiceCtrl_Impl, o3tl::default_delete<SvxIconChoiceCtrl_Impl>> _pImpl;
 
-protected:
-
     virtual void        KeyInput( const KeyEvent& rKEvt ) override;
     virtual void        Command( const CommandEvent& rCEvt ) override;
     virtual void        Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
diff --git a/include/vcl/toolkit/svlbitm.hxx b/include/vcl/toolkit/svlbitm.hxx
index 6ed70b37d093..f02c4125a13b 100644
--- a/include/vcl/toolkit/svlbitm.hxx
+++ b/include/vcl/toolkit/svlbitm.hxx
@@ -147,7 +147,7 @@ public:
     virtual std::unique_ptr<SvLBoxItem> Clone(SvLBoxItem const * pSource) const override;
 };
 
-class SvLBoxButton : public SvLBoxItem
+class SvLBoxButton final : public SvLBoxItem
 {
     bool    isVis;
     SvLBoxButtonData*   pData;
diff --git a/include/vcl/transfer.hxx b/include/vcl/transfer.hxx
index c94b005b13fa..75d81f5fa5db 100644
--- a/include/vcl/transfer.hxx
+++ b/include/vcl/transfer.hxx
@@ -134,7 +134,7 @@ class VCL_DLLPUBLIC TransferableHelper : public cppu::WeakImplHelper< css::datat
 private:
 
     // nested class to implement the XTerminateListener interface
-    class VCL_DLLPRIVATE TerminateListener : public cppu::WeakImplHelper< css::frame::XTerminateListener, css::lang::XServiceInfo >
+    class VCL_DLLPRIVATE TerminateListener final : public cppu::WeakImplHelper< css::frame::XTerminateListener, css::lang::XServiceInfo >
     {
     private:
 
@@ -376,7 +376,7 @@ class VCL_DLLPUBLIC DragSourceHelper
 private:
 
     // nested class to implement the XDragGestureListener interface
-    class SAL_DLLPRIVATE DragGestureListener : public cppu::WeakImplHelper< css::datatransfer::dnd::XDragGestureListener >
+    class SAL_DLLPRIVATE DragGestureListener final : public cppu::WeakImplHelper< css::datatransfer::dnd::XDragGestureListener >
     {
     private:
 
@@ -422,7 +422,7 @@ class VCL_DLLPUBLIC DropTargetHelper
 private:
 
     // nested class to implement the XDropTargetListener interface
-    class SAL_DLLPRIVATE DropTargetListener : public cppu::WeakImplHelper< css::datatransfer::dnd::XDropTargetListener >
+    class SAL_DLLPRIVATE DropTargetListener final : public cppu::WeakImplHelper< css::datatransfer::dnd::XDropTargetListener >
     {
     private:
 
diff --git a/include/vcl/uitest/formattedfielduiobject.hxx b/include/vcl/uitest/formattedfielduiobject.hxx
index 0077f0fde798..0bbc95c75e9b 100644
--- a/include/vcl/uitest/formattedfielduiobject.hxx
+++ b/include/vcl/uitest/formattedfielduiobject.hxx
@@ -14,7 +14,7 @@
 
 class FormattedField;
 
-class FormattedFieldUIObject : public SpinFieldUIObject
+class FormattedFieldUIObject final : public SpinFieldUIObject
 {
     VclPtr<FormattedField> mxFormattedField;
 
@@ -28,7 +28,7 @@ public:
 
     static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
 
-protected:
+private:
     virtual OUString get_name() const override;
 };
 
diff --git a/include/vcl/uitest/metricfielduiobject.hxx b/include/vcl/uitest/metricfielduiobject.hxx
index a4b4efdd26aa..f45da7723053 100644
--- a/include/vcl/uitest/metricfielduiobject.hxx
+++ b/include/vcl/uitest/metricfielduiobject.hxx
@@ -14,7 +14,7 @@
 
 class MetricField;
 
-class MetricFieldUIObject : public SpinFieldUIObject
+class MetricFieldUIObject final : public SpinFieldUIObject
 {
     VclPtr<MetricField> mxMetricField;
 
@@ -28,7 +28,7 @@ public:
 
     static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
 
-protected:
+private:
     virtual OUString get_name() const override;
 };
 
diff --git a/include/vcl/xtextedt.hxx b/include/vcl/xtextedt.hxx
index 94ca9d843f38..765c972df21a 100644
--- a/include/vcl/xtextedt.hxx
+++ b/include/vcl/xtextedt.hxx
@@ -24,7 +24,7 @@
 
 namespace i18nutil { struct SearchOptions; }
 
-class VCL_DLLPUBLIC ExtTextEngine : public TextEngine
+class VCL_DLLPUBLIC ExtTextEngine final : public TextEngine
 {
 public:
                         ExtTextEngine();
diff --git a/vcl/inc/wizdlg.hxx b/vcl/inc/wizdlg.hxx
index d1dd68f0cde3..997a63c06dd7 100644
--- a/vcl/inc/wizdlg.hxx
+++ b/vcl/inc/wizdlg.hxx
@@ -169,7 +169,7 @@ namespace vcl
             @return
                 <TRUE/> if and only if the page is allowed to be left
         */
-        bool                prepareLeaveCurrentState( WizardTypes::CommitPageReason eReason );
+        static bool         prepareLeaveCurrentState( WizardTypes::CommitPageReason eReason );
 
         /** determine the next state to travel from the given one
 
@@ -238,8 +238,6 @@ namespace vcl
         */
         WizardTypes::WizardState getCurrentState() const { return GetCurLevel(); }
 
-        static IWizardPageController*  getPageController( TabPage* _pCurrentPage );
-
         /** returns a human readable name for a given state
 
             There is a default implementation for this method, which returns the display name
diff --git a/vcl/source/control/roadmapwizard.cxx b/vcl/source/control/roadmapwizard.cxx
index 1b24e39cc4fc..8b7116e75282 100644
--- a/vcl/source/control/roadmapwizard.cxx
+++ b/vcl/source/control/roadmapwizard.cxx
@@ -324,7 +324,7 @@ namespace vcl
         TabPage* pCurrentPage = GetPage( getCurrentState() );
         if ( pCurrentPage )
         {
-            const IWizardPageController* pController = getPageController( GetPage( getCurrentState() ) );
+            const IWizardPageController* pController = nullptr;
             OSL_ENSURE( pController != nullptr, "RoadmapWizard::implUpdateRoadmap: no controller for the current page!" );
             bCurrentPageCanAdvance = !pController || pController->canAdvance();
         }
@@ -717,23 +717,8 @@ namespace vcl
         return bResult;
     }
 
-    void RoadmapWizard::enterState(WizardTypes::WizardState nState)
+    void RoadmapWizard::enterState(WizardTypes::WizardState /*nState*/)
     {
-        // tell the page
-        IWizardPageController* pController = getPageController( GetPage( nState ) );
-        if (pController)
-        {
-            pController->initializePage();
-
-            if ( isAutomaticNextButtonStateEnabled() )
-                enableButtons( WizardButtonFlags::NEXT, canAdvance() );
-
-            enableButtons( WizardButtonFlags::PREVIOUS, !m_xWizardImpl->aStateHistory.empty() );
-
-            // set the new title - it depends on the current page (i.e. state)
-            implUpdateTitle();
-        }
-
         // synchronize the roadmap
         implUpdateRoadmap( );
         m_xRoadmapImpl->pRoadmap->SelectRoadmapItemByID( getCurrentState() );
diff --git a/vcl/source/control/wizardmachine.cxx b/vcl/source/control/wizardmachine.cxx
index 59554f275663..c83bcf929afd 100644
--- a/vcl/source/control/wizardmachine.cxx
+++ b/vcl/source/control/wizardmachine.cxx
@@ -681,7 +681,7 @@ namespace vcl
 
     bool RoadmapWizard::prepareLeaveCurrentState( WizardTypes::CommitPageReason _eReason )
     {
-        IWizardPageController* pController = getPageController( GetPage( getCurrentState() ) );
+        IWizardPageController* pController = nullptr;
         ENSURE_OR_RETURN( pController != nullptr, "RoadmapWizard::prepareLeaveCurrentState: no controller for the current page!", true );
         return pController->commitPage( _eReason );
     }
@@ -835,12 +835,6 @@ namespace vcl
         travelNext();
     }
 
-    IWizardPageController* RoadmapWizard::getPageController( TabPage* _pCurrentPage )
-    {
-        IWizardPageController* pController = dynamic_cast< IWizardPageController* >( _pCurrentPage );
-        return pController;
-    }
-
     bool RoadmapWizard::isTravelingSuspended() const
     {
         return m_xWizardImpl->m_bTravelingSuspended;


More information about the Libreoffice-commits mailing list