include/vcl/toolkit/combobox.hxx |   33 ++
 vcl/source/control/combobox.cxx  |  576 ++++++++++++++++++---------------------
 2 files changed, 298 insertions(+), 311 deletions(-)

New commits:
commit 737a07897e7414228d727fd3d16b3bd47ff226fa
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri May 10 16:55:49 2024 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Mon May 13 06:31:55 2024 +0200

    vcl: Merge ComboBox and ComboBox::Impl
    
    This removes one level of indirection.
    
    `ComboBox::Impl` had originally been introduced in
    
        commit ece8699f8f22f6bae137c601bc29b83b75dc3bf3
        Author: Michael Stahl <mst...@redhat.com>
        Date:   Fri Jul 10 12:05:48 2015 +0200
    
            vcl: pImplify ComboBox
    
            The boost::signal stuff is quite heavy (33 kloc), so try to hide it
            from the header.
    
            Change-Id: I87826ccfd2a151aff274ffa6b7159a988f751808
    
    , but all of the boost usage in here has been replaced
    since then.
    
    Change-Id: Ia8fb5cb895800edae104857c7713fa65e509a3c2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167485
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/include/vcl/toolkit/combobox.hxx b/include/vcl/toolkit/combobox.hxx
index 89565cac8652..9e676601f8a8 100644
--- a/include/vcl/toolkit/combobox.hxx
+++ b/include/vcl/toolkit/combobox.hxx
@@ -31,15 +31,44 @@
 #define COMBOBOX_ENTRY_NOTFOUND     (SAL_MAX_INT32)
 #define COMBOBOX_MAX_ENTRIES        (SAL_MAX_INT32 - 1)
 
+class ImplBtn;
+class ImplListBox;
 class ImplListBoxWindow;
+class ImplListBoxFloatingWindow;
 class UserDrawEvent;
+struct ComboBoxBounds;
 
 /// A widget used to choose from a list of items and which has an entry.
 class VCL_DLLPUBLIC ComboBox : public Edit
 {
 private:
-    struct SAL_DLLPRIVATE Impl;
-    std::unique_ptr<Impl> m_pImpl;
+    VclPtr<Edit> m_pSubEdit;
+    VclPtr<ImplListBox> m_pImplLB;
+    VclPtr<ImplBtn> m_pBtn;
+    VclPtr<ImplListBoxFloatingWindow> m_pFloatWin;
+    sal_uInt16 m_nDDHeight;
+    sal_Unicode m_cMultiSep;
+    bool m_isDDAutoSize : 1;
+    bool m_isSyntheticModify : 1;
+    bool m_isKeyBoardModify : 1;
+    bool m_isMatchCase : 1;
+    sal_Int32 m_nMaxWidthChars;
+    sal_Int32 m_nWidthInChars;
+    Link<ComboBox&, void> m_SelectHdl;
+
+    void ImplInitComboBoxData();
+    void ImplUpdateFloatSelection();
+    ComboBoxBounds calcComboBoxDropDownComponentBounds(
+        const Size &rOutSize, const Size &rBorderOutSize) const;
+
+    DECL_LINK(ImplSelectHdl, LinkParamNone*, void);
+    DECL_LINK(ImplCancelHdl, LinkParamNone*, void);
+    DECL_LINK(ImplDoubleClickHdl, ImplListBoxWindow*, void);
+    DECL_LINK(ImplClickBtnHdl, void*, void);
+    DECL_LINK(ImplPopupModeEndHdl, FloatingWindow*, void);
+    DECL_LINK(ImplSelectionChangedHdl, sal_Int32, void);
+    DECL_LINK(ImplAutocompleteHdl, Edit&, void);
+    DECL_LINK(ImplListItemSelectHdl , LinkParamNone*, void);
 
 protected:
     using Window::ImplInit;
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 89a53c537d91..f4327ac77024 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -36,7 +36,6 @@
 #include <tools/json_writer.hxx>
 #include <o3tl/string_view.hxx>
 
-namespace {
 
 struct ComboBoxBounds
 {
@@ -47,54 +46,6 @@ struct ComboBoxBounds
     Size aButtonSize;
 };
 
-}
-
-struct ComboBox::Impl
-{
-    ComboBox &          m_rThis;
-    VclPtr<Edit>        m_pSubEdit;
-    VclPtr<ImplListBox> m_pImplLB;
-    VclPtr<ImplBtn>     m_pBtn;
-    VclPtr<ImplListBoxFloatingWindow>  m_pFloatWin;
-    sal_uInt16          m_nDDHeight;
-    sal_Unicode         m_cMultiSep;
-    bool                m_isDDAutoSize        : 1;
-    bool                m_isSyntheticModify   : 1;
-    bool                m_isKeyBoardModify    : 1;
-    bool                m_isMatchCase         : 1;
-    sal_Int32           m_nMaxWidthChars;
-    sal_Int32           m_nWidthInChars;
-    Link<ComboBox&,void>               m_SelectHdl;
-
-    explicit Impl(ComboBox & rThis)
-        : m_rThis(rThis)
-        , m_nDDHeight(0)
-        , m_cMultiSep(0)
-        , m_isDDAutoSize(false)
-        , m_isSyntheticModify(false)
-        , m_isKeyBoardModify(false)
-        , m_isMatchCase(false)
-        , m_nMaxWidthChars(0)
-        , m_nWidthInChars(-1)
-    {
-    }
-
-    void ImplInitComboBoxData();
-    void ImplUpdateFloatSelection();
-    ComboBoxBounds calcComboBoxDropDownComponentBounds(
-        const Size &rOutSize, const Size &rBorderOutSize) const;
-
-    DECL_LINK( ImplSelectHdl, LinkParamNone*, void );
-    DECL_LINK( ImplCancelHdl, LinkParamNone*, void );
-    DECL_LINK( ImplDoubleClickHdl, ImplListBoxWindow*, void );
-    DECL_LINK( ImplClickBtnHdl, void*, void );
-    DECL_LINK( ImplPopupModeEndHdl, FloatingWindow*, void );
-    DECL_LINK( ImplSelectionChangedHdl, sal_Int32, void );
-    DECL_LINK( ImplAutocompleteHdl, Edit&, void );
-    DECL_LINK( ImplListItemSelectHdl , LinkParamNone*, void );
-};
-
-
 static void lcl_GetSelectedEntries( ::std::set< sal_Int32 >& rSelectedPos, 
std::u16string_view rText, sal_Unicode cTokenSep, const ImplEntryList& 
rEntryList )
 {
     if (rText.empty())
@@ -110,9 +61,16 @@ static void lcl_GetSelectedEntries( ::std::set< sal_Int32 
>& rSelectedPos, std::
 
 ComboBox::ComboBox(vcl::Window *const pParent, WinBits const nStyle)
     : Edit( WindowType::COMBOBOX )
-    , m_pImpl(new Impl(*this))
-{
-    m_pImpl->ImplInitComboBoxData();
+    , m_nDDHeight(0)
+    , m_cMultiSep(0)
+    , m_isDDAutoSize(false)
+    , m_isSyntheticModify(false)
+    , m_isKeyBoardModify(false)
+    , m_isMatchCase(false)
+    , m_nMaxWidthChars(0)
+    , m_nWidthInChars(-1)
+{
+    ImplInitComboBoxData();
     ImplInit( pParent, nStyle );
     SetWidthInChars(-1);
 }
@@ -124,18 +82,18 @@ ComboBox::~ComboBox()
 
 void ComboBox::dispose()
 {
-    m_pImpl->m_pSubEdit.disposeAndClear();
+    m_pSubEdit.disposeAndClear();
 
-    VclPtr< ImplListBox > pImplLB = m_pImpl->m_pImplLB;
-    m_pImpl->m_pImplLB.clear();
+    VclPtr< ImplListBox > pImplLB = m_pImplLB;
+    m_pImplLB.clear();
     pImplLB.disposeAndClear();
 
-    m_pImpl->m_pFloatWin.disposeAndClear();
-    m_pImpl->m_pBtn.disposeAndClear();
+    m_pFloatWin.disposeAndClear();
+    m_pBtn.disposeAndClear();
     Edit::dispose();
 }
 
-void ComboBox::Impl::ImplInitComboBoxData()
+void ComboBox::ImplInitComboBoxData()
 {
     m_pSubEdit.disposeAndClear();
     m_pBtn              = nullptr;
@@ -156,9 +114,9 @@ void ComboBox::ImplCalcEditHeight()
 {
     sal_Int32 nLeft, nTop, nRight, nBottom;
     GetBorder( nLeft, nTop, nRight, nBottom );
-    m_pImpl->m_nDDHeight = 
static_cast<sal_uInt16>(m_pImpl->m_pSubEdit->GetTextHeight() + nTop + nBottom + 
4);
+    m_nDDHeight = static_cast<sal_uInt16>(m_pSubEdit->GetTextHeight() + nTop + 
nBottom + 4);
     if ( !IsDropDownBox() )
-        m_pImpl->m_nDDHeight += 4;
+        m_nDDHeight += 4;
 
     tools::Rectangle aCtrlRegion( Point( 0, 0 ), Size( 10, 10 ) );
     tools::Rectangle aBoundRegion, aContentRegion;
@@ -171,8 +129,8 @@ void ComboBox::ImplCalcEditHeight()
                                 aBoundRegion, aContentRegion ) )
     {
         const tools::Long nNCHeight = aBoundRegion.GetHeight();
-        if (m_pImpl->m_nDDHeight < nNCHeight)
-            m_pImpl->m_nDDHeight = sal::static_int_cast<sal_uInt16>(nNCHeight);
+        if (m_nDDHeight < nNCHeight)
+            m_nDDHeight = sal::static_int_cast<sal_uInt16>(nNCHeight);
     }
 }
 
@@ -198,16 +156,16 @@ void ComboBox::ImplInit( vcl::Window* pParent, WinBits 
nStyle )
     WinBits nListStyle = nStyle;
     if( nStyle & WB_DROPDOWN )
     {
-        m_pImpl->m_pFloatWin = VclPtr<ImplListBoxFloatingWindow>::Create( this 
);
+        m_pFloatWin = VclPtr<ImplListBoxFloatingWindow>::Create( this );
         if (!IsNativeControlSupported(ControlType::Pushbutton, 
ControlPart::Focus))
-            m_pImpl->m_pFloatWin->RequestDoubleBuffering(true);
-        m_pImpl->m_pFloatWin->SetAutoWidth( true );
-        m_pImpl->m_pFloatWin->SetPopupModeEndHdl( LINK(m_pImpl.get(), 
ComboBox::Impl, ImplPopupModeEndHdl) );
+            m_pFloatWin->RequestDoubleBuffering(true);
+        m_pFloatWin->SetAutoWidth( true );
+        m_pFloatWin->SetPopupModeEndHdl(LINK(this, ComboBox, 
ImplPopupModeEndHdl));
 
-        m_pImpl->m_pBtn = VclPtr<ImplBtn>::Create( this, WB_NOLIGHTBORDER | 
WB_RECTSTYLE );
-        ImplInitDropDownButton( m_pImpl->m_pBtn );
-        m_pImpl->m_pBtn->SetMBDownHdl( LINK( m_pImpl.get(), ComboBox::Impl, 
ImplClickBtnHdl ) );
-        m_pImpl->m_pBtn->Show();
+        m_pBtn = VclPtr<ImplBtn>::Create( this, WB_NOLIGHTBORDER | 
WB_RECTSTYLE );
+        ImplInitDropDownButton( m_pBtn );
+        m_pBtn->SetMBDownHdl(LINK(this, ComboBox, ImplClickBtnHdl));
+        m_pBtn->Show();
 
         nEditStyle |= WB_NOBORDER;
         nListStyle &= ~WB_BORDER;
@@ -223,27 +181,27 @@ void ComboBox::ImplInit( vcl::Window* pParent, WinBits 
nStyle )
         }
     }
 
-    m_pImpl->m_pSubEdit.set( VclPtr<Edit>::Create( this, nEditStyle ) );
-    m_pImpl->m_pSubEdit->EnableRTL( false );
-    SetSubEdit( m_pImpl->m_pSubEdit );
-    m_pImpl->m_pSubEdit->SetPosPixel( Point() );
+    m_pSubEdit.set( VclPtr<Edit>::Create( this, nEditStyle ) );
+    m_pSubEdit->EnableRTL( false );
+    SetSubEdit( m_pSubEdit );
+    m_pSubEdit->SetPosPixel( Point() );
     EnableAutocomplete( true );
-    m_pImpl->m_pSubEdit->Show();
+    m_pSubEdit->Show();
 
     vcl::Window* pLBParent = this;
-    if (m_pImpl->m_pFloatWin)
-        pLBParent = m_pImpl->m_pFloatWin;
-    m_pImpl->m_pImplLB = VclPtr<ImplListBox>::Create( pLBParent, 
nListStyle|WB_SIMPLEMODE|WB_AUTOHSCROLL );
-    m_pImpl->m_pImplLB->SetPosPixel( Point() );
-    m_pImpl->m_pImplLB->SetSelectHdl( LINK(m_pImpl.get(), ComboBox::Impl, 
ImplSelectHdl) );
-    m_pImpl->m_pImplLB->SetCancelHdl( LINK(m_pImpl.get(), ComboBox::Impl, 
ImplCancelHdl) );
-    m_pImpl->m_pImplLB->SetDoubleClickHdl( LINK(m_pImpl.get(), ComboBox::Impl, 
ImplDoubleClickHdl) );
-    m_pImpl->m_pImplLB->SetSelectionChangedHdl( LINK(m_pImpl.get(), 
ComboBox::Impl, ImplSelectionChangedHdl) );
-    m_pImpl->m_pImplLB->SetListItemSelectHdl( LINK(m_pImpl.get(), 
ComboBox::Impl, ImplListItemSelectHdl) );
-    m_pImpl->m_pImplLB->Show();
-
-    if (m_pImpl->m_pFloatWin)
-        m_pImpl->m_pFloatWin->SetImplListBox( m_pImpl->m_pImplLB );
+    if (m_pFloatWin)
+        pLBParent = m_pFloatWin;
+    m_pImplLB = VclPtr<ImplListBox>::Create( pLBParent, 
nListStyle|WB_SIMPLEMODE|WB_AUTOHSCROLL );
+    m_pImplLB->SetPosPixel( Point() );
+    m_pImplLB->SetSelectHdl(LINK(this, ComboBox, ImplSelectHdl));
+    m_pImplLB->SetCancelHdl( LINK(this, ComboBox, ImplCancelHdl));
+    m_pImplLB->SetDoubleClickHdl(LINK(this, ComboBox, ImplDoubleClickHdl));
+    m_pImplLB->SetSelectionChangedHdl(LINK(this, ComboBox, 
ImplSelectionChangedHdl));
+    m_pImplLB->SetListItemSelectHdl(LINK(this, ComboBox, 
ImplListItemSelectHdl));
+    m_pImplLB->Show();
+
+    if (m_pFloatWin)
+        m_pFloatWin->SetImplListBox(m_pImplLB);
     else
         GetMainWindow()->AllowGrabFocus( true );
 
@@ -263,38 +221,38 @@ WinBits ComboBox::ImplInitStyle( WinBits nStyle )
 
 void ComboBox::EnableAutocomplete( bool bEnable, bool bMatchCase )
 {
-    m_pImpl->m_isMatchCase = bMatchCase;
+    m_isMatchCase = bMatchCase;
 
     if ( bEnable )
-        m_pImpl->m_pSubEdit->SetAutocompleteHdl( LINK(m_pImpl.get(), 
ComboBox::Impl, ImplAutocompleteHdl) );
+        m_pSubEdit->SetAutocompleteHdl(LINK(this, ComboBox, 
ImplAutocompleteHdl));
     else
-        m_pImpl->m_pSubEdit->SetAutocompleteHdl( Link<Edit&,void>() );
+        m_pSubEdit->SetAutocompleteHdl( Link<Edit&,void>() );
 }
 
 bool ComboBox::IsAutocompleteEnabled() const
 {
-    return m_pImpl->m_pSubEdit->GetAutocompleteHdl().IsSet();
+    return m_pSubEdit->GetAutocompleteHdl().IsSet();
 }
 
-IMPL_LINK_NOARG(ComboBox::Impl, ImplClickBtnHdl, void*, void)
+IMPL_LINK_NOARG(ComboBox, ImplClickBtnHdl, void*, void)
 {
-    m_rThis.CallEventListeners( VclEventId::DropdownPreOpen );
+    CallEventListeners( VclEventId::DropdownPreOpen );
     m_pSubEdit->GrabFocus();
     if (!m_pImplLB->GetEntryList().GetMRUCount())
         ImplUpdateFloatSelection();
     else
         m_pImplLB->SelectEntry( 0 , true );
     m_pBtn->SetPressed( true );
-    m_rThis.SetSelection( Selection( 0, SELECTION_MAX ) );
+    SetSelection( Selection( 0, SELECTION_MAX ) );
     m_pFloatWin->StartFloat( true );
-    m_rThis.CallEventListeners( VclEventId::DropdownOpen );
+    CallEventListeners( VclEventId::DropdownOpen );
 
-    m_rThis.ImplClearLayoutData();
+    ImplClearLayoutData();
     if (m_pImplLB)
         m_pImplLB->GetMainWindow()->ImplClearLayoutData();
 }
 
-IMPL_LINK_NOARG(ComboBox::Impl, ImplPopupModeEndHdl, FloatingWindow*, void)
+IMPL_LINK_NOARG(ComboBox, ImplPopupModeEndHdl, FloatingWindow*, void)
 {
     if (m_pFloatWin->IsPopupModeCanceled())
     {
@@ -304,20 +262,20 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplPopupModeEndHdl, 
FloatingWindow*, void)
             
m_pImplLB->SelectEntry(m_pFloatWin->GetPopupModeStartSaveSelection(), true);
             bool bTravelSelect = m_pImplLB->IsTravelSelect();
             m_pImplLB->SetTravelSelect( true );
-            m_rThis.Select();
+            Select();
             m_pImplLB->SetTravelSelect( bTravelSelect );
         }
     }
 
-    m_rThis.ImplClearLayoutData();
+    ImplClearLayoutData();
     if (m_pImplLB)
         m_pImplLB->GetMainWindow()->ImplClearLayoutData();
 
     m_pBtn->SetPressed( false );
-    m_rThis.CallEventListeners( VclEventId::DropdownClose );
+    CallEventListeners( VclEventId::DropdownClose );
 }
 
-IMPL_LINK(ComboBox::Impl, ImplAutocompleteHdl, Edit&, rEdit, void)
+IMPL_LINK(ComboBox, ImplAutocompleteHdl, Edit&, rEdit, void)
 {
     Selection           aSel = rEdit.GetSelection();
 
@@ -355,14 +313,14 @@ IMPL_LINK(ComboBox::Impl, ImplAutocompleteHdl, Edit&, 
rEdit, void)
     }
 }
 
-IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void)
+IMPL_LINK_NOARG(ComboBox, ImplSelectHdl, LinkParamNone*, void)
 {
-    bool bPopup = m_rThis.IsInDropDown();
+    bool bPopup = IsInDropDown();
     bool bCallSelect = false;
     if (m_pImplLB->IsSelectionChanged() || bPopup)
     {
         OUString aText;
-        if (m_rThis.IsMultiSelectionEnabled())
+        if (IsMultiSelectionEnabled())
         {
             aText = m_pSubEdit->GetText();
 
@@ -417,7 +375,7 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, 
LinkParamNone*, void)
         m_pSubEdit->SetText( aText );
 
         Selection aNewSelection( 0, aText.getLength() );
-        if (m_rThis.IsMultiSelectionEnabled())
+        if (IsMultiSelectionEnabled())
             aNewSelection.Min() = aText.getLength();
         m_pSubEdit->SetSelection( aNewSelection );
 
@@ -425,11 +383,11 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, 
LinkParamNone*, void)
     }
 
     // #84652# Call GrabFocus and EndPopupMode before calling Select/Modify, 
but after changing the text
-    bool bMenuSelect = bPopup && !m_pImplLB->IsTravelSelect() && 
(!m_rThis.IsMultiSelectionEnabled() || !m_pImplLB->GetSelectModifier());
+    bool bMenuSelect = bPopup && !m_pImplLB->IsTravelSelect() && 
(!IsMultiSelectionEnabled() || !m_pImplLB->GetSelectModifier());
     if (bMenuSelect)
     {
         m_pFloatWin->EndPopupMode();
-        m_rThis.GrabFocus();
+        GrabFocus();
     }
 
     if ( bCallSelect )
@@ -437,35 +395,35 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, 
LinkParamNone*, void)
         m_isKeyBoardModify = !bMenuSelect;
         m_pSubEdit->SetModifyFlag();
         m_isSyntheticModify = true;
-        m_rThis.Modify();
+        Modify();
         m_isSyntheticModify = false;
-        m_rThis.Select();
+        Select();
         m_isKeyBoardModify = false;
     }
 }
 
 bool ComboBox::IsSyntheticModify() const
 {
-    return m_pImpl->m_isSyntheticModify;
+    return m_isSyntheticModify;
 }
 
 bool ComboBox::IsModifyByKeyboard() const
 {
-    return m_pImpl->m_isKeyBoardModify;
+    return m_isKeyBoardModify;
 }
 
-IMPL_LINK_NOARG( ComboBox::Impl, ImplListItemSelectHdl, LinkParamNone*, void )
+IMPL_LINK_NOARG(ComboBox, ImplListItemSelectHdl, LinkParamNone*, void)
 {
-    m_rThis.CallEventListeners( VclEventId::DropdownSelect );
+    CallEventListeners(VclEventId::DropdownSelect);
 }
 
-IMPL_LINK_NOARG(ComboBox::Impl, ImplCancelHdl, LinkParamNone*, void)
+IMPL_LINK_NOARG(ComboBox, ImplCancelHdl, LinkParamNone*, void)
 {
-    if (m_rThis.IsInDropDown())
+    if (IsInDropDown())
         m_pFloatWin->EndPopupMode();
 }
 
-IMPL_LINK( ComboBox::Impl, ImplSelectionChangedHdl, sal_Int32, nChanged, void )
+IMPL_LINK( ComboBox, ImplSelectionChangedHdl, sal_Int32, nChanged, void)
 {
     if (!m_pImplLB->IsTrackingSelect())
     {
@@ -474,9 +432,9 @@ IMPL_LINK( ComboBox::Impl, ImplSelectionChangedHdl, 
sal_Int32, nChanged, void )
     }
 }
 
-IMPL_LINK_NOARG(ComboBox::Impl, ImplDoubleClickHdl, ImplListBoxWindow*, void)
+IMPL_LINK_NOARG(ComboBox, ImplDoubleClickHdl, ImplListBoxWindow*, void)
 {
-    m_rThis.DoubleClick();
+    DoubleClick();
 }
 
 void ComboBox::ToggleDropDown()
@@ -484,26 +442,26 @@ void ComboBox::ToggleDropDown()
     if( !IsDropDownBox() )
         return;
 
-    if (m_pImpl->m_pFloatWin->IsInPopupMode())
-        m_pImpl->m_pFloatWin->EndPopupMode();
+    if (m_pFloatWin->IsInPopupMode())
+        m_pFloatWin->EndPopupMode();
     else
     {
-        m_pImpl->m_pSubEdit->GrabFocus();
-        if (!m_pImpl->m_pImplLB->GetEntryList().GetMRUCount())
-            m_pImpl->ImplUpdateFloatSelection();
+        m_pSubEdit->GrabFocus();
+        if (!m_pImplLB->GetEntryList().GetMRUCount())
+            ImplUpdateFloatSelection();
         else
-            m_pImpl->m_pImplLB->SelectEntry( 0 , true );
+            m_pImplLB->SelectEntry( 0 , true );
         CallEventListeners( VclEventId::DropdownPreOpen );
-        m_pImpl->m_pBtn->SetPressed( true );
+        m_pBtn->SetPressed( true );
         SetSelection( Selection( 0, SELECTION_MAX ) );
-        m_pImpl->m_pFloatWin->StartFloat( true );
+        m_pFloatWin->StartFloat(true);
         CallEventListeners( VclEventId::DropdownOpen );
     }
 }
 
 void ComboBox::Select()
 {
-    ImplCallEventListenersAndHandler( VclEventId::ComboboxSelect, [this] () { 
m_pImpl->m_SelectHdl.Call(*this); } );
+    ImplCallEventListenersAndHandler( VclEventId::ComboboxSelect, [this] () { 
m_SelectHdl.Call(*this); } );
 }
 
 void ComboBox::DoubleClick()
@@ -511,29 +469,29 @@ void ComboBox::DoubleClick()
     ImplCallEventListenersAndHandler( VclEventId::ComboboxDoubleClick, [] () 
{} );
 }
 
-bool ComboBox::IsAutoSizeEnabled() const { return m_pImpl->m_isDDAutoSize; }
+bool ComboBox::IsAutoSizeEnabled() const { return m_isDDAutoSize; }
 
 void ComboBox::EnableAutoSize( bool bAuto )
 {
-    m_pImpl->m_isDDAutoSize = bAuto;
-    if (m_pImpl->m_pFloatWin)
+    m_isDDAutoSize = bAuto;
+    if (m_pFloatWin)
     {
-        if (bAuto && !m_pImpl->m_pFloatWin->GetDropDownLineCount())
+        if (bAuto && !m_pFloatWin->GetDropDownLineCount())
         {
             // Adapt to GetListBoxMaximumLineCount here; was on fixed number 
of five before
             AdaptDropDownLineCountToMaximum();
         }
         else if ( !bAuto )
         {
-            m_pImpl->m_pFloatWin->SetDropDownLineCount( 0 );
+            m_pFloatWin->SetDropDownLineCount(0);
         }
     }
 }
 
 void ComboBox::SetDropDownLineCount( sal_uInt16 nLines )
 {
-    if (m_pImpl->m_pFloatWin)
-        m_pImpl->m_pFloatWin->SetDropDownLineCount( nLines );
+    if (m_pFloatWin)
+        m_pFloatWin->SetDropDownLineCount(nLines);
 }
 
 void ComboBox::AdaptDropDownLineCountToMaximum()
@@ -549,8 +507,8 @@ void ComboBox::AdaptDropDownLineCountToMaximum()
 sal_uInt16 ComboBox::GetDropDownLineCount() const
 {
     sal_uInt16 nLines = 0;
-    if (m_pImpl->m_pFloatWin)
-        nLines = m_pImpl->m_pFloatWin->GetDropDownLineCount();
+    if (m_pFloatWin)
+        nLines = m_pFloatWin->GetDropDownLineCount();
     return nLines;
 }
 
@@ -559,15 +517,15 @@ void ComboBox::setPosSizePixel( tools::Long nX, 
tools::Long nY, tools::Long nWid
 {
     if( IsDropDownBox() && ( nFlags & PosSizeFlags::Size ) )
     {
-        Size aPrefSz = m_pImpl->m_pFloatWin->GetPrefSize();
-        if ((nFlags & PosSizeFlags::Height) && (nHeight >= 
2*m_pImpl->m_nDDHeight))
-            aPrefSz.setHeight( nHeight-m_pImpl->m_nDDHeight );
+        Size aPrefSz = m_pFloatWin->GetPrefSize();
+        if ((nFlags & PosSizeFlags::Height) && (nHeight >= 2*m_nDDHeight))
+            aPrefSz.setHeight( nHeight-m_nDDHeight );
         if ( nFlags & PosSizeFlags::Width )
             aPrefSz.setWidth( nWidth );
-        m_pImpl->m_pFloatWin->SetPrefSize( aPrefSz );
+        m_pFloatWin->SetPrefSize(aPrefSz);
 
         if (IsAutoSizeEnabled())
-            nHeight = m_pImpl->m_nDDHeight;
+            nHeight = m_nDDHeight;
     }
 
     Edit::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
@@ -577,44 +535,44 @@ void ComboBox::Resize()
 {
     Control::Resize();
 
-    if (m_pImpl->m_pSubEdit)
+    if (m_pSubEdit)
     {
         Size aOutSz = GetOutputSizePixel();
         if( IsDropDownBox() )
         {
-            ComboBoxBounds 
aBounds(m_pImpl->calcComboBoxDropDownComponentBounds(aOutSz,
+            ComboBoxBounds aBounds(calcComboBoxDropDownComponentBounds(aOutSz,
                 GetWindow(GetWindowType::Border)->GetOutputSizePixel()));
-            m_pImpl->m_pSubEdit->SetPosSizePixel(aBounds.aSubEditPos, 
aBounds.aSubEditSize);
-            m_pImpl->m_pBtn->SetPosSizePixel(aBounds.aButtonPos, 
aBounds.aButtonSize);
+            m_pSubEdit->SetPosSizePixel(aBounds.aSubEditPos, 
aBounds.aSubEditSize);
+            m_pBtn->SetPosSizePixel(aBounds.aButtonPos, aBounds.aButtonSize);
         }
         else
         {
-            m_pImpl->m_pSubEdit->SetSizePixel(Size(aOutSz.Width(), 
m_pImpl->m_nDDHeight));
-            m_pImpl->m_pImplLB->setPosSizePixel(0, m_pImpl->m_nDDHeight,
-                    aOutSz.Width(), aOutSz.Height() - m_pImpl->m_nDDHeight);
+            m_pSubEdit->SetSizePixel(Size(aOutSz.Width(), m_nDDHeight));
+            m_pImplLB->setPosSizePixel(0, m_nDDHeight,
+                    aOutSz.Width(), aOutSz.Height() - m_nDDHeight);
             if ( !GetText().isEmpty() )
-                m_pImpl->ImplUpdateFloatSelection();
+                ImplUpdateFloatSelection();
         }
     }
 
     // adjust the size of the FloatingWindow even when invisible
     // as KEY_PGUP/DOWN is being processed...
-    if (m_pImpl->m_pFloatWin)
-        
m_pImpl->m_pFloatWin->SetSizePixel(m_pImpl->m_pFloatWin->CalcFloatSize());
+    if (m_pFloatWin)
+        m_pFloatWin->SetSizePixel(m_pFloatWin->CalcFloatSize());
 }
 
-bool ComboBox::IsDropDownBox() const { return m_pImpl->m_pFloatWin != nullptr; 
}
+bool ComboBox::IsDropDownBox() const { return m_pFloatWin != nullptr; }
 
 void ComboBox::FillLayoutData() const
 {
     mxLayoutData.emplace();
-    AppendLayoutData( *m_pImpl->m_pSubEdit );
-    m_pImpl->m_pSubEdit->SetLayoutDataParent( this );
+    AppendLayoutData( *m_pSubEdit );
+    m_pSubEdit->SetLayoutDataParent( this );
     ImplListBoxWindow* rMainWindow = GetMainWindow();
-    if (m_pImpl->m_pFloatWin)
+    if (m_pFloatWin)
     {
         // dropdown mode
-        if (m_pImpl->m_pFloatWin->IsReallyVisible())
+        if (m_pFloatWin->IsReallyVisible())
         {
             AppendLayoutData( *rMainWindow );
             rMainWindow->SetLayoutDataParent( this );
@@ -633,45 +591,45 @@ void ComboBox::StateChanged( StateChangedType nType )
 
     if ( nType == StateChangedType::ReadOnly )
     {
-        m_pImpl->m_pImplLB->SetReadOnly( IsReadOnly() );
-        if (m_pImpl->m_pBtn)
-            m_pImpl->m_pBtn->Enable( IsEnabled() && !IsReadOnly() );
+        m_pImplLB->SetReadOnly( IsReadOnly() );
+        if (m_pBtn)
+            m_pBtn->Enable( IsEnabled() && !IsReadOnly() );
     }
     else if ( nType == StateChangedType::Enable )
     {
-        m_pImpl->m_pSubEdit->Enable( IsEnabled() );
-        m_pImpl->m_pImplLB->Enable( IsEnabled() && !IsReadOnly() );
-        if (m_pImpl->m_pBtn)
-            m_pImpl->m_pBtn->Enable( IsEnabled() && !IsReadOnly() );
+        m_pSubEdit->Enable( IsEnabled() );
+        m_pImplLB->Enable( IsEnabled() && !IsReadOnly() );
+        if (m_pBtn)
+            m_pBtn->Enable( IsEnabled() && !IsReadOnly() );
         Invalidate();
     }
     else if( nType == StateChangedType::UpdateMode )
     {
-        m_pImpl->m_pImplLB->SetUpdateMode( IsUpdateMode() );
+        m_pImplLB->SetUpdateMode( IsUpdateMode() );
     }
     else if ( nType == StateChangedType::Zoom )
     {
-        m_pImpl->m_pImplLB->SetZoom( GetZoom() );
-        m_pImpl->m_pSubEdit->SetZoom( GetZoom() );
+        m_pImplLB->SetZoom( GetZoom() );
+        m_pSubEdit->SetZoom( GetZoom() );
         ImplCalcEditHeight();
         Resize();
     }
     else if ( nType == StateChangedType::ControlFont )
     {
-        m_pImpl->m_pImplLB->SetControlFont( GetControlFont() );
-        m_pImpl->m_pSubEdit->SetControlFont( GetControlFont() );
+        m_pImplLB->SetControlFont( GetControlFont() );
+        m_pSubEdit->SetControlFont( GetControlFont() );
         ImplCalcEditHeight();
         Resize();
     }
     else if ( nType == StateChangedType::ControlForeground )
     {
-        m_pImpl->m_pImplLB->SetControlForeground( GetControlForeground() );
-        m_pImpl->m_pSubEdit->SetControlForeground( GetControlForeground() );
+        m_pImplLB->SetControlForeground( GetControlForeground() );
+        m_pSubEdit->SetControlForeground( GetControlForeground() );
     }
     else if ( nType == StateChangedType::ControlBackground )
     {
-        m_pImpl->m_pImplLB->SetControlBackground( GetControlBackground() );
-        m_pImpl->m_pSubEdit->SetControlBackground( GetControlBackground() );
+        m_pImplLB->SetControlBackground( GetControlBackground() );
+        m_pSubEdit->SetControlBackground( GetControlBackground() );
     }
     else if ( nType == StateChangedType::Style )
     {
@@ -680,13 +638,13 @@ void ComboBox::StateChanged( StateChangedType nType )
     }
     else if( nType == StateChangedType::Mirroring )
     {
-        if (m_pImpl->m_pBtn)
+        if (m_pBtn)
         {
-            m_pImpl->m_pBtn->EnableRTL( IsRTLEnabled() );
-            ImplInitDropDownButton( m_pImpl->m_pBtn );
+            m_pBtn->EnableRTL( IsRTLEnabled() );
+            ImplInitDropDownButton( m_pBtn );
         }
-        m_pImpl->m_pSubEdit->CompatStateChanged( StateChangedType::Mirroring );
-        m_pImpl->m_pImplLB->EnableRTL( IsRTLEnabled() );
+        m_pSubEdit->CompatStateChanged( StateChangedType::Mirroring );
+        m_pImplLB->EnableRTL( IsRTLEnabled() );
         Resize();
     }
 }
@@ -701,13 +659,13 @@ void ComboBox::DataChanged( const DataChangedEvent& 
rDCEvt )
           (rDCEvt.GetFlags() & AllSettingsFlags::STYLE))) )
         return;
 
-    if (m_pImpl->m_pBtn)
+    if (m_pBtn)
     {
-        m_pImpl->m_pBtn->GetOutDev()->SetSettings( GetSettings() );
-        ImplInitDropDownButton( m_pImpl->m_pBtn );
+        m_pBtn->GetOutDev()->SetSettings( GetSettings() );
+        ImplInitDropDownButton( m_pBtn );
     }
     Resize();
-    m_pImpl->m_pImplLB->Resize(); // not called by ComboBox::Resize() if 
ImplLB is unchanged
+    m_pImplLB->Resize(); // not called by ComboBox::Resize() if ImplLB is 
unchanged
 
     SetBackground();    // due to a hack in Window::UpdateSettings the 
background must be reset
                         // otherwise it will overpaint NWF drawn comboboxes
@@ -717,7 +675,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt )
 {
     bool bDone = false;
     if ((rNEvt.GetType() == NotifyEventType::KEYINPUT)
-        && (rNEvt.GetWindow() == m_pImpl->m_pSubEdit)
+        && (rNEvt.GetWindow() == m_pSubEdit)
         && !IsReadOnly())
     {
         KeyEvent aKeyEvt = *rNEvt.GetKeyEvent();
@@ -729,55 +687,55 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt )
             case KEY_PAGEUP:
             case KEY_PAGEDOWN:
             {
-                m_pImpl->ImplUpdateFloatSelection();
-                if ((nKeyCode == KEY_DOWN) && m_pImpl->m_pFloatWin
-                    && !m_pImpl->m_pFloatWin->IsInPopupMode()
+                ImplUpdateFloatSelection();
+                if ((nKeyCode == KEY_DOWN) && m_pFloatWin
+                    && !m_pFloatWin->IsInPopupMode()
                     && aKeyEvt.GetKeyCode().IsMod2())
                 {
                     CallEventListeners( VclEventId::DropdownPreOpen );
-                    m_pImpl->m_pBtn->SetPressed( true );
-                    if (m_pImpl->m_pImplLB->GetEntryList().GetMRUCount())
-                        m_pImpl->m_pImplLB->SelectEntry( 0 , true );
+                    m_pBtn->SetPressed( true );
+                    if (m_pImplLB->GetEntryList().GetMRUCount())
+                        m_pImplLB->SelectEntry( 0 , true );
                     SetSelection( Selection( 0, SELECTION_MAX ) );
-                    m_pImpl->m_pFloatWin->StartFloat( false );
+                    m_pFloatWin->StartFloat(false);
                     CallEventListeners( VclEventId::DropdownOpen );
                     bDone = true;
                 }
-                else if ((nKeyCode == KEY_UP) && m_pImpl->m_pFloatWin
-                        && m_pImpl->m_pFloatWin->IsInPopupMode()
+                else if ((nKeyCode == KEY_UP) && m_pFloatWin
+                        && m_pFloatWin->IsInPopupMode()
                         && aKeyEvt.GetKeyCode().IsMod2())
                 {
-                    m_pImpl->m_pFloatWin->EndPopupMode();
+                    m_pFloatWin->EndPopupMode();
                     bDone = true;
                 }
                 else
                 {
-                    bDone = m_pImpl->m_pImplLB->ProcessKeyInput( aKeyEvt );
+                    bDone = m_pImplLB->ProcessKeyInput( aKeyEvt );
                 }
             }
             break;
 
             case KEY_RETURN:
             {
-                if ((rNEvt.GetWindow() == m_pImpl->m_pSubEdit) && 
IsInDropDown())
+                if ((rNEvt.GetWindow() == m_pSubEdit) && IsInDropDown())
                 {
-                    m_pImpl->m_pImplLB->ProcessKeyInput( aKeyEvt );
+                    m_pImplLB->ProcessKeyInput( aKeyEvt );
                     bDone = true;
                 }
             }
             break;
         }
     }
-    else if ((rNEvt.GetType() == NotifyEventType::LOSEFOCUS) && 
m_pImpl->m_pFloatWin)
+    else if ((rNEvt.GetType() == NotifyEventType::LOSEFOCUS) && m_pFloatWin)
     {
-        if (m_pImpl->m_pFloatWin->HasChildPathFocus())
-            m_pImpl->m_pSubEdit->GrabFocus();
-        else if (m_pImpl->m_pFloatWin->IsInPopupMode() && 
!HasChildPathFocus(true))
-            m_pImpl->m_pFloatWin->EndPopupMode();
+        if (m_pFloatWin->HasChildPathFocus())
+            m_pSubEdit->GrabFocus();
+        else if (m_pFloatWin->IsInPopupMode() && !HasChildPathFocus(true))
+            m_pFloatWin->EndPopupMode();
     }
     else if( (rNEvt.GetType() == NotifyEventType::COMMAND) &&
              (rNEvt.GetCommandEvent()->GetCommand() == CommandEventId::Wheel) 
&&
-             (rNEvt.GetWindow() == m_pImpl->m_pSubEdit) )
+             (rNEvt.GetWindow() == m_pSubEdit) )
     {
         MouseWheelBehaviour nWheelBehavior( 
GetSettings().GetMouseSettings().GetWheelBehavior() );
         if  (   ( nWheelBehavior == MouseWheelBehaviour::ALWAYS )
@@ -786,7 +744,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt )
                 )
             )
         {
-            bDone = 
m_pImpl->m_pImplLB->HandleWheelAsCursorTravel(*rNEvt.GetCommandEvent(), *this);
+            bDone = 
m_pImplLB->HandleWheelAsCursorTravel(*rNEvt.GetCommandEvent(), *this);
         }
         else
         {
@@ -796,7 +754,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt )
     else if ((rNEvt.GetType() == NotifyEventType::MOUSEBUTTONDOWN)
             && (rNEvt.GetWindow() == GetMainWindow()))
     {
-        m_pImpl->m_pSubEdit->GrabFocus();
+        m_pSubEdit->GrabFocus();
     }
 
     return bDone || Edit::EventNotify( rNEvt );
@@ -807,7 +765,7 @@ void ComboBox::SetText( const OUString& rStr )
     CallEventListeners( VclEventId::ComboboxSetText );
 
     Edit::SetText( rStr );
-    m_pImpl->ImplUpdateFloatSelection();
+    ImplUpdateFloatSelection();
 }
 
 void ComboBox::SetText( const OUString& rStr, const Selection& rNewSelection )
@@ -815,25 +773,25 @@ void ComboBox::SetText( const OUString& rStr, const 
Selection& rNewSelection )
     CallEventListeners( VclEventId::ComboboxSetText );
 
     Edit::SetText( rStr, rNewSelection );
-    m_pImpl->ImplUpdateFloatSelection();
+    ImplUpdateFloatSelection();
 }
 
 void ComboBox::Modify()
 {
-    if (!m_pImpl->m_isSyntheticModify)
-        m_pImpl->ImplUpdateFloatSelection();
+    if (!m_isSyntheticModify)
+        ImplUpdateFloatSelection();
 
     Edit::Modify();
 }
 
-void ComboBox::Impl::ImplUpdateFloatSelection()
+void ComboBox::ImplUpdateFloatSelection()
 {
     if (!m_pImplLB || !m_pSubEdit)
         return;
 
     // move text in the ListBox into the visible region
     m_pImplLB->SetCallSelectionChangedHdl( false );
-    if (!m_rThis.IsMultiSelectionEnabled())
+    if (!IsMultiSelectionEnabled())
     {
         OUString        aSearchStr( m_pSubEdit->GetText() );
         sal_Int32       nSelect = LISTBOX_ENTRY_NOTFOUND;
@@ -881,20 +839,20 @@ void ComboBox::Impl::ImplUpdateFloatSelection()
 
 sal_Int32 ComboBox::InsertEntry(const OUString& rStr, sal_Int32 const nPos)
 {
-    assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > 
m_pImpl->m_pImplLB->GetEntryList().GetEntryCount());
+    assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > 
m_pImplLB->GetEntryList().GetEntryCount());
 
     sal_Int32 nRealPos;
     if (nPos == COMBOBOX_APPEND)
         nRealPos = nPos;
     else
     {
-        const sal_Int32 nMRUCount = 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+        const sal_Int32 nMRUCount = m_pImplLB->GetEntryList().GetMRUCount();
         assert(nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount);
         nRealPos = nPos + nMRUCount;
     }
 
-    nRealPos = m_pImpl->m_pImplLB->InsertEntry( nRealPos, rStr );
-    nRealPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+    nRealPos = m_pImplLB->InsertEntry( nRealPos, rStr );
+    nRealPos -= m_pImplLB->GetEntryList().GetMRUCount();
     CallEventListeners( VclEventId::ComboboxItemAdded, 
reinterpret_cast<void*>(static_cast<sal_IntPtr>(nRealPos)) );
     return nRealPos;
 }
@@ -902,95 +860,95 @@ sal_Int32 ComboBox::InsertEntry(const OUString& rStr, 
sal_Int32 const nPos)
 sal_Int32 ComboBox::InsertEntryWithImage(
         const OUString& rStr, const Image& rImage, sal_Int32 const nPos)
 {
-    assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > 
m_pImpl->m_pImplLB->GetEntryList().GetEntryCount());
+    assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > 
m_pImplLB->GetEntryList().GetEntryCount());
 
     sal_Int32 nRealPos;
     if (nPos == COMBOBOX_APPEND)
         nRealPos = nPos;
     else
     {
-        const sal_Int32 nMRUCount = 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+        const sal_Int32 nMRUCount = m_pImplLB->GetEntryList().GetMRUCount();
         assert(nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount);
         nRealPos = nPos + nMRUCount;
     }
 
-    nRealPos = m_pImpl->m_pImplLB->InsertEntry( nRealPos, rStr, rImage );
-    nRealPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+    nRealPos = m_pImplLB->InsertEntry( nRealPos, rStr, rImage );
+    nRealPos -= m_pImplLB->GetEntryList().GetMRUCount();
     CallEventListeners( VclEventId::ComboboxItemAdded, 
reinterpret_cast<void*>(static_cast<sal_IntPtr>(nRealPos)) );
     return nRealPos;
 }
 
 void ComboBox::RemoveEntryAt(sal_Int32 const nPos)
 {
-    const sal_Int32 nMRUCount = 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+    const sal_Int32 nMRUCount = m_pImplLB->GetEntryList().GetMRUCount();
     assert(nPos >= 0 && nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount);
-    m_pImpl->m_pImplLB->RemoveEntry( nPos + nMRUCount );
+    m_pImplLB->RemoveEntry( nPos + nMRUCount );
     CallEventListeners( VclEventId::ComboboxItemRemoved, 
reinterpret_cast<void*>(static_cast<sal_IntPtr>(nPos)) );
 }
 
 void ComboBox::Clear()
 {
-    if (!m_pImpl->m_pImplLB)
+    if (!m_pImplLB)
         return;
-    m_pImpl->m_pImplLB->Clear();
+    m_pImplLB->Clear();
     CallEventListeners( VclEventId::ComboboxItemRemoved, 
reinterpret_cast<void*>(sal_IntPtr(-1)) );
 }
 
 Image ComboBox::GetEntryImage( sal_Int32 nPos ) const
 {
-    if (m_pImpl->m_pImplLB->GetEntryList().HasEntryImage(nPos))
-        return m_pImpl->m_pImplLB->GetEntryList().GetEntryImage( nPos );
+    if (m_pImplLB->GetEntryList().HasEntryImage(nPos))
+        return m_pImplLB->GetEntryList().GetEntryImage( nPos );
     return Image();
 }
 
 sal_Int32 ComboBox::GetEntryPos( std::u16string_view rStr ) const
 {
-    sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList().FindEntry( rStr );
+    sal_Int32 nPos = m_pImplLB->GetEntryList().FindEntry( rStr );
     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
-        nPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+        nPos -= m_pImplLB->GetEntryList().GetMRUCount();
     return nPos;
 }
 
 OUString ComboBox::GetEntry( sal_Int32 nPos ) const
 {
-    const sal_Int32 nMRUCount = 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+    const sal_Int32 nMRUCount = m_pImplLB->GetEntryList().GetMRUCount();
     if (nPos < 0 || nPos > COMBOBOX_MAX_ENTRIES - nMRUCount)
         return OUString();
 
-    return m_pImpl->m_pImplLB->GetEntryList().GetEntryText( nPos + nMRUCount );
+    return m_pImplLB->GetEntryList().GetEntryText( nPos + nMRUCount );
 }
 
 sal_Int32 ComboBox::GetEntryCount() const
 {
-    if (!m_pImpl->m_pImplLB)
+    if (!m_pImplLB)
         return 0;
-    return m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() - 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount();
+    return m_pImplLB->GetEntryList().GetEntryCount() - 
m_pImplLB->GetEntryList().GetMRUCount();
 }
 
 bool ComboBox::IsTravelSelect() const
 {
-    return m_pImpl->m_pImplLB->IsTravelSelect();
+    return m_pImplLB->IsTravelSelect();
 }
 
 bool ComboBox::IsInDropDown() const
 {
     // when the dropdown is dismissed, first mbInPopupMode is set to false, 
and on the next event iteration then
     // mbPopupMode is set to false
-    return m_pImpl->m_pFloatWin && m_pImpl->m_pFloatWin->IsInPopupMode() && 
m_pImpl->m_pFloatWin->ImplIsInPrivatePopupMode();
+    return m_pFloatWin && m_pFloatWin->IsInPopupMode() && 
m_pFloatWin->ImplIsInPrivatePopupMode();
 }
 
 bool ComboBox::IsMultiSelectionEnabled() const
 {
-    return m_pImpl->m_pImplLB->IsMultiSelectionEnabled();
+    return m_pImplLB->IsMultiSelectionEnabled();
 }
 
-void ComboBox::SetSelectHdl(const Link<ComboBox&,void>& rLink) { 
m_pImpl->m_SelectHdl = rLink; }
+void ComboBox::SetSelectHdl(const Link<ComboBox&,void>& rLink) { m_SelectHdl = 
rLink; }
 
 void ComboBox::SetEntryActivateHdl(const Link<Edit&,bool>& rLink)
 {
-    if (!m_pImpl->m_pSubEdit)
+    if (!m_pSubEdit)
         return;
-    m_pImpl->m_pSubEdit->SetActivateHdl(rLink);
+    m_pSubEdit->SetActivateHdl(rLink);
 }
 
 Size ComboBox::GetOptimalSize() const
@@ -1024,34 +982,34 @@ Size ComboBox::CalcMinimumSize() const
 {
     Size aSz;
 
-    if (!m_pImpl->m_pImplLB)
+    if (!m_pImplLB)
         return aSz;
 
     if (!IsDropDownBox())
     {
-        aSz = m_pImpl->m_pImplLB->CalcSize( 
m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() );
-        aSz.AdjustHeight(m_pImpl->m_nDDHeight );
+        aSz = m_pImplLB->CalcSize( m_pImplLB->GetEntryList().GetEntryCount() );
+        aSz.AdjustHeight(m_nDDHeight );
     }
     else
     {
         aSz.setHeight( Edit::CalcMinimumSizeForText(GetText()).Height() );
 
-        if (m_pImpl->m_nWidthInChars!= -1)
-            aSz.setWidth(m_pImpl->m_nWidthInChars * approximate_digit_width());
+        if (m_nWidthInChars!= -1)
+            aSz.setWidth(m_nWidthInChars * approximate_digit_width());
         else
-            aSz.setWidth(m_pImpl->m_pImplLB->GetMaxEntryWidth());
+            aSz.setWidth(m_pImplLB->GetMaxEntryWidth());
     }
 
-    if (m_pImpl->m_nMaxWidthChars != -1)
+    if (m_nMaxWidthChars != -1)
     {
-        tools::Long nMaxWidth = m_pImpl->m_nMaxWidthChars * 
approximate_char_width();
+        tools::Long nMaxWidth = m_nMaxWidthChars * approximate_char_width();
         aSz.setWidth( std::min(aSz.Width(), nMaxWidth) );
     }
 
     if (IsDropDownBox())
         aSz.AdjustWidth(getMaxWidthScrollBarAndDownButton() );
 
-    ComboBoxBounds aBounds(m_pImpl->calcComboBoxDropDownComponentBounds(
+    ComboBoxBounds aBounds(calcComboBoxDropDownComponentBounds(
         Size(0xFFFF, 0xFFFF), Size(0xFFFF, 0xFFFF)));
     aSz.AdjustWidth(aBounds.aSubEditPos.X()*2 );
 
@@ -1074,11 +1032,11 @@ Size ComboBox::CalcAdjustedSize( const Size& rPrefSize 
) const
         if ( nLines < 1 )
             nLines = 1;
         aSz.setHeight( nLines * nEntryHeight );
-        aSz.AdjustHeight(m_pImpl->m_nDDHeight );
+        aSz.AdjustHeight(m_nDDHeight );
     }
     else
     {
-        aSz.setHeight( m_pImpl->m_nDDHeight );
+        aSz.setHeight( m_nDDHeight );
     }
     aSz.AdjustHeight(nTop+nBottom );
 
@@ -1096,9 +1054,9 @@ Size ComboBox::CalcBlockSize( sal_uInt16 nColumns, 
sal_uInt16 nLines ) const
     if ( nLines )
     {
         if ( !IsDropDownBox() )
-            aSz.setHeight( m_pImpl->m_pImplLB->CalcSize( nLines ).Height() + 
m_pImpl->m_nDDHeight );
+            aSz.setHeight( m_pImplLB->CalcSize( nLines ).Height() + 
m_nDDHeight );
         else
-            aSz.setHeight( m_pImpl->m_nDDHeight );
+            aSz.setHeight( m_nDDHeight );
     }
     else
         aSz.setHeight( aMinSz.Height() );
@@ -1128,7 +1086,7 @@ Size ComboBox::CalcBlockSize( sal_uInt16 nColumns, 
sal_uInt16 nLines ) const
 
 tools::Long ComboBox::GetDropDownEntryHeight() const
 {
-    return m_pImpl->m_pImplLB->GetEntryHeight();
+    return m_pImplLB->GetEntryHeight();
 }
 
 void ComboBox::GetMaxVisColumnsAndLines( sal_uInt16& rnCols, sal_uInt16& 
rnLines ) const
@@ -1142,7 +1100,7 @@ void ComboBox::GetMaxVisColumnsAndLines( sal_uInt16& 
rnCols, sal_uInt16& rnLines
     }
     else
     {
-        Size aOutSz = m_pImpl->m_pSubEdit->GetOutputSizePixel();
+        Size aOutSz = m_pSubEdit->GetOutputSizePixel();
         rnCols = (nCharWidth > 0) ? 
static_cast<sal_uInt16>(aOutSz.Width()/nCharWidth) : 1;
         rnLines = 1;
     }
@@ -1190,10 +1148,10 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& 
rPos, SystemTextColorFlags
         DrawTextFlags nTextStyle = DrawTextFlags::VCenter;
 
         // First, draw the edit part
-        Size aOrigSize(m_pImpl->m_pSubEdit->GetSizePixel());
-        m_pImpl->m_pSubEdit->SetSizePixel(Size(aSize.Width(), nEditHeight));
-        m_pImpl->m_pSubEdit->Draw( pDev, aPos, nFlags );
-        m_pImpl->m_pSubEdit->SetSizePixel(aOrigSize);
+        Size aOrigSize(m_pSubEdit->GetSizePixel());
+        m_pSubEdit->SetSizePixel(Size(aSize.Width(), nEditHeight));
+        m_pSubEdit->Draw( pDev, aPos, nFlags );
+        m_pSubEdit->SetSizePixel(aOrigSize);
 
         // Second, draw the listbox
         if ( GetStyle() & WB_CENTER )
@@ -1225,7 +1183,7 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& 
rPos, SystemTextColorFlags
         sal_Int32 nLines = static_cast<sal_Int32>( nTextHeight > 0 ? 
(aSize.Height()-nEditHeight)/nTextHeight : 1 );
         if ( !nLines )
             nLines = 1;
-        const sal_Int32 nTEntry = IsReallyVisible() ? 
m_pImpl->m_pImplLB->GetTopEntry() : 0;
+        const sal_Int32 nTEntry = IsReallyVisible() ? m_pImplLB->GetTopEntry() 
: 0;
 
         tools::Rectangle aTextRect( aPos, aSize );
 
@@ -1237,7 +1195,7 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& 
rPos, SystemTextColorFlags
         // the drawing starts here
         for ( sal_Int32 n = 0; n < nLines; ++n )
         {
-            pDev->DrawText( aTextRect, 
m_pImpl->m_pImplLB->GetEntryList().GetEntryText( n+nTEntry ), nTextStyle );
+            pDev->DrawText( aTextRect, m_pImplLB->GetEntryList().GetEntryText( 
n+nTEntry ), nTextStyle );
             aTextRect.AdjustTop(nTextHeight );
             aTextRect.AdjustBottom(nTextHeight );
         }
@@ -1248,17 +1206,17 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& 
rPos, SystemTextColorFlags
     // Call Edit::Draw after restoring the MapMode...
     if ( IsDropDownBox() )
     {
-        Size aOrigSize(m_pImpl->m_pSubEdit->GetSizePixel());
-        m_pImpl->m_pSubEdit->SetSizePixel(GetSizePixel());
-        m_pImpl->m_pSubEdit->Draw( pDev, rPos, nFlags );
-        m_pImpl->m_pSubEdit->SetSizePixel(aOrigSize);
+        Size aOrigSize(m_pSubEdit->GetSizePixel());
+        m_pSubEdit->SetSizePixel(GetSizePixel());
+        m_pSubEdit->Draw( pDev, rPos, nFlags );
+        m_pSubEdit->SetSizePixel(aOrigSize);
         // DD-Button ?
     }
 }
 
 void ComboBox::SetUserDrawHdl(const Link<UserDrawEvent*, void>& rLink)
 {
-    m_pImpl->m_pImplLB->SetUserDrawHdl(rLink);
+    m_pImplLB->SetUserDrawHdl(rLink);
 }
 
 void ComboBox::SetUserItemSize( const Size& rSz )
@@ -1283,66 +1241,66 @@ void ComboBox::DrawEntry(const UserDrawEvent& rEvt)
 
 void ComboBox::AddSeparator( sal_Int32 n )
 {
-    m_pImpl->m_pImplLB->AddSeparator( n );
+    m_pImplLB->AddSeparator( n );
 }
 
 void ComboBox::SetMRUEntries( std::u16string_view rEntries )
 {
-    m_pImpl->m_pImplLB->SetMRUEntries( rEntries, ';' );
+    m_pImplLB->SetMRUEntries( rEntries, ';' );
 }
 
 OUString ComboBox::GetMRUEntries() const
 {
-    return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetMRUEntries( ';' ) : 
OUString();
+    return m_pImplLB ? m_pImplLB->GetMRUEntries( ';' ) : OUString();
 }
 
 void ComboBox::SetMaxMRUCount( sal_Int32 n )
 {
-    m_pImpl->m_pImplLB->SetMaxMRUCount( n );
+    m_pImplLB->SetMaxMRUCount( n );
 }
 
 sal_Int32 ComboBox::GetMaxMRUCount() const
 {
-    return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetMaxMRUCount() : 0;
+    return m_pImplLB ? m_pImplLB->GetMaxMRUCount() : 0;
 }
 
 sal_uInt16 ComboBox::GetDisplayLineCount() const
 {
-    return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetDisplayLineCount() : 0;
+    return m_pImplLB ? m_pImplLB->GetDisplayLineCount() : 0;
 }
 
 void ComboBox::SetEntryData( sal_Int32 nPos, void* pNewData )
 {
-    m_pImpl->m_pImplLB->SetEntryData( nPos + 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), pNewData );
+    m_pImplLB->SetEntryData( nPos + m_pImplLB->GetEntryList().GetMRUCount(), 
pNewData );
 }
 
 void* ComboBox::GetEntryData( sal_Int32 nPos ) const
 {
-    return m_pImpl->m_pImplLB->GetEntryList().GetEntryData(
-            nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount() );
+    return m_pImplLB->GetEntryList().GetEntryData(
+            nPos + m_pImplLB->GetEntryList().GetMRUCount() );
 }
 
 sal_Int32 ComboBox::GetTopEntry() const
 {
-    sal_Int32 nPos = GetEntryCount() ? m_pImpl->m_pImplLB->GetTopEntry() : 
LISTBOX_ENTRY_NOTFOUND;
-    if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetMRUCount())
+    sal_Int32 nPos = GetEntryCount() ? m_pImplLB->GetTopEntry() : 
LISTBOX_ENTRY_NOTFOUND;
+    if (nPos < m_pImplLB->GetEntryList().GetMRUCount())
         nPos = 0;
     return nPos;
 }
 
 tools::Rectangle ComboBox::GetDropDownPosSizePixel() const
 {
-    return m_pImpl->m_pFloatWin
-        ? m_pImpl->m_pFloatWin->GetWindowExtentsRelative(*this)
+    return m_pFloatWin
+        ? m_pFloatWin->GetWindowExtentsRelative(*this)
         : tools::Rectangle();
 }
 
 const Wallpaper& ComboBox::GetDisplayBackground() const
 {
-    if (!m_pImpl->m_pSubEdit->IsBackground())
+    if (!m_pSubEdit->IsBackground())
         return Control::GetDisplayBackground();
 
-    const Wallpaper& rBack = m_pImpl->m_pSubEdit->GetBackground();
+    const Wallpaper& rBack = m_pSubEdit->GetBackground();
     if( ! rBack.IsBitmap() &&
         ! rBack.IsGradient() &&
         rBack == Wallpaper(COL_TRANSPARENT)
@@ -1353,38 +1311,38 @@ const Wallpaper& ComboBox::GetDisplayBackground() const
 
 sal_Int32 ComboBox::GetSelectedEntryCount() const
 {
-    return m_pImpl->m_pImplLB->GetEntryList().GetSelectedEntryCount();
+    return m_pImplLB->GetEntryList().GetSelectedEntryCount();
 }
 
 sal_Int32 ComboBox::GetSelectedEntryPos( sal_Int32 nIndex ) const
 {
-    sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList().GetSelectedEntryPos( 
nIndex );
+    sal_Int32 nPos = m_pImplLB->GetEntryList().GetSelectedEntryPos( nIndex );
     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     {
-        if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetMRUCount())
-            nPos = 
m_pImpl->m_pImplLB->GetEntryList().FindEntry(m_pImpl->m_pImplLB->GetEntryList().GetEntryText(nPos));
-        nPos = sal::static_int_cast<sal_Int32>(nPos - 
m_pImpl->m_pImplLB->GetEntryList().GetMRUCount());
+        if (nPos < m_pImplLB->GetEntryList().GetMRUCount())
+            nPos = 
m_pImplLB->GetEntryList().FindEntry(m_pImplLB->GetEntryList().GetEntryText(nPos));
+        nPos = sal::static_int_cast<sal_Int32>(nPos - 
m_pImplLB->GetEntryList().GetMRUCount());
     }
     return nPos;
 }
 
 bool ComboBox::IsEntryPosSelected( sal_Int32 nPos ) const
 {
-    return m_pImpl->m_pImplLB->GetEntryList().IsEntryPosSelected(
-            nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount() );
+    return m_pImplLB->GetEntryList().IsEntryPosSelected(
+            nPos + m_pImplLB->GetEntryList().GetMRUCount() );
 }
 
 void ComboBox::SelectEntryPos( sal_Int32 nPos, bool bSelect)
 {
-    if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetEntryCount())
-        m_pImpl->m_pImplLB->SelectEntry(
-            nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), bSelect);
+    if (nPos < m_pImplLB->GetEntryList().GetEntryCount())
+        m_pImplLB->SelectEntry(
+            nPos + m_pImplLB->GetEntryList().GetMRUCount(), bSelect);
 }
 
 void ComboBox::SetNoSelection()
 {
-    m_pImpl->m_pImplLB->SetNoSelection();
-    m_pImpl->m_pSubEdit->SetText( OUString() );
+    m_pImplLB->SetNoSelection();
+    m_pSubEdit->SetText(OUString());
 }
 
 tools::Rectangle ComboBox::GetBoundingRectangle( sal_Int32 nItem ) const
@@ -1400,8 +1358,8 @@ void ComboBox::SetBorderStyle( WindowBorderStyle 
nBorderStyle )
     Window::SetBorderStyle( nBorderStyle );
     if ( !IsDropDownBox() )
     {
-        m_pImpl->m_pSubEdit->SetBorderStyle( nBorderStyle );
-        m_pImpl->m_pImplLB->SetBorderStyle( nBorderStyle );
+        m_pSubEdit->SetBorderStyle(nBorderStyle);
+        m_pImplLB->SetBorderStyle( nBorderStyle );
     }
 }
 
@@ -1413,13 +1371,13 @@ void ComboBox::SetHighlightColor( const Color& rColor )
     aSettings.SetStyleSettings(aStyle);
     SetSettings(aSettings);
 
-    AllSettings aSettingsSubEdit(m_pImpl->m_pSubEdit->GetSettings());
+    AllSettings aSettingsSubEdit(m_pSubEdit->GetSettings());
     StyleSettings aStyleSubEdit(aSettingsSubEdit.GetStyleSettings());
     aStyleSubEdit.SetHighlightColor(rColor);
     aSettingsSubEdit.SetStyleSettings(aStyleSubEdit);
-    m_pImpl->m_pSubEdit->SetSettings(aSettings);
+    m_pSubEdit->SetSettings(aSettings);
 
-    m_pImpl->m_pImplLB->SetHighlightColor(rColor);
+    m_pImplLB->SetHighlightColor(rColor);
 }
 
 void ComboBox::SetHighlightTextColor( const Color& rColor )
@@ -1430,18 +1388,18 @@ void ComboBox::SetHighlightTextColor( const Color& 
rColor )
     aSettings.SetStyleSettings(aStyle);
     SetSettings(aSettings);
 
-    AllSettings aSettingsSubEdit(m_pImpl->m_pSubEdit->GetSettings());
+    AllSettings aSettingsSubEdit(m_pSubEdit->GetSettings());
     StyleSettings aStyleSubEdit(aSettingsSubEdit.GetStyleSettings());
     aStyleSubEdit.SetHighlightTextColor(rColor);
     aSettingsSubEdit.SetStyleSettings(aStyleSubEdit);
-    m_pImpl->m_pSubEdit->SetSettings(aSettings);
+    m_pSubEdit->SetSettings(aSettings);
 
-    m_pImpl->m_pImplLB->SetHighlightTextColor(rColor);
+    m_pImplLB->SetHighlightTextColor(rColor);
 }
 
 ImplListBoxWindow* ComboBox::GetMainWindow() const
 {
-    return m_pImpl->m_pImplLB->GetMainWindow();
+    return m_pImplLB->GetMainWindow();
 }
 
 tools::Long ComboBox::GetIndexForPoint( const Point& rPoint, sal_Int32& rPos ) 
const
@@ -1478,7 +1436,7 @@ tools::Long ComboBox::GetIndexForPoint( const Point& 
rPoint, sal_Int32& rPos ) c
     return nIndex;
 }
 
-ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds(
+ComboBoxBounds ComboBox::calcComboBoxDropDownComponentBounds(
     const Size &rOutSz, const Size &rBorderOutSz) const
 {
     ComboBoxBounds aBounds;
@@ -1486,7 +1444,7 @@ ComboBoxBounds 
ComboBox::Impl::calcComboBoxDropDownComponentBounds(
     tools::Long    nTop = 0;
     tools::Long    nBottom = rOutSz.Height();
 
-    vcl::Window *pBorder = m_rThis.GetWindow( GetWindowType::Border );
+    vcl::Window *pBorder = GetWindow(GetWindowType::Border);
     ImplControlValue aControlValue;
     Point aPoint;
     tools::Rectangle aContent, aBound;
@@ -1494,18 +1452,18 @@ ComboBoxBounds 
ComboBox::Impl::calcComboBoxDropDownComponentBounds(
     // use the full extent of the control
     tools::Rectangle aArea( aPoint, rBorderOutSz );
 
-    if (m_rThis.GetNativeControlRegion(ControlType::Combobox, 
ControlPart::ButtonDown,
+    if (GetNativeControlRegion(ControlType::Combobox, ControlPart::ButtonDown,
             aArea, ControlState::NONE, aControlValue, aBound, aContent) )
     {
         // convert back from border space to local coordinates
-        aPoint = 
pBorder->ScreenToOutputPixel(m_rThis.OutputToScreenPixel(aPoint));
+        aPoint = pBorder->ScreenToOutputPixel(OutputToScreenPixel(aPoint));
         aContent.Move(-aPoint.X(), -aPoint.Y());
 
         aBounds.aButtonPos = Point(aContent.Left(), nTop);
         aBounds.aButtonSize = Size(aContent.getOpenWidth(), (nBottom-nTop));
 
         // adjust the size of the edit field
-        if (m_rThis.GetNativeControlRegion(ControlType::Combobox, 
ControlPart::SubEdit,
+        if (GetNativeControlRegion(ControlType::Combobox, ControlPart::SubEdit,
                     aArea, ControlState::NONE, aControlValue, aBound, 
aContent) )
         {
             // convert back from border space to local coordinates
@@ -1523,8 +1481,8 @@ ComboBoxBounds 
ComboBox::Impl::calcComboBoxDropDownComponentBounds(
     }
     else
     {
-        tools::Long nSBWidth = 
m_rThis.GetSettings().GetStyleSettings().GetScrollBarSize();
-        nSBWidth = m_rThis.CalcZoom( nSBWidth );
+        tools::Long nSBWidth = 
GetSettings().GetStyleSettings().GetScrollBarSize();
+        nSBWidth = CalcZoom( nSBWidth );
         aBounds.aSubEditSize = Size(rOutSz.Width() - nSBWidth, 
rOutSz.Height());
         aBounds.aButtonPos = Point(rOutSz.Width() - nSBWidth, nTop);
         aBounds.aButtonSize = Size(nSBWidth, (nBottom-nTop));
@@ -1534,18 +1492,18 @@ ComboBoxBounds 
ComboBox::Impl::calcComboBoxDropDownComponentBounds(
 
 void ComboBox::SetWidthInChars(sal_Int32 nWidthInChars)
 {
-    if (nWidthInChars != m_pImpl->m_nWidthInChars)
+    if (nWidthInChars != m_nWidthInChars)
     {
-        m_pImpl->m_nWidthInChars = nWidthInChars;
+        m_nWidthInChars = nWidthInChars;
         queue_resize();
     }
 }
 
 void ComboBox::setMaxWidthChars(sal_Int32 nWidth)
 {
-    if (nWidth != m_pImpl->m_nMaxWidthChars)
+    if (nWidth != m_nMaxWidthChars)
     {
-        m_pImpl->m_nMaxWidthChars = nWidth;
+        m_nMaxWidthChars = nWidth;
         queue_resize();
     }
 }

Reply via email to