From 6b00cc80f1fdb3ef134e2df694a0c34905442042 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Thu, 7 Nov 2019 20:44:14 +0100 Subject: [PATCH] Revert making wxComboCtrl a wxCompositeWindow Commit 70e9dbd756 has fixed #18394 but unfortunately it also caused several other issues observed e.g. in #18540. Apparently wxComboCtrl doesn't fit well to the wxCompositeWindow framework - especially when wxCB_READONLY flag is set and there is no main editor control what is problematic for wxCompositeWindow implementation. At the moment it is more pragmatic to go back to the original wxComboCtrl concept as a plain compound control to fix the regression and try to fix #18394 in an alternative way. Closes #18540. See #18394. --- include/wx/combo.h | 12 +++++++----- src/common/combocmn.cpp | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/include/wx/combo.h b/include/wx/combo.h index 35ea5e2373..2ba9780a2d 100644 --- a/include/wx/combo.h +++ b/include/wx/combo.h @@ -46,7 +46,6 @@ #include "wx/bitmap.h" // wxBitmap used by-value #include "wx/textentry.h" #include "wx/time.h" // needed for wxMilliClock_t -#include "wx/compositewin.h" // wxComboCtrlBase declaration class WXDLLIMPEXP_FWD_CORE wxTextCtrl; class WXDLLIMPEXP_FWD_CORE wxComboPopup; @@ -141,14 +140,14 @@ struct wxComboCtrlFeatures }; -class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxCompositeWindow, +class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxControl, public wxTextEntry { friend class wxComboPopup; friend class wxComboPopupEvtHandler; public: // ctors and such - wxComboCtrlBase() : wxCompositeWindow(), wxTextEntry() { Init(); } + wxComboCtrlBase() : wxControl(), wxTextEntry() { Init(); } bool Create(wxWindow *parent, wxWindowID id, @@ -473,6 +472,7 @@ public: { return m_mainCtrlWnd; } // also set the embedded wxTextCtrl colours + virtual bool SetForegroundColour(const wxColour& colour) wxOVERRIDE; virtual bool SetBackgroundColour(const wxColour& colour) wxOVERRIDE; protected: @@ -598,6 +598,10 @@ protected: // Flags are same as for DoShowPopup. virtual bool AnimateShow( const wxRect& rect, int flags ); +#if wxUSE_TOOLTIPS + virtual void DoSetToolTip( wxToolTip *tip ) wxOVERRIDE; +#endif + // protected wxTextEntry methods virtual void DoSetValue(const wxString& value, int flags) wxOVERRIDE; virtual wxString DoGetValue() const wxOVERRIDE; @@ -607,8 +611,6 @@ protected: virtual bool DoSetMargins(const wxPoint& pt) wxOVERRIDE; virtual wxPoint DoGetMargins() const wxOVERRIDE; - virtual wxWindowList GetCompositeWindowParts() const wxOVERRIDE; - // This is used when m_text is hidden (readonly). wxString m_valueString; diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp index 4e87e9f75b..d3920f9d8c 100644 --- a/src/common/combocmn.cpp +++ b/src/common/combocmn.cpp @@ -1535,6 +1535,37 @@ bool wxComboCtrlBase::SetFont ( const wxFont& font ) return true; } +#if wxUSE_TOOLTIPS +void wxComboCtrlBase::DoSetToolTip(wxToolTip *tooltip) +{ + wxControl::DoSetToolTip(tooltip); + + // Set tool tip for button and text box + if ( tooltip ) + { + const wxString &tip = tooltip->GetTip(); + if ( m_text ) m_text->SetToolTip(tip); + if ( m_btn ) m_btn->SetToolTip(tip); + } + else + { + if ( m_text ) m_text->SetToolTip( NULL ); + if ( m_btn ) m_btn->SetToolTip( NULL ); + } +} +#endif // wxUSE_TOOLTIPS + +bool wxComboCtrlBase::SetForegroundColour(const wxColour& colour) +{ + if ( wxControl::SetForegroundColour(colour) ) + { + if ( m_text ) + m_text->SetForegroundColour(colour); + return true; + } + return false; +} + bool wxComboCtrlBase::SetBackgroundColour(const wxColour& colour) { if ( m_text ) @@ -2717,16 +2748,6 @@ void wxComboCtrlBase::SetTextCtrlStyle( int style ) m_text->SetWindowStyle(style); } -wxWindowList wxComboCtrlBase::GetCompositeWindowParts() const -{ - wxWindowList parts; - if ( m_text ) - parts.push_back(m_text); - if ( m_btn ) - parts.push_back(m_btn); - return parts; -} - // ---------------------------------------------------------------------------- // wxTextEntry interface // ----------------------------------------------------------------------------